
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_nio_LongViewBufferImpl__
#define __java_nio_LongViewBufferImpl__

#pragma interface

#include <java/nio/LongBuffer.h>
extern "Java"
{
  namespace java
  {
    namespace nio
    {
        class ByteBuffer;
        class ByteOrder;
        class LongBuffer;
        class LongViewBufferImpl;
    }
  }
}

class java::nio::LongViewBufferImpl : public ::java::nio::LongBuffer
{

public: // actually package-private
  LongViewBufferImpl(::java::nio::ByteBuffer *, jint);
public:
  LongViewBufferImpl(::java::nio::ByteBuffer *, jint, jint, jint, jint, jint, jboolean, ::java::nio::ByteOrder *);
  jlong get();
  jlong get(jint);
  ::java::nio::LongBuffer * put(jlong);
  ::java::nio::LongBuffer * put(jint, jlong);
  ::java::nio::LongBuffer * compact();
  ::java::nio::LongBuffer * slice();
public: // actually package-private
  ::java::nio::LongBuffer * duplicate(jboolean);
public:
  ::java::nio::LongBuffer * duplicate();
  ::java::nio::LongBuffer * asReadOnlyBuffer();
  jboolean isReadOnly();
  jboolean isDirect();
  ::java::nio::ByteOrder * order();
private:
  jint __attribute__((aligned(__alignof__( ::java::nio::LongBuffer)))) offset;
  ::java::nio::ByteBuffer * bb;
  jboolean readOnly;
  ::java::nio::ByteOrder * endian;
public:
  static ::java::lang::Class class$;
};

#endif // __java_nio_LongViewBufferImpl__
