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

#ifndef __java_beans_XMLEncoder__
#define __java_beans_XMLEncoder__

#pragma interface

#include <java/beans/Encoder.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace beans
      {
        namespace encoder
        {
            class ScanEngine;
        }
      }
    }
  }
  namespace java
  {
    namespace beans
    {
        class Expression;
        class Statement;
        class XMLEncoder;
    }
  }
}

class java::beans::XMLEncoder : public ::java::beans::Encoder
{

public:
  XMLEncoder(::java::io::OutputStream *);
  virtual void close();
  virtual void flush();
  virtual void writeExpression(::java::beans::Expression *);
  virtual void writeStatement(::java::beans::Statement *);
  virtual void writeObject(::java::lang::Object *);
  virtual void setOwner(::java::lang::Object *);
  virtual ::java::lang::Object * getOwner();
public: // actually package-private
  ::java::lang::Object * __attribute__((aligned(__alignof__( ::java::beans::Encoder)))) owner;
  ::java::lang::Exception * exception;
  ::gnu::java::beans::encoder::ScanEngine * scanEngine;
private:
  jint accessCounter;
public:
  static ::java::lang::Class class$;
};

#endif // __java_beans_XMLEncoder__
