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

#ifndef __java_nio_LongBuffer__
#define __java_nio_LongBuffer__

#pragma interface

#include <java/nio/Buffer.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace gcj
    {
        class RawData;
    }
  }
  namespace java
  {
    namespace nio
    {
        class ByteOrder;
        class LongBuffer;
    }
  }
}

class java::nio::LongBuffer : public ::java::nio::Buffer
{

public: // actually package-private
  LongBuffer(jint, jint, jint, jint, ::gnu::gcj::RawData *, JArray< jlong > *, jint);
public:
  static ::java::nio::LongBuffer * allocate(jint);
  static ::java::nio::LongBuffer * wrap(JArray< jlong > *, jint, jint);
  static ::java::nio::LongBuffer * wrap(JArray< jlong > *);
  virtual ::java::nio::LongBuffer * get(JArray< jlong > *, jint, jint);
  virtual ::java::nio::LongBuffer * get(JArray< jlong > *);
  virtual ::java::nio::LongBuffer * put(::java::nio::LongBuffer *);
  virtual ::java::nio::LongBuffer * put(JArray< jlong > *, jint, jint);
  virtual ::java::nio::LongBuffer * put(JArray< jlong > *);
  virtual jboolean hasArray();
  virtual JArray< jlong > * array();
  virtual jint arrayOffset();
  virtual jint hashCode();
  virtual jboolean equals(::java::lang::Object *);
  virtual jint LongBuffer$compareTo(::java::nio::LongBuffer *);
  virtual ::java::nio::ByteOrder * order() = 0;
  virtual jlong get() = 0;
  virtual ::java::nio::LongBuffer * put(jlong) = 0;
  virtual jlong get(jint) = 0;
  virtual ::java::nio::LongBuffer * put(jint, jlong) = 0;
  virtual ::java::nio::LongBuffer * compact() = 0;
  virtual jboolean isDirect() = 0;
  virtual ::java::nio::LongBuffer * slice() = 0;
  virtual ::java::nio::LongBuffer * duplicate() = 0;
  virtual ::java::nio::LongBuffer * asReadOnlyBuffer() = 0;
  virtual jint compareTo(::java::lang::Object *);
public: // actually package-private
  jint __attribute__((aligned(__alignof__( ::java::nio::Buffer)))) array_offset;
  JArray< jlong > * backing_buffer;
public:
  static ::java::lang::Class class$;
};

#endif // __java_nio_LongBuffer__
