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

#ifndef __java_nio_FloatBuffer__
#define __java_nio_FloatBuffer__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace nio
    {
        class ByteOrder;
        class FloatBuffer;
    }
  }
}

class java::nio::FloatBuffer : public ::java::nio::Buffer
{

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

#endif // __java_nio_FloatBuffer__
