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