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

#ifndef __gnu_java_net_protocol_core_CoreInputStream__
#define __gnu_java_net_protocol_core_CoreInputStream__

#pragma interface

#include <java/io/InputStream.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace gcj
    {
        class Core;
        class RawData;
    }
    namespace java
    {
      namespace net
      {
        namespace protocol
        {
          namespace core
          {
              class CoreInputStream;
          }
        }
      }
    }
  }
}

class gnu::java::net::protocol::core::CoreInputStream : public ::java::io::InputStream
{

  jint unsafeGetByte(jlong);
  jint copyIntoByteArray(JArray< jbyte > *, jint, jint);
public:
  CoreInputStream(::gnu::gcj::Core *);
  virtual jint available();
  virtual void mark(jint);
  virtual jboolean markSupported();
  virtual jint read();
  virtual jint read(JArray< jbyte > *, jint, jint);
  virtual void reset();
  virtual jlong skip(jlong);
public: // actually protected
  ::gnu::gcj::RawData * __attribute__((aligned(__alignof__( ::java::io::InputStream)))) ptr;
  jint pos;
  jint mark__;
  jint count;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_net_protocol_core_CoreInputStream__
