| 
									
										
										
										
											2002-06-01 04:29:01 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*************************************************************************
 | 
					
						
							|  |  |  | *									 * | 
					
						
							|  |  |  | *	 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; | 
					
						
							|  |  |  | 
 |