/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_apache_uima_uimacpp_UimacppEngine */

#ifndef _Included_org_apache_uima_uimacpp_UimacppEngine
#define _Included_org_apache_uima_uimacpp_UimacppEngine
#ifdef __cplusplus
extern "C" {
#endif

#undef org_apache_uima_uimacpp_UimacppEngine_TYPE_INH
#define org_apache_uima_uimacpp_UimacppEngine_TYPE_INH 0L
#undef org_apache_uima_uimacpp_UimacppEngine_FEATURE_DEF
#define org_apache_uima_uimacpp_UimacppEngine_FEATURE_DEF 1L
#undef org_apache_uima_uimacpp_UimacppEngine_FEATURE_OFFSET
#define org_apache_uima_uimacpp_UimacppEngine_FEATURE_OFFSET 2L
#undef org_apache_uima_uimacpp_UimacppEngine_TYPE_SYMBOLS
#define org_apache_uima_uimacpp_UimacppEngine_TYPE_SYMBOLS 3L
#undef org_apache_uima_uimacpp_UimacppEngine_FEATURE_SYMBOLS
#define org_apache_uima_uimacpp_UimacppEngine_FEATURE_SYMBOLS 4L
#undef org_apache_uima_uimacpp_UimacppEngine_TOPTYPE
#define org_apache_uima_uimacpp_UimacppEngine_TOPTYPE 5L
#undef org_apache_uima_uimacpp_UimacppEngine_TYPE_PRIORITIES
#define org_apache_uima_uimacpp_UimacppEngine_TYPE_PRIORITIES 6L
  /* Inaccessible static: compatibleTafJniVersions */
#undef org_apache_uima_uimacpp_UimacppEngine_FSHEAP
#define org_apache_uima_uimacpp_UimacppEngine_FSHEAP 10L
#undef org_apache_uima_uimacpp_UimacppEngine_STRINGSYMBOL
#define org_apache_uima_uimacpp_UimacppEngine_STRINGSYMBOL 11L
#undef org_apache_uima_uimacpp_UimacppEngine_INDEXEDFSS
#define org_apache_uima_uimacpp_UimacppEngine_INDEXEDFSS 30L
#undef org_apache_uima_uimacpp_UimacppEngine_BYTEHEAP
#define org_apache_uima_uimacpp_UimacppEngine_BYTEHEAP 12L
#undef org_apache_uima_uimacpp_UimacppEngine_SHORTHEAP
#define org_apache_uima_uimacpp_UimacppEngine_SHORTHEAP 13L
#undef org_apache_uima_uimacpp_UimacppEngine_LONGHEAP
#define org_apache_uima_uimacpp_UimacppEngine_LONGHEAP 14L

#undef org_apache_uima_uimacpp_UimacppEngine_DOCUMENT
#define org_apache_uima_uimacpp_UimacppEngine_DOCUMENT 20L
#undef org_apache_uima_uimacpp_UimacppEngine_INDEXEDFSS
#define org_apache_uima_uimacpp_UimacppEngine_INDEXEDFSS 30L
#undef org_apache_uima_uimacpp_UimacppEngine_INDEXID
#define org_apache_uima_uimacpp_UimacppEngine_INDEXID 40L
#undef org_apache_uima_uimacpp_UimacppEngine_INDEXKIND
#define org_apache_uima_uimacpp_UimacppEngine_INDEXKIND 41L
#undef org_apache_uima_uimacpp_UimacppEngine_COMPARATORDEF
#define org_apache_uima_uimacpp_UimacppEngine_COMPARATORDEF 42L
#undef org_apache_uima_uimacpp_UimacppEngine_COMPARATORSTART
#define org_apache_uima_uimacpp_UimacppEngine_COMPARATORSTART 43L
  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    createResourceManagerJNI
   * Signature: ()V
   */
  JNIEXPORT void JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_createResourceManagerJNI
  (JNIEnv *, jclass);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    configureResourceManagerJNI
   * Signature: (Ljava/lang/String;Ljava/lang/String;)V
   */
  JNIEXPORT void JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_configureResourceManagerJNI
  (JNIEnv *, jclass, jstring, jstring);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    constructorJNI
   * Signature: ()V
   */
  JNIEXPORT void JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_constructorJNI
  (JNIEnv *, jobject);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    destructorJNI
   * Signature: ()V
   */
  JNIEXPORT void JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_destructorJNI
  (JNIEnv *, jobject);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    initializeJNI
   * Signature: (Ljava/lang/String;)V
   */
  JNIEXPORT void JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_initializeJNI
  (JNIEnv *, jobject, jstring);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    typeSystemInitJNI
   * Signature: ([Ljava/lang/String;[Ljava/lang/String;[I[II[I[I[I[Ljava/lang/String;[I[Ljava/lang/String;[I[I[I[I)V
   */
  JNIEXPORT void JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_typeSystemInitJNI
  (JNIEnv *, jobject, jobjectArray, jobjectArray, jintArray, jintArray, jint, jintArray, jintArray, jintArray, jobjectArray, jintArray, jobjectArray, jintArray, jintArray, jintArray, jintArray);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    destroyJNI
   * Signature: ()V
   */
  JNIEXPORT void JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_destroyJNI
  (JNIEnv *, jobject);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    resetJNI
   * Signature: ()V
   */
  JNIEXPORT void JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_resetJNI
  (JNIEnv *, jobject);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    fillCASJNI
   * Signature: ([I[I[Ljava/lang/String;[B[S[J)V
   */
  JNIEXPORT void JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_fillCASJNI
  (JNIEnv *, jobject, jintArray, jintArray, jobjectArray, jbyteArray, jshortArray, jlongArray);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    processJNI
   * Signature: (ILjava/lang/String;[I[I)V
   */
  JNIEXPORT void JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_processJNI
  (JNIEnv *, jobject, jint, jstring, jintArray, jintArray);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    serializeCASJNI
   * Signature: (Z)V
   */
  JNIEXPORT void JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_serializeCASJNI
  (JNIEnv *, jobject, jboolean);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    getSerializedDataJNI
   * Signature: (I)Ljava/lang/Object;
   */
  JNIEXPORT jobject JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_getSerializedDataJNI
  (JNIEnv *, jobject, jint);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    batchProcessCompleteJNI
   * Signature: ()V
   */
  JNIEXPORT void JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_batchProcessCompleteJNI
  (JNIEnv *, jobject);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    collectionProcessCompleteJNI
   * Signature: ()V
   */
  JNIEXPORT void JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_collectionProcessCompleteJNI
  (JNIEnv *, jobject);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    hasNextSegmentJNI
   * Signature: ()Z
   */
  JNIEXPORT jboolean JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_hasNextSegmentJNI
  (JNIEnv *, jobject);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    nextSegmentJNI
   * Signature: ()V
   */
  JNIEXPORT void JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_nextSegmentJNI
  (JNIEnv *, jobject);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    serializeSegmentJNI
   * Signature: (Z)V
   */
  JNIEXPORT void JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_serializeSegmentJNI
  (JNIEnv *, jobject, jboolean);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    getSerializedSegmentDataJNI
   * Signature: (I)Ljava/lang/Object;
   */
  JNIEXPORT jobject JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_getSerializedSegmentDataJNI
  (JNIEnv *, jobject, jint);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    releaseSegmentJNI
   * Signature: ()V
   */
  JNIEXPORT void JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_releaseSegmentJNI
  (JNIEnv *, jobject);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    getErrorMessageJNI
   * Signature: (J)Ljava/lang/String;
   */
  JNIEXPORT jstring JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_getErrorMessageJNI
  (JNIEnv *, jclass, jlong);

  /*
   * Class:     org_apache_uima_uimacpp_UimacppEngine
   * Method:    getVersionJNI
   * Signature: ()Ljava/lang/String;
   */
  JNIEXPORT jstring JNICALL Java_org_apache_uima_uimacpp_UimacppEngine_getVersionJNI
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif
