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

#ifndef __java_nio_ShortViewBufferImpl__
#define __java_nio_ShortViewBufferImpl__

#pragma interface

#include <java/nio/ShortBuffer.h>
extern "Java"
{
  namespace java
  {
    namespace nio
    {
        class ByteBuffer;
        class ByteOrder;
        class ShortBuffer;
        class ShortViewBufferImpl;
    }
  }
}

class java::nio::ShortViewBufferImpl : public ::java::nio::ShortBuffer
{

public: // actually package-private
  ShortViewBufferImpl(::java::nio::ByteBuffer *, jint);
public:
  ShortViewBufferImpl(::java::nio::ByteBuffer *, jint, jint, jint, jint, jint, jboolean, ::java::nio::ByteOrder *);
  jshort get();
  jshort get(jint);
  ::java::nio::ShortBuffer * put(jshort);
  ::java::nio::ShortBuffer * put(jint, jshort);
  ::java::nio::ShortBuffer * compact();
  ::java::nio::ShortBuffer * slice();
public: // actually package-private
  ::java::nio::ShortBuffer * duplicate(jboolean);
public:
  ::java::nio::ShortBuffer * duplicate();
  ::java::nio::ShortBuffer * asReadOnlyBuffer();
  jboolean isReadOnly();
  jboolean isDirect();
  ::java::nio::ByteOrder * order();
private:
  jint __attribute__((aligned(__alignof__( ::java::nio::ShortBuffer)))) offset;
  ::java::nio::ByteBuffer * bb;
  jboolean readOnly;
  ::java::nio::ByteOrder * endian;
public:
  static ::java::lang::Class class$;
};

#endif // __java_nio_ShortViewBufferImpl__
