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

#ifndef __gnu_xml_libxmlj_dom_GnomeNode__
#define __gnu_xml_libxmlj_dom_GnomeNode__

#include <jni.h>

#ifdef __cplusplus
extern "C"
{
#endif

JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getNodeName (JNIEnv *env, jobject);
JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getNodeValue (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_setNodeValue (JNIEnv *env, jobject, jstring);
JNIEXPORT jshort JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getNodeType (JNIEnv *env, jobject);
JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getParentNode (JNIEnv *env, jobject);
JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getFirstChild (JNIEnv *env, jobject);
JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getLastChild (JNIEnv *env, jobject);
JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getPreviousSibling (JNIEnv *env, jobject);
JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getNextSibling (JNIEnv *env, jobject);
JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getOwnerDocument (JNIEnv *env, jobject);
JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_xmljInsertBefore (JNIEnv *env, jobject, jobject, jobject);
JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_xmljReplaceChild (JNIEnv *env, jobject, jobject, jobject);
JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_xmljRemoveChild (JNIEnv *env, jobject, jobject);
JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_xmljAppendChild (JNIEnv *env, jobject, jobject);
JNIEXPORT jboolean JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_hasChildNodes (JNIEnv *env, jobject);
JNIEXPORT jobject JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_xmljCloneNode (JNIEnv *env, jobject, jboolean);
JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_normalize (JNIEnv *env, jobject);
JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getNamespaceURI (JNIEnv *env, jobject);
JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getPrefix (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_setPrefix (JNIEnv *env, jobject, jstring);
JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getLocalName (JNIEnv *env, jobject);
JNIEXPORT jboolean JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_hasAttributes (JNIEnv *env, jobject);
JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_getBaseURI (JNIEnv *env, jobject);
JNIEXPORT jint JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_xmljCompareTo (JNIEnv *env, jobject, jobject);
JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_lookupPrefix (JNIEnv *env, jobject, jstring);
JNIEXPORT jboolean JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_isDefaultNamespace (JNIEnv *env, jobject, jstring);
JNIEXPORT jstring JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_lookupNamespaceURI (JNIEnv *env, jobject, jstring);
JNIEXPORT jboolean JNICALL Java_gnu_xml_libxmlj_dom_GnomeNode_isEqualNode (JNIEnv *env, jobject, jobject);

#ifdef __cplusplus
}
#endif

#endif /* __gnu_xml_libxmlj_dom_GnomeNode__ */
