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

#ifndef __java_io_ObjectInputStream__
#define __java_io_ObjectInputStream__

#pragma interface

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

class java::io::ObjectInputStream : public ::java::io::InputStream
{
public:
  ObjectInputStream (::java::io::InputStream *);
  ::java::lang::Object *readObject ();
public:  // actually protected
  virtual ::java::io::ObjectStreamClass *readClassDescriptor ();
public:
  virtual void defaultReadObject ();
  virtual void registerValidation (::java::io::ObjectInputValidation *, jint);
public:  // actually protected
  virtual ::java::lang::Class *resolveClass (::java::io::ObjectStreamClass *);
private:
  ::java::lang::ClassLoader *currentLoader ();
  ::java::io::ObjectStreamClass *lookupClass (::java::lang::Class *);
  JArray< ::java::io::ObjectStreamClass *> *inputGetObjectStreamClasses (::java::lang::Class *);
public:  // actually protected
  virtual ::java::lang::Object *resolveObject (::java::lang::Object *);
  virtual ::java::lang::Class *resolveProxyClass (JArray< ::java::lang::String *> *);
  virtual jboolean enableResolveObject (jboolean);
  virtual void readStreamHeader ();
public:
  virtual jint read ();
  virtual jint read (jbyteArray, jint, jint);
  virtual jint available ();
  virtual void close ();
  virtual jboolean readBoolean ();
  virtual jbyte readByte ();
  virtual jint readUnsignedByte ();
  virtual jshort readShort ();
  virtual jint readUnsignedShort ();
  virtual jchar readChar ();
  virtual jint readInt ();
  virtual jlong readLong ();
  virtual jfloat readFloat ();
  virtual jdouble readDouble ();
  virtual void readFully (jbyteArray);
  virtual void readFully (jbyteArray, jint, jint);
  virtual jint skipBytes (jint);
  virtual ::java::lang::String *readLine ();
  virtual ::java::lang::String *readUTF ();
  virtual ::java::io::ObjectInputStream$GetField *readFields ();
public:  // actually protected
  ObjectInputStream ();
  virtual ::java::lang::Object *readObjectOverride ();
private:
  jint assignNewHandle (::java::lang::Object *);
  ::java::lang::Object *processResolution (::java::lang::Object *, jint);
  void clearHandles ();
  void readNextBlock ();
  void readNextBlock (jbyte);
  void readArrayElements (::java::lang::Object *, ::java::lang::Class *);
  void readFields (::java::lang::Object *, ::java::io::ObjectStreamClass *);
  jboolean setBlockDataMode (jboolean);
  ::java::lang::Object *newObject (::java::lang::Class *, ::java::lang::Class *);
  void invokeValidators ();
  static ::java::lang::ClassLoader *currentClassLoader (::java::lang::SecurityManager *);
  ::java::lang::reflect::Field *getField (::java::lang::Class *, ::java::lang::String *);
  static ::java::lang::reflect::Method *getMethod (::java::lang::Class *, ::java::lang::String *, JArray< ::java::lang::Class *> *);
  void callReadMethod (::java::lang::Object *, ::java::io::ObjectStreamClass *);
  ::java::lang::Object *allocateObject (::java::lang::Class *);
  void callConstructor (::java::lang::Class *, ::java::lang::Object *);
  void setBooleanField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *, jboolean);
  void setByteField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *, jbyte);
  void setCharField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *, jchar);
  void setDoubleField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *, jdouble);
  void setFloatField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *, jfloat);
  void setIntField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *, jint);
  void setLongField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *, jlong);
  void setShortField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *, jshort);
  void setObjectField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *, ::java::lang::String *, ::java::lang::Object *);
  void dumpElement (::java::lang::String *) { }
  void dumpElementln (::java::lang::String *) { }
  static const jint BUFFER_SIZE = 1024L;
  static JArray< ::java::lang::Class *> *readObjectParams;
  ::java::io::DataInputStream * __attribute__((aligned(__alignof__( ::java::io::InputStream )))) realInputStream;
  ::java::io::DataInputStream *dataInputStream;
  ::java::io::DataInputStream *blockDataInput;
  jint blockDataPosition;
  jint blockDataBytes;
  jbyteArray blockData;
  jboolean useSubclassMethod;
  jint nextOID;
  jboolean resolveEnabled;
  ::java::util::Hashtable *objectLookupTable;
  ::java::lang::Object *currentObject;
  ::java::io::ObjectStreamClass *currentObjectStreamClass;
  jboolean readDataFromBlock;
  jboolean isDeserializing;
  jboolean fieldsAlreadyRead;
  ::java::util::Vector *validators;
  ::java::util::Hashtable *classLookupTable;
  ::java::io::ObjectInputStream$GetField *prereadFields;
  static jboolean dump;

  friend class java_io_ObjectInputStream$5;
  friend class java_io_ObjectInputStream$4;
  friend class java_io_ObjectInputStream$3;
  friend class java_io_ObjectInputStream$GetField;
  friend class java_io_ObjectInputStream$2;
  friend class java_io_ObjectInputStream$1;
public:

  static ::java::lang::Class class$;
};

#endif /* __java_io_ObjectInputStream__ */
