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

#ifndef __java_nio_CharBufferImpl__
#define __java_nio_CharBufferImpl__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace nio
    {
        class ByteOrder;
        class CharBuffer;
        class CharBufferImpl;
    }
  }
}

class java::nio::CharBufferImpl : public ::java::nio::CharBuffer
{

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

#endif // __java_nio_CharBufferImpl__
