/************************************************************************* * * * YAP Prolog %W% %G% * * * Yap Prolog was developed at NCCUP - Universidade do Porto * * * * Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * * * ************************************************************************** * * * File: Atoms.h.m4 * * Last rev: 19/2/88 * * mods: * * comments: atom properties header file for YAP * * * *************************************************************************/ #undef EXTERN #ifndef ADTDEFS_C #define EXTERN static #else #define EXTERN #endif /********* operations for atoms ****************************************/ /* Atoms are assumed to be uniquely represented by an OFFSET and to have associated with them a struct of type AtomEntry The two functions RepAtom : Atom -> *AtomEntry AbsAtom : *AtomEntry -> Atom are used to encapsulate the implementation of atoms */ typedef struct AtomEntryStruct *Atom; typedef struct PropEntryStruct *Prop; /* I can only define the structure after I define the actual atoms */ /* atom structure */ typedef struct AtomEntryStruct { Atom NextOfAE; /* used to build hash chains */ Prop PropsOfAE; /* property list for this atom */ #if defined(YAPOR) || defined(THREADS) rwlock_t ARWLock; #endif char StrOfAE[MIN_ARRAY]; /* representation of atom as a string */ } AtomEntry; /* Props and Atoms are stored in chains, ending with a NIL */ #if USE_OFFSETS # define EndOfPAEntr(P) ( Addr(P) == AtomBase) #else # define EndOfPAEntr(P) ( Addr(P) == NIL ) #endif #define AtomName(at) RepAtom(at)->StrOfAE /* ********************** Properties **********************************/ #if USE_OFFSETS #define USE_OFFSETS_IN_PROPS 1 #else #define USE_OFFSETS_IN_PROPS 0 #endif typedef SFLAGS PropFlags; /* basic property entry structure */ typedef struct PropEntryStruct { Prop NextOfPE; /* used to chain properties */ PropFlags KindOfPE; /* kind of property */ } PropEntry; /* ************************* Functors **********************************/ /* Functor data type abstype Functor = atom # int with MkFunctor(a,n) = ... and NameOfFunctor(f) = ... and ArityOfFunctor(f) = ... */ #define MaxArity 255 #define FunctorProperty ((PropFlags)(0xbb00)) /* functor property */ typedef struct FunctorEntryStruct { Prop NextOfPE; /* used to chain properties */ PropFlags KindOfPE; /* kind of property */ unsigned int ArityOfFE; /* arity of functor */ Atom NameOfFE; /* back pointer to owner atom */ Prop PropsOfFE; /* pointer to list of properties for this functor */ #if defined(YAPOR) || defined(THREADS) rwlock_t FRWLock; #endif } FunctorEntry; typedef FunctorEntry *Functor;