// 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>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
        namespace action
        {
          class SetAccessibleAction;
        }
      }
    }
  }
}

class java::io::ObjectOutputStream : public ::java::io::OutputStream
{
public:
  ObjectOutputStream (::java::io::OutputStream *);
  virtual void writeObject (::java::lang::Object *);
public:  // actually protected
  virtual void writeClassDescriptor (::java::io::ObjectStreamClass *);
public:
  virtual void defaultWriteObject ();
private:
  void markFieldsWritten ();
public:
  virtual void reset ();
private:
  void reset (jboolean);
public:
  virtual void useProtocolVersion (jint);
public:  // actually protected
  virtual void annotateClass (::java::lang::Class *) { }
  virtual void annotateProxyClass (::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 *, ::java::io::ObjectStreamClass *);
public: // actually package-private
  virtual jboolean setBlockDataMode (jboolean);
private:
  void callWriteMethod (::java::lang::Object *, ::java::io::ObjectStreamClass *);
  jboolean getBooleanField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *);
  jbyte getByteField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *);
  jchar getCharField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *);
  jdouble getDoubleField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *);
  jfloat getFloatField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *);
  jint getIntField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *);
  jlong getLongField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *);
  jshort getShortField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *);
  ::java::lang::Object *getObjectField (::java::lang::Object *, ::java::lang::Class *, ::java::lang::String *, ::java::lang::String *);
  ::java::lang::reflect::Field *getField (::java::lang::Class *, ::java::lang::String *);
  void dumpElementln (::java::lang::String *);
  static const jint BUFFER_SIZE = 1024L;
  static jint defaultProtocolVersion;
  ::java::io::DataOutputStream * __attribute__((aligned(__alignof__( ::java::io::OutputStream )))) dataOutput;
  jboolean writeDataAsBlocks;
  ::java::io::DataOutputStream *realOutput;
  ::java::io::DataOutputStream *blockDataOutput;
  jbyteArray blockData;
  jint blockDataCount;
  ::java::lang::Object *currentObject;
public: // actually package-private
  ::java::io::ObjectStreamClass *currentObjectStreamClass;
private:
  ::java::io::ObjectOutputStream$PutField *currentPutField;
  jboolean fieldsAlreadyWritten;
  jboolean replacementEnabled;
  jboolean isSerializing;
  jint nextOID;
  ::java::util::Hashtable *OIDLookupTable;
  jint protocolVersion;
  jboolean useSubclassMethod;
  ::gnu::java::security::action::SetAccessibleAction *setAccessible;
  jint depth;
  jboolean dump;
  static const jint DEBUG = 0L;

  friend class java_io_ObjectOutputStream$1;
  friend class java_io_ObjectOutputStream$PutField;
public:

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

#endif /* __java_io_ObjectOutputStream__ */
