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

#ifndef __gnu_xml_libxmlj_sax_GnomeLocator__
#define __gnu_xml_libxmlj_sax_GnomeLocator__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace libxmlj
      {
        namespace sax
        {
            class GnomeLocator;
        }
      }
    }
  }
}

class gnu::xml::libxmlj::sax::GnomeLocator : public ::java::lang::Object
{

public: // actually package-private
  GnomeLocator(::java::lang::Object *, ::java::lang::Object *);
public:
  virtual ::java::lang::String * getPublicId();
private:
  ::java::lang::String * publicId(::java::lang::Object *, ::java::lang::Object *);
public:
  virtual ::java::lang::String * getSystemId();
private:
  ::java::lang::String * systemId(::java::lang::Object *, ::java::lang::Object *);
public:
  virtual jint getLineNumber();
private:
  jint lineNumber(::java::lang::Object *, ::java::lang::Object *);
public:
  virtual jint getColumnNumber();
private:
  jint columnNumber(::java::lang::Object *, ::java::lang::Object *);
  ::java::lang::Object * __attribute__((aligned(__alignof__( ::java::lang::Object)))) ctx;
  ::java::lang::Object * loc;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_libxmlj_sax_GnomeLocator__
