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

#ifndef __java_io_ObjectOutputStream__
#define __java_io_ObjectOutputStream__

#pragma interface

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

class ::java::io::ObjectOutputStream : public ::java::io::OutputStream
{
public:
  ObjectOutputStream (::java::io::OutputStream *);
  void writeObject (::java::lang::Object *);
  virtual void defaultWriteObject ();
private:
  void markFieldsWritten ();
public:
  virtual void reset ();
private:
  void reset (jboolean);
public:
  virtual void useProtocolVersion (jint);
  static void setDefaultProtocolVersion (jint);
public:  // actually protected
  virtual void annotateClass (::java::lang::Class *) { }
  virtual ::java::lang::Object *replaceObject (::java::lang::Object *);
  virtual jboolean enableReplaceObject (jboolean);
  virtual void writeStreamHeader ();
  ObjectOutputStream ();
  virtual void writeObjectOverride (::java::lang::Object *);
public:
  virtual void write (jint);
  virtual void write (jbyteArray);
  virtual void write (jbyteArray, jint, jint);
  virtual void flush ();
public:  // actually protected
  virtual void drain ();
public:
  virtual void close ();
  virtual void writeBoolean (jboolean);
  virtual void writeByte (jint);
  virtual void writeShort (jint);
  virtual void writeChar (jint);
  virtual void writeInt (jint);
  virtual void writeLong (jlong);
  virtual void writeFloat (jfloat);
  virtual void writeDouble (jdouble);
  virtual void writeBytes (::java::lang::String *);
  virtual void writeChars (::java::lang::String *);
  virtual void writeUTF (::java::lang::String *);
  virtual ::java::io::ObjectOutputStream$PutField *putFields ();
  virtual void writeFields ();
private:
  void writeBlockDataHeader (jint);
  ::java::lang::Integer *findHandle (::java::lang::Object *);
  jint assignNewHandle (::java::lang::Object *);
  void clearHandles ();
  void writeArraySizeAndElements (::java::lang::Object *, ::java::lang::Class *);
  void writeFields (::java::lang::Object *, JArray< ::java::io::ObjectStreamField *> *, jboolean);
  void setBlockDataMode (jboolean);
  void callWriteMethod (::java::lang::Object *);
  jboolean getBooleanField (::java::lang::Object *, ::java::lang::String *);
  jbyte getByteField (::java::lang::Object *, ::java::lang::String *);
  jchar getCharField (::java::lang::Object *, ::java::lang::String *);
  jdouble getDoubleField (::java::lang::Object *, ::java::lang::String *);
  jfloat getFloatField (::java::lang::Object *, ::java::lang::String *);
  jint getIntField (::java::lang::Object *, ::java::lang::String *);
  jlong getLongField (::java::lang::Object *, ::java::lang::String *);
  jshort getShortField (::java::lang::Object *, ::java::lang::String *);
  ::java::lang::Object *getObjectField (::java::lang::Object *, ::java::lang::String *, ::java::lang::String *);
  static ::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 *> *);
  static const jint BUFFER_SIZE = 1024L;
  static jint defaultProtocolVersion;
  ::java::io::DataOutputStream *dataOutput;
  jboolean writeDataAsBlocks;
  ::java::io::DataOutputStream *realOutput;
  ::java::io::DataOutputStream *blockDataOutput;
  jbyteArray blockData;
  jint blockDataCount;
  ::java::lang::Object *currentObject;
  ::java::io::ObjectStreamClass *currentObjectStreamClass;
  ::java::io::ObjectOutputStream$PutField *currentPutField;
  jboolean fieldsAlreadyWritten;
  jboolean replacementEnabled;
  jboolean isSerializing;
  jint nextOID;
  ::java::util::Hashtable *OIDLookupTable;
  jint protocolVersion;
  jboolean useSubclassMethod;
public:

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

#endif /* __java_io_ObjectOutputStream__ */
