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

#ifndef __java_nio_DoubleBufferImpl__
#define __java_nio_DoubleBufferImpl__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace nio
    {
        class ByteOrder;
        class DoubleBuffer;
        class DoubleBufferImpl;
    }
  }
}

class java::nio::DoubleBufferImpl : public ::java::nio::DoubleBuffer
{

public: // actually package-private
  DoubleBufferImpl(jint);
  DoubleBufferImpl(JArray< jdouble > *, jint, jint, jint, jint, jint, jboolean);
public:
  jboolean isReadOnly();
  ::java::nio::DoubleBuffer * slice();
  ::java::nio::DoubleBuffer * duplicate();
  ::java::nio::DoubleBuffer * asReadOnlyBuffer();
  ::java::nio::DoubleBuffer * compact();
  jboolean isDirect();
  jdouble get();
  ::java::nio::DoubleBuffer * put(jdouble);
  jdouble get(jint);
  ::java::nio::DoubleBuffer * put(jint, jdouble);
  ::java::nio::ByteOrder * order();
private:
  jboolean __attribute__((aligned(__alignof__( ::java::nio::DoubleBuffer)))) readOnly;
public:
  static ::java::lang::Class class$;
};

#endif // __java_nio_DoubleBufferImpl__
