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

#ifndef __gnu_java_rmi_server_UnicastRemoteCall$DummyObjectInputStream__
#define __gnu_java_rmi_server_UnicastRemoteCall$DummyObjectInputStream__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace rmi
      {
        namespace server
        {
            class UnicastRemoteCall;
            class UnicastRemoteCall$DummyObjectInputStream;
        }
      }
    }
  }
}

class gnu::java::rmi::server::UnicastRemoteCall$DummyObjectInputStream : public ::java::lang::Object
{

public: // actually package-private
  UnicastRemoteCall$DummyObjectInputStream(::gnu::java::rmi::server::UnicastRemoteCall *);
public:
  virtual jboolean readBoolean();
  virtual jbyte readByte();
  virtual jchar readChar();
  virtual jdouble readDouble();
  virtual jfloat readFloat();
  virtual jint readInt();
  virtual jlong readLong();
  virtual jshort readShort();
  virtual ::java::lang::Object * readObject();
  virtual jint read(JArray< jbyte > *);
  virtual jint read(JArray< jbyte > *, jint, jint);
  virtual jint read();
  virtual jlong skip(jlong);
  virtual jint available();
  virtual void readFully(JArray< jbyte > *);
  virtual void readFully(JArray< jbyte > *, jint, jint);
  virtual ::java::lang::String * readLine();
  virtual ::java::lang::String * readUTF();
  virtual jint readUnsignedByte();
  virtual jint readUnsignedShort();
  virtual jint skipBytes(jint);
  virtual void close();
public: // actually package-private
  ::gnu::java::rmi::server::UnicastRemoteCall * __attribute__((aligned(__alignof__( ::java::lang::Object)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_rmi_server_UnicastRemoteCall$DummyObjectInputStream__
