?? clipsjni_environment.c
字號:
#include "CLIPSJNI_Environment.h"
#include "clips.h"
#define CLIPSJNI_DATA 67
struct clipsJNIData
{
jclass longClass;
jmethodID longInitMethod;
jclass doubleClass;
jmethodID doubleInitMethod;
jclass arrayListClass;
jmethodID arrayListInitMethod;
jmethodID arrayListAddMethod;
jclass voidValueClass;
jmethodID voidValueInitMethod;
jclass integerValueClass;
jmethodID integerValueInitMethod;
jclass floatValueClass;
jmethodID floatValueInitMethod;
jclass symbolValueClass;
jmethodID symbolValueInitMethod;
jclass stringValueClass;
jmethodID stringValueInitMethod;
jclass instanceNameValueClass;
jmethodID instanceNameValueInitMethod;
jclass multifieldValueClass;
jmethodID multifieldValueInitMethod;
jclass factAddressValueClass;
jmethodID factAddressValueInitMethod;
jclass instanceAddressValueClass;
jmethodID instanceAddressValueInitMethod;
};
#define CLIPSJNIData(theEnv) ((struct clipsJNIData *) GetEnvironmentData(theEnv,CLIPSJNI_DATA))
static int QueryJNIRouter(void *,char *);
static int ExitJNIRouter(void *,int);
static int PrintJNIRouter(void *,char *,char *);
static int GetcJNIRouter(void *,char *);
static int UngetcJNIRouter(void *,int,char *);
static void DeallocateJNIData(void *);
static jobject ConvertSingleFieldValue(JNIEnv *,jobject,void *,int,void *);
static jobject ConvertDataObject(JNIEnv *,jobject,void *,DATA_OBJECT *);
/**********************************************/
/* DeallocateJNIData: Deallocates environment */
/* data for the JNI functionality. */
/**********************************************/
static void DeallocateJNIData(
void *theEnv)
{
JNIEnv *env;
env = (JNIEnv *) GetEnvironmentContext(theEnv);
(*env)->DeleteGlobalRef(env,CLIPSJNIData(theEnv)->longClass);
(*env)->DeleteGlobalRef(env,CLIPSJNIData(theEnv)->doubleClass);
(*env)->DeleteGlobalRef(env,CLIPSJNIData(theEnv)->arrayListClass);
(*env)->DeleteGlobalRef(env,CLIPSJNIData(theEnv)->voidValueClass);
(*env)->DeleteGlobalRef(env,CLIPSJNIData(theEnv)->integerValueClass);
(*env)->DeleteGlobalRef(env,CLIPSJNIData(theEnv)->floatValueClass);
(*env)->DeleteGlobalRef(env,CLIPSJNIData(theEnv)->symbolValueClass);
(*env)->DeleteGlobalRef(env,CLIPSJNIData(theEnv)->stringValueClass);
(*env)->DeleteGlobalRef(env,CLIPSJNIData(theEnv)->instanceNameValueClass);
(*env)->DeleteGlobalRef(env,CLIPSJNIData(theEnv)->multifieldValueClass);
(*env)->DeleteGlobalRef(env,CLIPSJNIData(theEnv)->factAddressValueClass);
(*env)->DeleteGlobalRef(env,CLIPSJNIData(theEnv)->instanceAddressValueClass);
}
/*************************************************/
/* FindJNIRouter: Query routine for JNI routers. */
/*************************************************/
static int QueryJNIRouter(
void *theEnv,
char *logicalName)
{
jobject context;
jclass cls;
JNIEnv *env;
jmethodID mid;
jboolean rv;
jstring str;
env = (JNIEnv *) GetEnvironmentContext(theEnv);
context = GetEnvironmentRouterContext(theEnv);
cls = (*env)->GetObjectClass(env,context);
mid = (*env)->GetMethodID(env,cls,"query","(Ljava/lang/String;)Z");
(*env)->DeleteLocalRef(env,cls);
if (mid == NULL)
{ return FALSE; }
str = (*env)->NewStringUTF(env,logicalName);
rv = (*env)->CallBooleanMethod(env,context,mid,str);
(*env)->DeleteLocalRef(env,str);
return(rv);
}
/*************************************************/
/* ExitJNIRouter: Exit routine for JNI routers. */
/*************************************************/
#if IBM_TBC
#pragma argsused
#endif
static int ExitJNIRouter(
void *theEnv,
int num)
{
#if MAC_MCW || IBM_MCW || MAC_XCD
#pragma unused(num)
#endif
#if MAC_MCW || IBM_MCW || MAC_XCD
#pragma unused(theEnv)
#endif
/* TBD deallocate global context reference */
return(1);
}
/**************************************************/
/* PrintJNIRouter: Print routine for JNI routers. */
/**************************************************/
static int PrintJNIRouter(
void *theEnv,
char *logicalName,
char *str)
{
jobject context;
JNIEnv *env;
jmethodID mid;
jclass cls;
jstring str1, str2;
env = (JNIEnv *) GetEnvironmentContext(theEnv);
context = GetEnvironmentRouterContext(theEnv);
cls = (*env)->GetObjectClass(env,context);
mid = (*env)->GetMethodID(env,cls,"print","(Ljava/lang/String;Ljava/lang/String;)V");
(*env)->DeleteLocalRef(env,cls);
if (mid == NULL)
{ return FALSE; }
str1 = (*env)->NewStringUTF(env,logicalName);
str2 = (*env)->NewStringUTF(env,str);
(*env)->CallVoidMethod(env,context,mid,str1,str2);
(*env)->DeleteLocalRef(env,str1);
(*env)->DeleteLocalRef(env,str2);
return(1);
}
/************************************************/
/* GetcJNIRouter: Getc routine for JNI routers. */
/************************************************/
static int GetcJNIRouter(
void *theEnv,
char *logicalName)
{
jint theChar;
jobject context;
JNIEnv *env;
jmethodID mid;
jclass cls;
jstring str;
env = (JNIEnv *) GetEnvironmentContext(theEnv);
context = GetEnvironmentRouterContext(theEnv);
cls = (*env)->GetObjectClass(env,context);
mid = (*env)->GetMethodID(env,cls,"getchar","(Ljava/lang/String;)I");
(*env)->DeleteLocalRef(env,cls);
if (mid == NULL)
{ return -1; }
str = (*env)->NewStringUTF(env,logicalName);
theChar = (*env)->CallIntMethod(env,context,mid,str);
(*env)->DeleteLocalRef(env,str);
return((int) theChar);
}
/****************************************************/
/* UngetcJNIRouter: Ungetc routine for JNI routers. */
/****************************************************/
static int UngetcJNIRouter(
void *theEnv,
int ch,
char *logicalName)
{
jint theChar;
jobject context;
JNIEnv *env;
jmethodID mid;
jclass cls;
jstring str;
env = (JNIEnv *) GetEnvironmentContext(theEnv);
context = GetEnvironmentRouterContext(theEnv);
cls = (*env)->GetObjectClass(env,context);
mid = (*env)->GetMethodID(env,cls,"ungetchar","(Ljava/lang/String;I)I");
(*env)->DeleteLocalRef(env,cls);
if (mid == NULL)
{ return -1; }
str = (*env)->NewStringUTF(env,logicalName);
theChar = (*env)->CallIntMethod(env,context,mid,(jint) ch,str);
(*env)->DeleteLocalRef(env,str);
return((int) theChar);
}
/*******************************************************/
/* Java_CLIPSJNI_Environment_getCLIPSVersion: Native */
/* function for the CLIPSJNI getCLIPSVersion method. */
/* Class: CLIPSJNI_Environment */
/* Method: getCLIPSVersion */
/* Signature: ()Ljava/lang/String; */
/*******************************************************/
JNIEXPORT jstring JNICALL Java_CLIPSJNI_Environment_getCLIPSVersion(
JNIEnv *env,
jclass cls)
{
return (*env)->NewStringUTF(env,VERSION_STRING);
}
/************************************************/
/* Java_CLIPSJNI_Environment_createEnvironment: */
/* */
/* Class: CLIPSJNI_Environment */
/* Method: createEnvironment */
/* Signature: ()J */
/************************************************/
JNIEXPORT jlong JNICALL Java_CLIPSJNI_Environment_createEnvironment(
JNIEnv *env,
jobject obj)
{
void *theEnv;
jclass theLongClass;
jmethodID theLongInitMethod;
jclass theDoubleClass;
jmethodID theDoubleInitMethod;
jclass theArrayListClass;
jmethodID theArrayListInitMethod, theArrayListAddMethod;
jclass theVoidValueClass;
jmethodID theVoidValueInitMethod;
jclass theIntegerValueClass, theFloatValueClass;
jmethodID theIntegerValueInitMethod, theFloatValueInitMethod;
jclass theSymbolValueClass, theStringValueClass, theInstanceNameValueClass;
jmethodID theSymbolValueInitMethod, theStringValueInitMethod, theInstanceNameValueInitMethod;
jclass theMultifieldValueClass;
jmethodID theMultifieldValueInitMethod;
jclass theFactAddressValueClass;
jmethodID theFactAddressValueInitMethod;
jclass theInstanceAddressValueClass;
jmethodID theInstanceAddressValueInitMethod;
/*===========================*/
/* Look up the Java classes. */
/*===========================*/
theLongClass = (*env)->FindClass(env,"java/lang/Long");
theDoubleClass = (*env)->FindClass(env,"java/lang/Double");
theArrayListClass = (*env)->FindClass(env,"java/util/ArrayList");
theVoidValueClass = (*env)->FindClass(env,"CLIPSJNI/VoidValue");
theIntegerValueClass = (*env)->FindClass(env,"CLIPSJNI/IntegerValue");
theFloatValueClass = (*env)->FindClass(env,"CLIPSJNI/FloatValue");
theSymbolValueClass = (*env)->FindClass(env,"CLIPSJNI/SymbolValue");
theStringValueClass = (*env)->FindClass(env,"CLIPSJNI/StringValue");
theInstanceNameValueClass = (*env)->FindClass(env,"CLIPSJNI/InstanceNameValue");
theMultifieldValueClass = (*env)->FindClass(env,"CLIPSJNI/MultifieldValue");
theFactAddressValueClass = (*env)->FindClass(env,"CLIPSJNI/FactAddressValue");
theInstanceAddressValueClass = (*env)->FindClass(env,"CLIPSJNI/InstanceAddressValue");
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -