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

#ifndef __gnu_xml_stream_StartElementImpl__
#define __gnu_xml_stream_StartElementImpl__

#pragma interface

#include <gnu/xml/stream/XMLEventImpl.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace stream
      {
          class StartElementImpl;
      }
    }
  }
  namespace javax
  {
    namespace xml
    {
      namespace namespace$
      {
          class NamespaceContext;
          class QName;
      }
      namespace stream
      {
          class Location;
        namespace events
        {
            class Attribute;
        }
      }
    }
  }
}

class gnu::xml::stream::StartElementImpl : public ::gnu::xml::stream::XMLEventImpl
{

public: // actually protected
  StartElementImpl(::javax::xml::stream::Location *, ::javax::xml::namespace$::QName *, ::java::util::List *, ::java::util::List *, ::javax::xml::namespace$::NamespaceContext *);
public:
  virtual jint getEventType();
  virtual ::javax::xml::namespace$::QName * getName();
  virtual ::java::util::Iterator * getAttributes();
  virtual ::java::util::Iterator * getNamespaces();
  virtual ::javax::xml::stream::events::Attribute * getAttributeByName(::javax::xml::namespace$::QName *);
  virtual ::javax::xml::namespace$::NamespaceContext * getNamespaceContext();
  virtual ::java::lang::String * getNamespaceURI(::java::lang::String *);
  virtual void writeAsEncodedUnicode(::java::io::Writer *);
public: // actually protected
  ::javax::xml::namespace$::QName * __attribute__((aligned(__alignof__( ::gnu::xml::stream::XMLEventImpl)))) name;
  ::java::util::List * attributes;
  ::java::util::List * namespaces;
  ::javax::xml::namespace$::NamespaceContext * namespaceContext;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_stream_StartElementImpl__
