YAP 7.1.0
or.structs.h
1/************************************************************************
2** **
3** The YapTab/YapOr/OPTYap systems **
4** **
5** YapTab extends the Yap Prolog engine to support sequential tabling **
6** YapOr extends the Yap Prolog engine to support or-parallelism **
7** OPTYap extends the Yap Prolog engine to support or-parallel tabling **
8** **
9** **
10** Yap Prolog was developed at University of Porto, Portugal **
11** **
12************************************************************************/
13
14
57/* ------------------------- **
58** Struct or_frame **
59** ------------------------- */
60
61typedef struct or_frame {
62 lockvar lock;
63 yamop *alternative;
64 volatile bitmap members;
65#ifdef YAPOR_THREADS
66 Int node_offset;
67#else
68 choiceptr node;
69#endif
70 struct or_frame *nearest_livenode;
71 /* cut support */
72 int depth;
73#ifdef YAPOR_THREADS
74 Int pending_prune_cp_offset;
75#else
76 choiceptr pending_prune_cp;
77#endif
78 volatile int pending_prune_ltt;
79 struct or_frame *nearest_leftnode;
80 struct query_goal_solution_frame *query_solutions;
81#ifdef TABLING_INNER_CUTS
82 struct table_subgoal_solution_frame *table_solutions;
83#endif /* TABLING_INNER_CUTS */
84#ifdef TABLING
85 /* tabling support */
86 volatile int number_owners;
87 struct or_frame *next_on_stack;
88 struct suspension_frame *suspensions;
89 struct or_frame *nearest_suspension_node;
90#endif /* TABLING */
91 struct or_frame *next;
92} *or_fr_ptr;
93
94#define OrFr_lock(X) ((X)->lock)
95#define OrFr_alternative(X) ((X)->alternative)
96#define OrFr_members(X) ((X)->members)
97#ifdef YAPOR_THREADS
98#define GetOrFr_node(X) offset_to_cptr((X)->node_offset)
99#define SetOrFr_node(X,V) ((X)->node_offset = cptr_to_offset(V))
100#else
101#define OrFr_node(X) ((X)->node)
102#define GetOrFr_node(X) ((X)->node)
103#define SetOrFr_node(X,V) ((X)->node = V)
104#endif
105#define OrFr_nearest_livenode(X) ((X)->nearest_livenode)
106#define OrFr_depth(X) ((X)->depth)
107#ifdef YAPOR_THREADS
108#define Get_OrFr_pend_prune_cp(X) offset_to_cptr_with_null((X)->pending_prune_cp_offset)
109#define Set_OrFr_pend_prune_cp(X,V) ((X)->pending_prune_cp_offset = cptr_to_offset_with_null(V))
110#else
111#define OrFr_pend_prune_cp(X) ((X)->pending_prune_cp)
112#define Get_OrFr_pend_prune_cp(X) ((X)->pending_prune_cp)
113#define Set_OrFr_pend_prune_cp(X,V) ((X)->pending_prune_cp = (V))
114#endif
115#define OrFr_pend_prune_ltt(X) ((X)->pending_prune_ltt)
116#define OrFr_nearest_leftnode(X) ((X)->nearest_leftnode)
117#define OrFr_qg_solutions(X) ((X)->query_solutions)
118#define OrFr_tg_solutions(X) ((X)->table_solutions)
119#define OrFr_owners(X) ((X)->number_owners)
120#ifdef TABLING
121#define OrFr_next_on_stack(X) ((X)->next_on_stack)
122#else
123#define OrFr_next_on_stack(X) ((X)->next)
124#endif /* TABLING */
125#define OrFr_suspensions(X) ((X)->suspensions)
126#define OrFr_nearest_suspnode(X) ((X)->nearest_suspension_node)
127#define OrFr_next(X) ((X)->next)
128
129
130
131/* ------------------------------------------ **
132** Struct query_goal_solution_frame **
133** ------------------------------------------ */
134
136 volatile int ltt;
137 struct query_goal_answer_frame *first;
138 struct query_goal_answer_frame *last;
139 struct query_goal_solution_frame *next;
141
142#define SolFr_ltt(X) ((X)->ltt)
143#define SolFr_first(X) ((X)->first)
144#define SolFr_last(X) ((X)->last)
145#define SolFr_next(X) ((X)->next)
146
147
148
149/* ---------------------------------------- **
150** Struct query_goal_answer_frame **
151** ---------------------------------------- */
152
154 Term answer;
155 struct query_goal_answer_frame *next;
157
158#define AnsFr_answer(X) ((X)->answer)
159#define AnsFr_next(X) ((X)->next)
160
161
162
163#ifdef TABLING_INNER_CUTS
164/* --------------------------------------------- **
165** Struct table_subgoal_solution_frame **
166** --------------------------------------------- */
167
168typedef struct table_subgoal_solution_frame{
169 choiceptr generator_choice_point;
170 volatile int ltt;
171 struct table_subgoal_answer_frame *first_answer_frame;
172 struct table_subgoal_answer_frame *last_answer_frame;
173 struct table_subgoal_solution_frame *ltt_next;
174 struct table_subgoal_solution_frame *next;
175} *tg_sol_fr_ptr;
176
177#define TgSolFr_gen_cp(X) ((X)->generator_choice_point)
178#define TgSolFr_ltt(X) ((X)->ltt)
179#define TgSolFr_first(X) ((X)->first_answer_frame)
180#define TgSolFr_last(X) ((X)->last_answer_frame)
181#define TgSolFr_ltt_next(X) ((X)->ltt_next)
182#define TgSolFr_next(X) ((X)->next)
183
184
185
186/* ------------------------------------------- **
187** Struct table_subgoal_answer_frame **
188** ------------------------------------------- */
189
190typedef struct table_subgoal_answer_frame{
191 volatile int next_free_slot;
192 struct answer_trie_node *answer[TG_ANSWER_SLOTS];
193 struct table_subgoal_answer_frame *next;
194} *tg_ans_fr_ptr;
195
196#define TgAnsFr_free_slot(X) ((X)->next_free_slot)
197#define TgAnsFr_answer(X,N) ((X)->answer[N])
198#define TgAnsFr_next(X) ((X)->next)
199#endif /* TABLING_INNER_CUTS */
200
Definition: amidefs.h:264