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 + -
显示快捷键?