testagent.c
来自「SRI international 发布的OAA框架软件」· C语言 代码 · 共 177 行
C
177 行
// $Id: TestAgent.c,v 1.2 2005/03/30 18:49:07 agno Exp $
#include <stdio.h>
#include <string.h>
#include <libicl.h>
#include <liboaa.h>
static ICLTerm *stringSoln0 = NULL;
static ICLTerm *stringSoln1 = NULL;
static ICLTerm *stringSoln2 = NULL;
static ICLTerm *stringSoln5 = NULL;
static ICLTerm *stringSoln10 = NULL;
static ICLTerm *stringSoln20 = NULL;
static ICLTerm *stringSoln50 = NULL;
static ICLTerm *doNothingSoln = NULL;
static char big[1024*50];
static char buf[1024*50 + 1];
static int add_callback(ICLTerm* goal, ICLTerm* params, ICLTerm* solutions);
static void buildMakeStringSolution(int size, ICLTerm **solution);
static int doNothing_callback(ICLTerm* goal, ICLTerm* params, ICLTerm* solutions);
static void init_callback_results(void);
static int makeString_callback(ICLTerm* goal, ICLTerm* params, ICLTerm* solutions);
static int setup_oaa_connection(int argc, char *argv[]);
int main(int argc, char *argv[]) {
oaa_Init(argc, argv);
init_callback_results();
setup_oaa_connection(argc, argv);
}
static int add_callback(ICLTerm* goal,
ICLTerm* params,
ICLTerm* solutions) {
int x = icl_Int(icl_NthTerm(goal, 1));
int y = icl_Int(icl_NthTerm(goal, 2));
int sum = x + y;
icl_AddToList(solutions, icl_NewStruct("add", 3, icl_NewInt(x),
icl_NewInt(y), icl_NewInt(sum)), TRUE);
return TRUE;
}
static void buildMakeStringSolution(int size, ICLTerm **solution) {
int initialized = FALSE;
static char big[1024*50];
static char buf[1024*50 + 1];
memset(big, 0, 1024 * 50);
memset(buf, 0, 1024 * 50 + 1);
if (!initialized) {
// fill the array named "big" with printing characters
size_t i = 0;
size_t size = sizeof big;
for (i = 0; i < size; i++) {
big[i] = (char)(32 + (i % 95)); // one of the printing characters...
}
initialized = TRUE;
}
*solution = icl_NewStruct("makeString", 2,
icl_NewInt(size),
icl_NewStr(strncpy(buf, big, 1024*size)));
}
static void init_callback_results() {
// pre-built results callbacks
// Note: stringSoln0 is not zero length because binarytermreader
// does not like zero-length strings
stringSoln0 = icl_NewStruct("makeString", 2, icl_NewInt(0), icl_NewStr(" "));
buildMakeStringSolution(1, &stringSoln1);
buildMakeStringSolution(2, &stringSoln2);
buildMakeStringSolution(5, &stringSoln5);
buildMakeStringSolution(10, &stringSoln10);
buildMakeStringSolution(20, &stringSoln20);
buildMakeStringSolution(50, &stringSoln50);
doNothingSoln = icl_NewStruct("doNothing", 1, icl_NewStr("nothing"));
}
static int makeString_callback(ICLTerm* goal,
ICLTerm* params,
ICLTerm* solutions) {
ICLTerm *solution = NULL;
int size = icl_Int(icl_NthTerm(goal, 1));
switch (size) {
case 0:
solution = stringSoln0;
break;
case 1:
solution = stringSoln1;
break;
case 2:
solution = stringSoln2;
break;
case 5:
solution = stringSoln5;
break;
case 10:
solution = stringSoln10;
break;
case 20:
solution = stringSoln20;
break;
case 50:
solution = stringSoln50;
break;
default:
fprintf(stderr, "Unexpected makeString_callback, size: %li\n", size);fflush(stderr);
solution = stringSoln0;
}
icl_AddToList(solutions, icl_CopyTerm(solution), TRUE);
return TRUE;
}
static int doNothing_callback(ICLTerm* goal,
ICLTerm* params,
ICLTerm* solutions) {
icl_AddToList(solutions, icl_CopyTerm(doNothingSoln), TRUE);
return TRUE;
}
static int setup_oaa_connection(int argc, char *argv[]) {
char *solvableString =
"[solvable(doNothing(Anything), [callback(doNothing)]), \
solvable(makeString(Size, BigString), [callback(makeString)]), \
solvable(add(X,Y,Sum), [callback(add)])]";
ICLTerm* mySolvablesAsList = icl_NewTermFromString(solvableString);
if (!oaa_SetupCommunication("TestAgent")) {
printf("Could not connect\n");
fflush(stdout);
return FALSE;
}
if (!oaa_Register("parent", "TestAgent", mySolvablesAsList)) {
printf("Could not register\n");
fflush(stdout);
return FALSE;
}
printf("solvables: %s\n", icl_NewStringFromTerm(mySolvablesAsList));
fflush(stdout);
if (!oaa_RegisterCallback("doNothing", doNothing_callback)) {
printf("Could not register doNothing callback\n");
fflush(stdout);
}
if (!oaa_RegisterCallback("makeString", makeString_callback)) {
printf("Could not register makeString callback\n");
fflush(stdout);
}
/* The following solvables are used by the java unit tests */
if (!oaa_RegisterCallback("add", add_callback)) {
printf("Could not register add callback\n");
fflush(stdout);
}
icl_Free(mySolvablesAsList);
oaa_MainLoop(TRUE);
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?