libicl.h
来自「SRI international 发布的OAA框架软件」· C头文件 代码 · 共 194 行
H
194 行
/****************************************************************************
* File : libicl.h
* Author : Adam Cheyer
* Updated : 5/21/97
*
* -------------------------------------------------------------------------
* Unpublished-rights reserved under the copyright laws of the United States.
*
* This data and information is proprietary to, and a valuable trade
* secret of, SRI International. It is given in confidence by SRI
* International. Its use, duplication, or disclosure is subject to the
* restrictions set forth in the License Agreement under which it has
* been distributed.
*
* Unpublished Copyright (c) 1993-97, SRI International.
* -------------------------------------------------------------------------
*
*****************************************************************************/
#ifndef _ICLLIB_H_INCLUDED
#define _ICLLIB_H_INCLUDED
#include <stdlib.h>
#include "glib.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifdef IS_DLL
#define EXTERN __declspec(dllexport)
#else
#define EXTERN extern
#endif
#ifndef FALSE
#define FALSE 0
#define TRUE 1
#endif
#ifdef NORMAL_GC
#undef CHECK_LEAKS
#include <gc/leak_detector.h>
#undef strdup
EXTERN char* gc_strdup(char*s);
#define strdup(s) gc_strdup(s)
#else
#define CHECK_LEAKS()
#endif
enum ICLType
{icl_no_type, icl_int_type, icl_float_type, icl_str_type, icl_struct_type,
icl_list_type, icl_group_type, icl_var_type, icl_callback_type, icl_dataq_type};
struct iclTerm;
struct iclListType;
struct iclGroupType;
struct iclStructType;
struct dyn_array;
typedef struct iclTerm ICLTerm;
typedef struct iclListType ICLListType;
typedef struct iclGroupType ICLGroupType;
typedef struct iclStructType ICLStructType;
/* Structure construction & testing routines */
EXTERN ICLTerm * icl_NewTermFromString(char* s);
EXTERN ICLTerm * icl_NewTermFromData(char* data, size_t len);
EXTERN char * icl_NewStringFromTerm(ICLTerm *t);
EXTERN char * icl_NewStringStructFromTerm(ICLTerm *t);
EXTERN int icl_WriteTerm(ICLTerm *t);
EXTERN ICLTerm * icl_CopyTerm(ICLTerm *t);
EXTERN ICLListType * icl_CopyListType(ICLListType *list);
EXTERN ICLTerm * icl_NewInt(gint64 i);
EXTERN ICLTerm * icl_NewFloat(double f);
EXTERN ICLTerm * icl_NewStr(char *s);
EXTERN ICLTerm * icl_NewVar(char *name);
EXTERN ICLTerm * icl_NewStruct(char *functor, int arity, ...);
EXTERN ICLTerm * icl_NewStructFromList(char *functor, ICLTerm *args);
EXTERN ICLListType * icl_NewCons(ICLTerm *elt, ICLListType *tail);
EXTERN ICLTerm * icl_NewList(ICLListType *list);
EXTERN ICLTerm * icl_NewGroup(char sChar, char *sep, ICLListType *list);
EXTERN ICLTerm * icl_NewDataQ(void const* data, size_t dataLen);
EXTERN void icl_FreeTerm(ICLTerm *elt);
EXTERN void icl_FreeTermSingle(ICLTerm *elt);
EXTERN int icl_IsList(ICLTerm *elt);
EXTERN int icl_IsGroup(ICLTerm *elt);
EXTERN int icl_IsStruct(ICLTerm *elt);
EXTERN int icl_IsStr(ICLTerm *elt);
EXTERN int icl_IsVar(ICLTerm *elt);
EXTERN int icl_IsInt(ICLTerm *elt);
EXTERN int icl_IsFloat(ICLTerm *elt);
EXTERN int icl_IsDataQ(ICLTerm *elt);
EXTERN int icl_IsValid(ICLTerm *elt);
EXTERN int icl_IsGround(ICLTerm *elt);
EXTERN void* icl_DataQ(ICLTerm* elt);
EXTERN size_t icl_DataQLen(ICLTerm* elt);
EXTERN size_t icl_Len(ICLTerm* elt);
EXTERN gint64 icl_Int(ICLTerm *elt);
EXTERN double icl_Float(ICLTerm *elt);
EXTERN char * icl_Str(ICLTerm *elt);
EXTERN char * icl_Functor(ICLTerm *elt);
EXTERN ICLListType * icl_Arguments(ICLTerm *elt);
EXTERN int icl_GetGroupChars(ICLTerm *group, char *startC,
char **sep);
EXTERN int icl_Arity(ICLTerm* inTerm);
/* List manipulations */
EXTERN ICLListType * icl_List(ICLTerm *elt);
EXTERN ICLListType * icl_ListNext(ICLListType* t);
EXTERN ICLTerm * icl_ListElt(ICLListType* t);
EXTERN ICLListType * icl_ListCopy(ICLTerm *elt);
EXTERN ICLTerm * icl_NthTerm(ICLTerm *elt, int n);
EXTERN int icl_NthTermAsInt(ICLTerm *elt, int n, int *Value);
EXTERN int icl_NumTerms(ICLTerm *elt);
EXTERN int icl_ListLen(ICLTerm *elt);
EXTERN int icl_AddToList(ICLTerm *list, ICLTerm *elt, int atEnd);
EXTERN int icl_ClearList(ICLTerm *list);
EXTERN int icl_SortList(
ICLTerm *list,
int (*user_function)(ICLTerm *Elt1, ICLTerm *Elt2));
EXTERN int icl_Append(ICLTerm *list1, ICLTerm *list2);
EXTERN int icl_AppendCopy(ICLTerm *list1, ICLTerm *list2);
EXTERN int icl_Union(ICLTerm *list1, ICLTerm *list2,
ICLTerm **dest);
EXTERN int icl_ListHasMoreElements(ICLListType *l);
EXTERN ICLListType* icl_ListNextElement(ICLListType *l);
EXTERN ICLTerm* icl_ListElement(ICLListType *list);
EXTERN int icl_ListDelete(ICLTerm *list,
ICLTerm *elem,
ICLTerm **residue);
EXTERN int icl_Unify(ICLTerm *t1, ICLTerm *t2, ICLTerm **answer);
EXTERN int icl_ParamValue(char *func, ICLTerm *match,
ICLTerm *params, ICLTerm **answer);
EXTERN gint64 icl_ParamValueAsInt(char *func, ICLTerm *params,
gint64 *Value);
EXTERN int icl_Member(ICLTerm *elt, ICLTerm *list, ICLTerm **res);
#if 0
EXTERN ICLTerm * icl_ReuseMem(ICLTerm *elt);
#endif
EXTERN char * icl_stFixQuotes(char *s);
/* List management utility functions */
EXTERN int icl_list_has_more_elements(ICLListType *l);
EXTERN ICLListType *icl_list_next_element(ICLListType *l);
EXTERN ICLTerm *icl_list_element(ICLListType *list);
EXTERN int icl_list_delete(ICLTerm *list, ICLTerm *elem,
ICLTerm **residue);
EXTERN int icl_append_to_list(ICLTerm *list1, ICLTerm *list2,
ICLTerm **list3);
/* Convenience functions for representing often-used terms */
EXTERN ICLTerm * icl_True();
EXTERN ICLTerm * icl_False();
EXTERN ICLTerm * icl_Empty();
EXTERN ICLTerm * icl_Var();
/****************************************************************************
* Macros
****************************************************************************/
#define ICL_TRUE icl_True()
#define ICL_FALSE icl_False()
#define ICL_EMPTY icl_Empty()
#define ICL_VAR icl_Var()
EXTERN void icl_stFree(void *p);
/*#define icl_Free(A) if (A) { void* vp = current_text_addr();icl_FreeTerm(A,n,vp); A = 0;}*/
/*
#ifdef LINUX
#include <asm/processor.h>
#define icl_Free(A,n) if (A) { void* vp = current_text_addr();icl_FreeTerm(A,n,vp); A = 0; }
#else
#define icl_Free(A,n) if (A) { icl_FreeTerm(A,n,0); A = 0; }
#endif
*/
#define icl_Free(A) if (A) {icl_FreeTerm(A); A = 0;}
EXTERN int icl_match_terms(ICLTerm *t1, ICLTerm *t2, struct dyn_array *vars);
/*EXTERN ICLTerm *icl_copy_term(ICLTerm *t, struct dyn_array *vars);*/
EXTERN ICLTerm *icl_copy_term_nonrec(ICLTerm *t, struct dyn_array *vars);
#define icl_copy_term(T,V) icl_copy_term_nonrec(T,V)
EXTERN void icl_init_dyn_array(struct dyn_array *da);
/* static void icl_deref(ICLTerm **var, struct dyn_array var_bindings); */
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?