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

#ifndef __gnu_java_nio_charset_ByteCharset$Decoder__
#define __gnu_java_nio_charset_ByteCharset$Decoder__

#pragma interface

#include <java/nio/charset/CharsetDecoder.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace nio
      {
        namespace charset
        {
            class ByteCharset;
            class ByteCharset$Decoder;
            class ByteDecodeLoopHelper;
        }
      }
    }
  }
  namespace java
  {
    namespace nio
    {
        class ByteBuffer;
        class CharBuffer;
      namespace charset
      {
          class CoderResult;
      }
    }
  }
}

class gnu::java::nio::charset::ByteCharset$Decoder : public ::java::nio::charset::CharsetDecoder
{

public: // actually package-private
  ByteCharset$Decoder(::gnu::java::nio::charset::ByteCharset *);
public: // actually protected
  ::java::nio::charset::CoderResult * decodeLoop(::java::nio::ByteBuffer *, ::java::nio::CharBuffer *);
public: // actually package-private
  static JArray< jchar > * access$0(::gnu::java::nio::charset::ByteCharset$Decoder *);
private:
  JArray< jchar > * __attribute__((aligned(__alignof__( ::java::nio::charset::CharsetDecoder)))) lookup;
  ::gnu::java::nio::charset::ByteDecodeLoopHelper * helper;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_nio_charset_ByteCharset$Decoder__
