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

#ifndef __java_nio_ShortBuffer__
#define __java_nio_ShortBuffer__

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

class java::nio::ShortBuffer : public ::java::nio::Buffer
{

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

#endif // __java_nio_ShortBuffer__
