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

#ifndef __gnu_xml_stream_XMLEventImpl__
#define __gnu_xml_stream_XMLEventImpl__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace stream
      {
          class XMLEventImpl;
      }
    }
  }
  namespace javax
  {
    namespace xml
    {
      namespace namespace
      {
          class QName;
      }
      namespace stream
      {
          class Location;
        namespace events
        {
            class Characters;
            class EndElement;
            class StartElement;
        }
      }
    }
  }
}

class gnu::xml::stream::XMLEventImpl : public ::java::lang::Object
{

public: // actually protected
  XMLEventImpl(::javax::xml::stream::Location *);
public:
  virtual jint getEventType() = 0;
  virtual ::javax::xml::stream::Location * getLocation();
  virtual jboolean isStartElement();
  virtual jboolean isAttribute();
  virtual jboolean isNamespace();
  virtual jboolean isEndElement();
  virtual jboolean isEntityReference();
  virtual jboolean isProcessingInstruction();
  virtual jboolean isCharacters();
  virtual jboolean isStartDocument();
  virtual jboolean isEndDocument();
  virtual ::javax::xml::stream::events::StartElement * asStartElement();
  virtual ::javax::xml::stream::events::EndElement * asEndElement();
  virtual ::javax::xml::stream::events::Characters * asCharacters();
  virtual ::javax::xml::namespace::QName * getSchemaType();
  virtual void writeAsEncodedUnicode(::java::io::Writer *) = 0;
public: // actually protected
  virtual ::java::lang::String * encode(::java::lang::String *, jboolean);
  ::javax::xml::stream::Location * __attribute__((aligned(__alignof__( ::java::lang::Object)))) location;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_stream_XMLEventImpl__
