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

#ifndef __gnu_xml_stream_XMLInputFactoryImpl__
#define __gnu_xml_stream_XMLInputFactoryImpl__

#pragma interface

#include <javax/xml/stream/XMLInputFactory.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace stream
      {
          class XMLInputFactoryImpl;
      }
    }
  }
  namespace javax
  {
    namespace xml
    {
      namespace stream
      {
          class EventFilter;
          class StreamFilter;
          class XMLEventReader;
          class XMLReporter;
          class XMLResolver;
          class XMLStreamReader;
        namespace util
        {
            class XMLEventAllocator;
        }
      }
      namespace transform
      {
          class Source;
      }
    }
  }
}

class gnu::xml::stream::XMLInputFactoryImpl : public ::javax::xml::stream::XMLInputFactory
{

public:
  XMLInputFactoryImpl();
  virtual ::javax::xml::stream::XMLStreamReader * createXMLStreamReader(::java::io::Reader *);
  virtual ::javax::xml::stream::XMLStreamReader * createXMLStreamReader(::javax::xml::transform::Source *);
  virtual ::javax::xml::stream::XMLStreamReader * createXMLStreamReader(::java::io::InputStream *);
  virtual ::javax::xml::stream::XMLStreamReader * createXMLStreamReader(::java::io::InputStream *, ::java::lang::String *);
  virtual ::javax::xml::stream::XMLStreamReader * createXMLStreamReader(::java::lang::String *, ::java::io::InputStream *);
  virtual ::javax::xml::stream::XMLStreamReader * createXMLStreamReader(::java::lang::String *, ::java::io::Reader *);
  virtual ::javax::xml::stream::XMLEventReader * createXMLEventReader(::java::io::Reader *);
  virtual ::javax::xml::stream::XMLEventReader * createXMLEventReader(::java::lang::String *, ::java::io::Reader *);
  virtual ::javax::xml::stream::XMLEventReader * createXMLEventReader(::javax::xml::stream::XMLStreamReader *);
  virtual ::javax::xml::stream::XMLEventReader * createXMLEventReader(::javax::xml::transform::Source *);
  virtual ::javax::xml::stream::XMLEventReader * createXMLEventReader(::java::io::InputStream *);
  virtual ::javax::xml::stream::XMLEventReader * createXMLEventReader(::java::io::InputStream *, ::java::lang::String *);
  virtual ::javax::xml::stream::XMLEventReader * createXMLEventReader(::java::lang::String *, ::java::io::InputStream *);
  virtual ::javax::xml::stream::XMLStreamReader * createFilteredReader(::javax::xml::stream::XMLStreamReader *, ::javax::xml::stream::StreamFilter *);
  virtual ::javax::xml::stream::XMLEventReader * createFilteredReader(::javax::xml::stream::XMLEventReader *, ::javax::xml::stream::EventFilter *);
  virtual ::javax::xml::stream::XMLResolver * getXMLResolver();
  virtual void setXMLResolver(::javax::xml::stream::XMLResolver *);
  virtual ::javax::xml::stream::XMLReporter * getXMLReporter();
  virtual void setXMLReporter(::javax::xml::stream::XMLReporter *);
  virtual void setProperty(::java::lang::String *, ::java::lang::Object *);
  virtual ::java::lang::Object * getProperty(::java::lang::String *);
  virtual jboolean isPropertySupported(::java::lang::String *);
  virtual void setEventAllocator(::javax::xml::stream::util::XMLEventAllocator *);
  virtual ::javax::xml::stream::util::XMLEventAllocator * getEventAllocator();
  virtual void setCoalescing(jboolean);
  virtual jboolean isCoalescing();
public: // actually protected
  virtual ::java::io::InputStream * getInputStream(::javax::xml::transform::Source *);
  ::javax::xml::stream::XMLResolver * __attribute__((aligned(__alignof__( ::javax::xml::stream::XMLInputFactory)))) resolver;
  ::javax::xml::stream::XMLReporter * reporter;
  ::javax::xml::stream::util::XMLEventAllocator * allocator;
  jboolean validating;
  jboolean namespaceAware;
  jboolean coalescing;
  jboolean replacingEntityReferences;
  jboolean externalEntities;
  jboolean supportDTD;
  jboolean xIncludeAware;
  jboolean baseAware;
  jboolean stringInterning;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_stream_XMLInputFactoryImpl__
