amzijni.cpp

来自「prolog开发工具」· C++ 代码 · 共 1,850 行 · 第 1/3 页

CPP
1,850
字号
 */
JNIEXPORT jint JNICALL Java_amzi_ls_LogicServer_GetParmType
  (JNIEnv * jenv, jobject jobj, jint iarg)
{
   pTYPE type;

   GET_EID(e);
   type = lsGetParmType(e, (int)iarg);
   if (type < 0)
      amzi_error(jenv, e, "GetTermType");

   return (jint)type;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetParm
 * Signature: (I)J
 */
JNIEXPORT jlong JNICALL Java_amzi_ls_LogicServer_GetParm
  (JNIEnv * jenv, jobject jobj, jint iarg)
{
   TERM t;
   RC   rc;

   GET_EID(e);
   rc = lsGetParm(e, (int)iarg, cTERM, &t);
   if (rc != OK)
      amzi_error(jenv, e, "GetParm");

   return (jlong)t;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetStrParm
 * Signature: (I)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_amzi_ls_LogicServer_GetStrParm
  (JNIEnv * jenv, jobject jobj, jint iarg)
{
   RC   rc;
   aCHAR* str;

   GET_EID(e);
   int len = lsStrParmLen(e, (int)iarg);
   str = new aCHAR[len+1];
   rc = lsGetParm(e, (int)iarg, cWSTR, str);
   jCHAR *jcstr = new jCHAR[len+1];
   ac_to_jc(jcstr, str, len);
   jstring jstr = jenv->NewString(jcstr, len);
   delete[] str;
   delete[] jcstr;
   if (rc != OK)
      amzi_error(jenv, e, "GetStrParm");

   return jstr;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetIntParm
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_amzi_ls_LogicServer_GetIntParm
  (JNIEnv * jenv, jobject jobj, jint iarg)
{
   RC     rc;
   int    i;

   GET_EID(e);
   rc = lsGetParm(e, (int)iarg, cINT, &i);
   if (rc != OK)
      amzi_error(jenv, e, "GetIntParm");

   return (jint)i;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetFloatParm
 * Signature: (I)D
 */
JNIEXPORT jdouble JNICALL Java_amzi_ls_LogicServer_GetFloatParm
  (JNIEnv * jenv, jobject jobj, jint iarg)
{
   RC     rc;
   double d;

   GET_EID(e);
   rc = lsGetParm(e, (int)iarg, cDOUBLE, &d);
   if (rc != OK)
      amzi_error(jenv, e, "GetFloatParm");

   return (jdouble)d;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    UnifyParm
 * Signature: (IJ)Z
 */
JNIEXPORT jboolean JNICALL Java_amzi_ls_LogicServer_UnifyParm
  (JNIEnv * jenv, jobject jobj, jint iarg, jlong term)
{
   TF tf;

   GET_EID(e);
   tf = lsUnifyParm(e, (int)iarg, cTERM, &term);
   switch(tf)
   {
   case TRUE:
   case FALSE:
      return (jboolean)tf;
   default: amzi_error(jenv, e, "UnifyParm"); return 0;
   }
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    UnifyStrParm
 * Signature: (ILjava/lang/String;)Z
 */
JNIEXPORT jboolean JNICALL Java_amzi_ls_LogicServer_UnifyStrParm
  (JNIEnv * jenv, jobject jobj, jint iarg, jstring jstr)
{
   TF tf;
   aCHAR* str;

   GET_EID(e);
   str = JtoC(jenv, jstr);
   tf = lsUnifyParm(e, (int)iarg, cWSTR, str);
   delete[] str;

   switch(tf)
   {
   case TRUE:
   case FALSE:
      return (jboolean)tf;
   default: amzi_error(jenv, e, "UnifyStrParm"); return 0;
   }
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    UnifyIntParm
 * Signature: (II)Z
 */
JNIEXPORT jboolean JNICALL Java_amzi_ls_LogicServer_UnifyIntParm
  (JNIEnv * jenv, jobject jobj, jint iarg, jint ji)
{
   TF tf;

   GET_EID(e);
   tf = lsUnifyParm(e, (int)iarg, cINT, &ji);

   switch(tf)
   {
   case TRUE:
   case FALSE:
      return (jboolean)tf;
   default: amzi_error(jenv, e, "UnifyIntParm"); return 0;
   }
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    UnifyFloatParm
 * Signature: (ID)Z
 */
JNIEXPORT jboolean JNICALL Java_amzi_ls_LogicServer_UnifyFloatParm
  (JNIEnv * jenv, jobject jobj, jint iarg, jdouble jd)
{
   TF tf;

   GET_EID(e);
   tf = lsUnifyParm(e, (int)iarg, cDOUBLE, &jd);

   switch(tf)
   {
   case TRUE:
   case FALSE:
      return (jboolean)tf;
   default: amzi_error(jenv, e, "UnifyFloatParm"); return 0;
   }
}


/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetFunctor
 * Signature: (J)Ljava/lang/String;
 */
extern "C" JNIEXPORT jstring JNICALL Java_amzi_ls_LogicServer_GetFunctor
  (JNIEnv * jenv, jobject jobj, jlong jt)
{
   RC     rc;
   aCHAR  str[1024];
   jCHAR  jcstr[1024];
   ARITY  a;

   GET_EID(e);
   rc = lsGetFA(e, (TERM)jt, str, &a);
   if (rc != OK)
      amzi_error(jenv, e, "GetFunctor");

   int len = wcslen(str);
   ac_to_jc(jcstr, str, len+1);
   jstring jstr = jenv->NewString(jcstr, len);

   return jstr;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetArity
 * Signature: (J)S
 */
extern "C" JNIEXPORT jint JNICALL Java_amzi_ls_LogicServer_GetArity
  (JNIEnv * jenv, jobject jobj, jlong jt)
{
   RC     rc;
   aCHAR  str[1024];
   ARITY  a;

   GET_EID(e);
   rc = lsGetFA(e, (TERM)jt, str, &a);
   if (rc != OK)
      amzi_error(jenv, e, "GetArity");

   return (jint)a;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    MakeFA
 * Signature: (Ljava/lang/String;I)J
 */
extern "C" JNIEXPORT jlong JNICALL Java_amzi_ls_LogicServer_MakeFA
  (JNIEnv * jenv, jobject jobj, jstring jstr, jint ja)
{
   RC     rc;
   TERM   t;
   aCHAR* str;

   GET_EID(e);
   str = JtoC(jenv, jstr);
   rc = lsMakeFA(e, &t, str, (ARITY)ja);
   delete[] str;

   if (rc != OK)
      amzi_error(jenv, e, "MakeFA");
   
   return (jlong)t;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetArg
 * Signature: (JI)J
 */
extern "C" JNIEXPORT jlong JNICALL Java_amzi_ls_LogicServer_GetArg
  (JNIEnv * jenv, jobject jobj, jlong jt, jint ji)
{
   RC   rc;
   TERM t;

   GET_EID(e);
   rc = lsGetArg(e, (TERM)jt, (int)ji, cTERM, &t);
   if (rc != OK)
      amzi_error(jenv, e, "GetArg");

   return (jlong)t;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetStrArg
 * Signature: (JI)Ljava/lang/String;
 */
extern "C" JNIEXPORT jstring JNICALL Java_amzi_ls_LogicServer_GetStrArg
  (JNIEnv * jenv, jobject jobj, jlong t, jint iarg)
{
   RC     rc;

   GET_EID(e);
   int len = lsStrArgLen(e, (TERM)t, (int)iarg);
   aCHAR* str = new aCHAR[len+1];
   rc = lsGetArg(e, (TERM)t, (int)iarg, cWSTR, str);
   jCHAR* jcstr = new jCHAR[len+1];
   ac_to_jc(jcstr, str, len);
   jstring jstr = jenv->NewString(jcstr, len);
   delete[] str;
   delete[] jcstr;
   if (rc != OK)
      amzi_error(jenv, e, "GetStrArg");

   return jstr;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetIntArg
 * Signature: (JI)I
 */
extern "C" JNIEXPORT jint JNICALL Java_amzi_ls_LogicServer_GetIntArg
  (JNIEnv * jenv, jobject jobj, jlong jt, jint ji)
{
   RC   rc;
   int  i;

   GET_EID(e);
   rc = lsGetArg(e, (TERM)jt, (int)ji, cINT, &i);
   if (rc != OK)
      amzi_error(jenv, e, "GetIntArg");

   return (jint)i;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetFloatArg
 * Signature: (JI)D
 */
extern "C" JNIEXPORT jdouble JNICALL Java_amzi_ls_LogicServer_GetFloatArg
  (JNIEnv * jenv, jobject jobj, jlong jt, jint ji)
{
   RC   rc;
   double d;

   GET_EID(e);
   rc = lsGetArg(e, (TERM)jt, (int)ji, cDOUBLE, &d);
   if (rc != OK)
      amzi_error(jenv, e, "GetFloatArg");

   return (jdouble)d;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    UnifyStrArg
 * Signature: (JILjava/lang/String;)J
 */
extern "C" JNIEXPORT jlong JNICALL Java_amzi_ls_LogicServer_UnifyStrArg
  (JNIEnv * jenv, jobject jobj, jlong jt, jint ji, jstring jstr)
{
   TF     tf;
   TERM   t;
   aCHAR* str;

   GET_EID(e);
   t = (TERM)jt;
   str = JtoC(jenv, jstr);
   tf = lsUnifyArg(e, &t, (int)ji, cWSTR, str); 
   delete[] str;

   switch(tf)
   {
   case TRUE: return (jlong)t;
   case FALSE: return 0;
   default: amzi_error(jenv, e, "UnifyStrArg"); return 0;
   }
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    UnifyIntArg
 * Signature: (JII)J
 */
extern "C" JNIEXPORT jlong JNICALL Java_amzi_ls_LogicServer_UnifyIntArg
  (JNIEnv * jenv, jobject jobj, jlong jt, jint jarg, jint ji)
{
   TF     tf;
   TERM   t;
   int    i;

   GET_EID(e);
   t = (TERM)jt;
   i = (int)ji;
   tf = lsUnifyArg(e, &t, (int)jarg, cINT, &i); 

   switch(tf)
   {
   case TRUE: return (jlong)t;
   case FALSE: return 0;
   default: amzi_error(jenv, e, "UnifyIntArg"); return 0;
   }
}


/*
 * Class:     amzi_ls_LogicServer
 * Method:    UnifyFloatArg
 * Signature: (JID)J
 */
extern "C" JNIEXPORT jlong JNICALL Java_amzi_ls_LogicServer_UnifyFloatArg
  (JNIEnv * jenv, jobject jobj, jlong jt, jint jarg, jdouble jd)
{
   TF     tf;
   TERM   t;
   double d;

   GET_EID(e);
   t = (TERM)jt;
   d = (double)jd;
   tf = lsUnifyArg(e, &t, (int)jarg, cDOUBLE, &d); 

   switch(tf)
   {
   case TRUE: return (jlong)t;
   case FALSE: return 0;
   default: amzi_error(jenv, e, "UnifyFloatArg"); return 0;
   }
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetArgType
 * Signature: (JI)S
 */
extern "C" JNIEXPORT jint JNICALL Java_amzi_ls_LogicServer_GetArgType
  (JNIEnv * jenv, jobject jobj, jlong jt, jint ji)
{
   pTYPE type;

   GET_EID(e);
   type = lsGetArgType(e, (TERM)jt, (int)ji);

   return (jint)type;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    StrArgLen
 * Signature: (JI)I
 */
extern "C" JNIEXPORT jint JNICALL Java_amzi_ls_LogicServer_StrArgLen
  (JNIEnv * jenv, jobject jobj, jlong jt, jint ji)
{
   int len;

   GET_EID(e);
   len = lsStrArgLen(e, (TERM)jt, (int)ji);

   return (jint)len;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    MakeList
 * Signature: ()J
 */
extern "C" JNIEXPORT jlong JNICALL Java_amzi_ls_LogicServer_MakeList
  (JNIEnv * jenv, jobject jobj)
{
   RC    rc;
   TERM  t;

   GET_EID(e);
   rc = lsMakeList(e, &t);
   if (rc != OK)
      amzi_error(jenv, e, "MakeList");

   return (jlong)t;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    PushList
 * Signature: (JJ)J
 */
extern "C" JNIEXPORT jlong JNICALL Java_amzi_ls_LogicServer_PushList
  (JNIEnv * jenv, jobject jobj, jlong jt, jlong jlt)
{
   RC     rc;
   TERM   t;

   GET_EID(e);
   t = (TERM)jt;
   rc = lsPushList(e, &t, (TERM)jlt);
   if (rc != OK)
      amzi_error(jenv, e, "PushList");

   return (jlong)t;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetHead
 * Signature: (J)J
 */
extern "C" JNIEXPORT jlong JNICALL Java_amzi_ls_LogicServer_GetHead
  (JNIEnv * jenv, jobject jobj, jlong jt)
{
   RC     rc;
   TERM   t;

   GET_EID(e);
   rc = lsGetHead(e, (TERM)jt, cTERM, &t);
   if (rc != OK)
      amzi_error(jenv, e, "GetHead");

   return (jlong)t;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetStrHead
 * Signature: (J)Ljava/lang/String;
 */
extern "C" JNIEXPORT jstring JNICALL Java_amzi_ls_LogicServer_GetStrHead
  (JNIEnv * jenv, jobject jobj, jlong jt)
{
   RC     rc;
   aCHAR* str;
   jCHAR* jcstr;
   TERM   t;

   GET_EID(e);
   rc = lsGetHead(e, (TERM)jt, cTERM, &t);
   if (rc != OK)
      amzi_error(jenv, e, "GetStrHead");

   int len = lsStrTermLen(e, t);
   str = new aCHAR[len+1];
   rc = lsGetTerm(e, t, cWSTR, str);
   jcstr = new jCHAR[len+1];
   ac_to_jc(jcstr, str, len);
   jstring jstr = jenv->NewString(jcstr, len);
   delete[] str;
   delete[] jcstr;
   if (rc != OK)
      amzi_error(jenv, e, "GetStrHead");

   return jstr;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetIntHead
 * Signature: (I)S
 */
extern "C" JNIEXPORT jint JNICALL Java_amzi_ls_LogicServer_GetIntHead
  (JNIEnv * jenv, jobject jobj, jlong jt)
{
   RC     rc;
   int    i;

   GET_EID(e);
   rc = lsGetHead(e, (TERM)jt, cINT, &i);
   if (rc != OK)
      amzi_error(jenv, e, "GetIntHead");

   return (jint)i;
}


/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetFloatHead
 * Signature: (J)D
 */
extern "C" JNIEXPORT jdouble JNICALL Java_amzi_ls_LogicServer_GetFloatHead
  (JNIEnv * jenv, jobject jobj, jlong jt)
{
   RC     rc;
   double d;

   GET_EID(e);
   rc = lsGetHead(e, (TERM)jt, cDOUBLE, &d);
   if (rc != OK)
      amzi_error(jenv, e, "GetFloatHead");

   return (jdouble)d;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetTail
 * Signature: (J)J
 */
extern "C" JNIEXPORT jlong JNICALL Java_amzi_ls_LogicServer_GetTail
  (JNIEnv * jenv, jobject jobj, jlong jt)
{
   TERM   t;

   GET_EID(e);
   t = lsGetTail(e, (TERM)jt);

   return (jlong)t;
}

/*
 * Class:     amzi_ls_LogicServer
 * Method:    GetVersion
 * Signature: ()Ljava/lang/String;
 */
extern "C" JNIEXPORT jstring JNICALL Java_amzi_ls_LogicServer_GetVersion
  (JNIEnv * jenv, jobject jobj)
{
   RC     rc;
   aCHAR  str[1024];
   jCHAR  jcstr[1024];

   GET_EID(e);
   rc = lsGetVersion(e, str);
   if (rc != OK)
      amzi_error(jenv, e, "GetVersion");

   int len = wcslen(str);
   ac_to_jc(jcstr, str, len+1);
   jstring jstr = jenv->NewString(jcstr, len);

   return jstr;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?