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

#ifndef __gnu_xml_libxmlj_dom_GnomeCharacterData__
#define __gnu_xml_libxmlj_dom_GnomeCharacterData__

#pragma interface

#include <gnu/xml/libxmlj/dom/GnomeNode.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace libxmlj
      {
        namespace dom
        {
            class GnomeCharacterData;
        }
      }
    }
  }
}

class gnu::xml::libxmlj::dom::GnomeCharacterData : public ::gnu::xml::libxmlj::dom::GnomeNode
{

public: // actually package-private
  GnomeCharacterData(::java::lang::Object *);
public:
  virtual ::java::lang::String * getData();
  virtual void setData(::java::lang::String *);
  virtual jint getLength();
  virtual ::java::lang::String * substringData(jint, jint);
  virtual void appendData(::java::lang::String *);
  virtual void insertData(jint, ::java::lang::String *);
  virtual void deleteData(jint, jint);
  virtual void replaceData(jint, jint, ::java::lang::String *);
  virtual ::java::lang::String * toString();
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_libxmlj_dom_GnomeCharacterData__
