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

#ifndef __gnu_java_nio_charset_UTF_16Decoder__
#define __gnu_java_nio_charset_UTF_16Decoder__

#pragma interface

#include <java/nio/charset/CharsetDecoder.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace nio
      {
        namespace charset
        {
            class UTF_16Decoder;
        }
      }
    }
  }
  namespace java
  {
    namespace nio
    {
        class ByteBuffer;
        class CharBuffer;
      namespace charset
      {
          class Charset;
          class CoderResult;
      }
    }
  }
}

class gnu::java::nio::charset::UTF_16Decoder : public ::java::nio::charset::CharsetDecoder
{

public: // actually package-private
  UTF_16Decoder(::java::nio::charset::Charset *, jint);
public: // actually protected
  ::java::nio::charset::CoderResult * decodeLoop(::java::nio::ByteBuffer *, ::java::nio::CharBuffer *);
  void implReset();
public: // actually package-private
  static const jint BIG_ENDIAN = 0;
  static const jint LITTLE_ENDIAN = 1;
  static const jint UNKNOWN_ENDIAN = 2;
  static const jint MAYBE_BIG_ENDIAN = 3;
  static const jint MAYBE_LITTLE_ENDIAN = 4;
private:
  static const jchar BYTE_ORDER_MARK = 65279;
  static const jchar REVERSED_BYTE_ORDER_MARK = 65534;
  jint __attribute__((aligned(__alignof__( ::java::nio::charset::CharsetDecoder)))) originalByteOrder;
  jint byteOrder;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_nio_charset_UTF_16Decoder__
