git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@507 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
		
			
				
	
	
		
			113 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/*************************************************************************
 | 
						|
*									 *
 | 
						|
*	 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;
 | 
						|
 |