138 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			138 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/* ----------------------- **
							 | 
						||
| 
								 | 
							
								**      Struct worker      **
							 | 
						||
| 
								 | 
							
								** ----------------------- */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								extern struct worker{
							 | 
						||
| 
								 | 
							
								  int worker_id;
							 | 
						||
| 
								 | 
							
								  void *worker_area[MAX_WORKERS];
							 | 
						||
| 
								 | 
							
								  long worker_offset[MAX_WORKERS];
							 | 
						||
| 
								 | 
							
								} WORKER;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define worker_id         (WORKER.worker_id)
							 | 
						||
| 
								 | 
							
								#define worker_area(W)    (WORKER.worker_area[W])
							 | 
						||
| 
								 | 
							
								#define worker_offset(W)  (WORKER.worker_offset[W])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* ------------------------- **
							 | 
						||
| 
								 | 
							
								**      Struct or_frame      **
							 | 
						||
| 
								 | 
							
								** ------------------------- */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct or_frame {
							 | 
						||
| 
								 | 
							
								  lockvar lock;
							 | 
						||
| 
								 | 
							
								  yamop *alternative;
							 | 
						||
| 
								 | 
							
								  volatile bitmap members;
							 | 
						||
| 
								 | 
							
								  choiceptr node;
							 | 
						||
| 
								 | 
							
								  struct or_frame *nearest_livenode;
							 | 
						||
| 
								 | 
							
								  /* cut support */
							 | 
						||
| 
								 | 
							
								  int depth;
							 | 
						||
| 
								 | 
							
								  choiceptr pending_prune_cp;
							 | 
						||
| 
								 | 
							
								  volatile int pending_prune_ltt;
							 | 
						||
| 
								 | 
							
								  struct or_frame *nearest_leftnode;
							 | 
						||
| 
								 | 
							
								  struct query_goal_solution_frame *query_solutions;
							 | 
						||
| 
								 | 
							
								#ifdef TABLING_INNER_CUTS
							 | 
						||
| 
								 | 
							
								  struct table_subgoal_solution_frame *table_solutions;
							 | 
						||
| 
								 | 
							
								#endif /* TABLING_INNER_CUTS */
							 | 
						||
| 
								 | 
							
								#ifdef TABLING
							 | 
						||
| 
								 | 
							
								  /* tabling support */
							 | 
						||
| 
								 | 
							
								  volatile int number_owners;
							 | 
						||
| 
								 | 
							
								  struct or_frame *next_on_stack;
							 | 
						||
| 
								 | 
							
								  struct suspension_frame *suspensions;
							 | 
						||
| 
								 | 
							
								  struct or_frame *nearest_suspension_node;
							 | 
						||
| 
								 | 
							
								#endif /* TABLING */
							 | 
						||
| 
								 | 
							
								  struct or_frame *next;
							 | 
						||
| 
								 | 
							
								} *or_fr_ptr;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define OrFr_lock(X)              ((X)->lock)
							 | 
						||
| 
								 | 
							
								#define OrFr_alternative(X)       ((X)->alternative)
							 | 
						||
| 
								 | 
							
								#define OrFr_members(X)           ((X)->members)
							 | 
						||
| 
								 | 
							
								#define OrFr_node(X)              ((X)->node)
							 | 
						||
| 
								 | 
							
								#define OrFr_nearest_livenode(X)  ((X)->nearest_livenode)
							 | 
						||
| 
								 | 
							
								#define OrFr_depth(X)             ((X)->depth)
							 | 
						||
| 
								 | 
							
								#define OrFr_pend_prune_cp(X)     ((X)->pending_prune_cp)
							 | 
						||
| 
								 | 
							
								#define OrFr_pend_prune_ltt(X)    ((X)->pending_prune_ltt)
							 | 
						||
| 
								 | 
							
								#define OrFr_nearest_leftnode(X)  ((X)->nearest_leftnode)
							 | 
						||
| 
								 | 
							
								#define OrFr_qg_solutions(X)      ((X)->query_solutions)
							 | 
						||
| 
								 | 
							
								#define OrFr_tg_solutions(X)      ((X)->table_solutions)
							 | 
						||
| 
								 | 
							
								#define OrFr_owners(X)            ((X)->number_owners)
							 | 
						||
| 
								 | 
							
								#ifdef TABLING
							 | 
						||
| 
								 | 
							
								#define OrFr_next_on_stack(X)     ((X)->next_on_stack)
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#define OrFr_next_on_stack(X)     ((X)->next)
							 | 
						||
| 
								 | 
							
								#endif /* TABLING */
							 | 
						||
| 
								 | 
							
								#define OrFr_suspensions(X)       ((X)->suspensions)
							 | 
						||
| 
								 | 
							
								#define OrFr_nearest_suspnode(X)  ((X)->nearest_suspension_node)
							 | 
						||
| 
								 | 
							
								#define OrFr_next(X)              ((X)->next)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* ------------------------------------------ **
							 | 
						||
| 
								 | 
							
								**      Struct query_goal_solution_frame      **
							 | 
						||
| 
								 | 
							
								** ------------------------------------------ */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct query_goal_solution_frame{
							 | 
						||
| 
								 | 
							
								  volatile int ltt;
							 | 
						||
| 
								 | 
							
								  struct query_goal_answer_frame *first;
							 | 
						||
| 
								 | 
							
								  struct query_goal_answer_frame *last;
							 | 
						||
| 
								 | 
							
								  struct query_goal_solution_frame *next;
							 | 
						||
| 
								 | 
							
								} *qg_sol_fr_ptr;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define SolFr_ltt(X)    ((X)->ltt)
							 | 
						||
| 
								 | 
							
								#define SolFr_first(X)  ((X)->first)
							 | 
						||
| 
								 | 
							
								#define SolFr_last(X)   ((X)->last)
							 | 
						||
| 
								 | 
							
								#define SolFr_next(X)   ((X)->next)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* ---------------------------------------- **
							 | 
						||
| 
								 | 
							
								**      Struct query_goal_answer_frame      **
							 | 
						||
| 
								 | 
							
								** ---------------------------------------- */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct query_goal_answer_frame{
							 | 
						||
| 
								 | 
							
								  char answer[MAX_LENGTH_ANSWER];
							 | 
						||
| 
								 | 
							
								  struct query_goal_answer_frame *next;
							 | 
						||
| 
								 | 
							
								} *qg_ans_fr_ptr;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define AnsFr_answer(X)  ((X)->answer)
							 | 
						||
| 
								 | 
							
								#define AnsFr_next(X)    ((X)->next)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef TABLING_INNER_CUTS
							 | 
						||
| 
								 | 
							
								/* --------------------------------------------- **
							 | 
						||
| 
								 | 
							
								**      Struct table_subgoal_solution_frame      **
							 | 
						||
| 
								 | 
							
								** --------------------------------------------- */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct table_subgoal_solution_frame{
							 | 
						||
| 
								 | 
							
								  choiceptr generator_choice_point;  
							 | 
						||
| 
								 | 
							
								  volatile int ltt;
							 | 
						||
| 
								 | 
							
								  struct table_subgoal_answer_frame *first_answer_frame;
							 | 
						||
| 
								 | 
							
								  struct table_subgoal_answer_frame *last_answer_frame;
							 | 
						||
| 
								 | 
							
								  struct table_subgoal_solution_frame *ltt_next;
							 | 
						||
| 
								 | 
							
								  struct table_subgoal_solution_frame *next;
							 | 
						||
| 
								 | 
							
								} *tg_sol_fr_ptr;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define TgSolFr_gen_cp(X)    ((X)->generator_choice_point)
							 | 
						||
| 
								 | 
							
								#define TgSolFr_ltt(X)       ((X)->ltt)
							 | 
						||
| 
								 | 
							
								#define TgSolFr_first(X)     ((X)->first_answer_frame)
							 | 
						||
| 
								 | 
							
								#define TgSolFr_last(X)      ((X)->last_answer_frame)
							 | 
						||
| 
								 | 
							
								#define TgSolFr_ltt_next(X)  ((X)->ltt_next)
							 | 
						||
| 
								 | 
							
								#define TgSolFr_next(X)      ((X)->next)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* ------------------------------------------- **
							 | 
						||
| 
								 | 
							
								**      Struct table_subgoal_answer_frame      **
							 | 
						||
| 
								 | 
							
								** ------------------------------------------- */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct table_subgoal_answer_frame{
							 | 
						||
| 
								 | 
							
								  volatile int next_free_slot;
							 | 
						||
| 
								 | 
							
								  struct answer_trie_node *answer[TG_ANSWER_SLOTS];
							 | 
						||
| 
								 | 
							
								  struct table_subgoal_answer_frame *next;
							 | 
						||
| 
								 | 
							
								} *tg_ans_fr_ptr;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define TgAnsFr_free_slot(X)  ((X)->next_free_slot)
							 | 
						||
| 
								 | 
							
								#define TgAnsFr_answer(X,N)   ((X)->answer[N])
							 | 
						||
| 
								 | 
							
								#define TgAnsFr_next(X)       ((X)->next)
							 | 
						||
| 
								 | 
							
								#endif /* TABLING_INNER_CUTS */
							 |