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

#ifndef __java_nio_IntBuffer__
#define __java_nio_IntBuffer__

#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 IntBuffer;
    }
  }
}

class java::nio::IntBuffer : public ::java::nio::Buffer
{

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

#endif // __java_nio_IntBuffer__
