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

#ifndef __gnu_java_beans_encoder_elements_Element__
#define __gnu_java_beans_encoder_elements_Element__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace beans
      {
        namespace encoder
        {
            class ObjectId;
            class Writer;
          namespace elements
          {
              class Element;
          }
        }
      }
    }
  }
}

class gnu::java::beans::encoder::elements::Element : public ::java::lang::Object
{

public:
  Element();
  virtual void initId(::gnu::java::beans::encoder::ObjectId *);
  virtual void addChild(::gnu::java::beans::encoder::elements::Element *);
  virtual void removeLast();
  virtual ::java::util::Iterator * iterator();
  virtual void clear();
  virtual jboolean isEmpty();
  virtual ::gnu::java::beans::encoder::ObjectId * getId();
  virtual void writeStart(::gnu::java::beans::encoder::Writer *) = 0;
  virtual void writeEnd(::gnu::java::beans::encoder::Writer *);
private:
  ::java::util::LinkedList * __attribute__((aligned(__alignof__( ::java::lang::Object)))) children;
  ::gnu::java::beans::encoder::ObjectId * objectId;
public: // actually package-private
  static jboolean $assertionsDisabled;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_beans_encoder_elements_Element__
