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

#ifndef __gnu_java_nio_charset_ByteDecodeLoopHelper__
#define __gnu_java_nio_charset_ByteDecodeLoopHelper__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace nio
      {
        namespace charset
        {
            class ByteDecodeLoopHelper;
        }
      }
    }
  }
  namespace java
  {
    namespace nio
    {
        class ByteBuffer;
        class CharBuffer;
      namespace charset
      {
          class CoderResult;
      }
    }
  }
}

class gnu::java::nio::charset::ByteDecodeLoopHelper : public ::java::lang::Object
{

public:
  ByteDecodeLoopHelper();
public: // actually protected
  virtual jboolean isMappable(jbyte) = 0;
  virtual jchar mapToChar(jbyte) = 0;
public: // actually package-private
  virtual ::java::nio::charset::CoderResult * decodeLoop(::java::nio::ByteBuffer *, ::java::nio::CharBuffer *);
private:
  ::java::nio::charset::CoderResult * normalDecodeLoop(::java::nio::ByteBuffer *, ::java::nio::CharBuffer *);
  ::java::nio::charset::CoderResult * arrayDecodeLoop(::java::nio::ByteBuffer *, ::java::nio::CharBuffer *);
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_nio_charset_ByteDecodeLoopHelper__
