/*************************************************************************
*									 *
*	 YAP Prolog 							 *
*									 *
*	Yap Prolog was developed at NCCUP - Universidade do Porto	 *
*									 *
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997	 *
*									 *
**************************************************************************
*									 *
* File:		corout.c						 *
* Last rev:								 *
* mods:									 *
* comments:	Co-routining from within YAP				 *
*									 *
*************************************************************************/
#ifdef SCCS
static char SccsId[]="%W% %G%";
#endif

#ifdef COROUTINING

/*

Attributed variales are controlled by the attvar_record. This includes
three pieces of information:
       A pointer to the list of attributes;
       The value for the variable, if the variable was bound
       Whether we are done with this variable as an attributed variable
       An array of NUM_OF_ATTS attributes.

Each attribute contains;

 o a time stamp;
 o the current value ([] if unbound).

*/

typedef struct attvar_struct {
  Term	Done;		/* if unbound suspension active, if bound terminated */
  CELL sus_id;
  Term NS;			 /* other attributed variables */
  Term Value;                    /* value the variable will take */
#ifdef __GNUC__
  /* GNUCC understands empty arrays */
  Term  Atts[0];
#else
  Term  Atts[2];                 /* size of an entry */
#endif
} attvar_record;

/*********** tags for suspension variables */

#define AbsAttVar(attvar_ptr)	AbsAppl(((CELL *)(attvar_ptr)))
#define RepAttVar(val)		((attvar_record *)RepAppl(val))

#endif