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

#ifndef __gnu_xml_stream_NamespaceImpl__
#define __gnu_xml_stream_NamespaceImpl__

#pragma interface

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

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

public: // actually protected
  NamespaceImpl(::javax::xml::stream::Location *, ::java::lang::String *, ::java::lang::String *, jboolean);
public:
  virtual jint getEventType();
  virtual ::java::lang::String * getPrefix();
  virtual ::java::lang::String * getNamespaceURI();
  virtual jboolean isSpecified();
  virtual ::javax::xml::namespace$::QName * getName();
  virtual ::java::lang::String * getDTDType();
  virtual ::java::lang::String * getValue();
  virtual jboolean isDefaultNamespaceDeclaration();
  virtual void writeAsEncodedUnicode(::java::io::Writer *);
public: // actually protected
  ::java::lang::String * __attribute__((aligned(__alignof__( ::gnu::xml::stream::XMLEventImpl)))) prefix;
  ::java::lang::String * uri;
  jboolean specified;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_stream_NamespaceImpl__
