31#define PTR2ID(ptr) ((IDTYPE)(ptr))
32#define ID2PTR(id) ((RL_Tree*)(id))
36unsigned long int memory_usage=0;
37unsigned long int tree_mem=0;
39#define STORE_TREE_SIZE(tree) tree_mem=tree->mem_alloc
40#define UPDATE_MEM_USAGE(tree) memory_usage+=(tree->mem_alloc>0?tree->mem_alloc-tree_mem:0)
41#define FREE_MEM_USAGE(tree) (memory_usage-=tree->mem_alloc)
42#define ADD_MEM_USAGE(tree) (memory_usage+=tree->mem_alloc)
55 if (!YAP_IsIntTerm(t1) || !YAP_IsVarTerm(t2)) {
56 fprintf(stderr,
"Error in rl_new arguments\n");
60 new_tree=new_rl(YAP_IntOfTerm(t1));
62 fprintf(stderr,
"Error creating new rl.");
67 newid=YAP_MkIntTerm(PTR2ID(new_tree));
87 if (!YAP_IsIntTerm(t1))
89 if (!YAP_IsVarTerm(t2))
92 id1=YAP_IntOfTerm(t1);
94 new_tree=copy_rl(tree);
97 fprintf(stderr,
"Error creating new rl.");
102 ADD_MEM_USAGE(new_tree);
106 newid=YAP_MkIntTerm(PTR2ID(new_tree));
107 if(!YAP_Unify(
YAP_Deref(YAP_ARG2),newid))
124 if (YAP_IsVarTerm(t1))
127 id = YAP_IntOfTerm(t1);
131 t_size=YAP_MkIntTerm(size);
132 if(!YAP_Unify(YAP_ARG2,t_size) )
147 if(!YAP_Unify(t1,YAP_MkIntTerm(memory_usage)) )
164 if (YAP_IsVarTerm(t1))
167 id=YAP_IntOfTerm(t1);
170 FREE_MEM_USAGE(tree);
193 if (YAP_IsVarTerm(t1) || YAP_IsVarTerm(t2) )
196 id = YAP_IntOfTerm(t1);
197 val = YAP_IntOfTerm(t2);
202 STORE_TREE_SIZE(tree);
203 set_in_rl(tree,val,IN);
204 UPDATE_MEM_USAGE(tree);
206 set_in_rl(tree,val,IN);
227 if (YAP_IsVarTerm(t1) || YAP_IsVarTerm(t2) )
230 id = YAP_IntOfTerm(t1);
231 val = YAP_IntOfTerm(t2);
235 if ( in_rl(tree,val) )
256 if (YAP_IsVarTerm(t1) || YAP_IsVarTerm(t2) )
259 id = YAP_IntOfTerm(t1);
260 val = YAP_IntOfTerm(t2);
264 STORE_TREE_SIZE(tree);
265 set_in_rl(tree,val,OUT);
266 UPDATE_MEM_USAGE(tree);
268 set_in_rl(tree,val,OUT);
285 if (YAP_IsVarTerm(t1) )
288 id = YAP_IntOfTerm(t1);
293 STORE_TREE_SIZE(tree);
295 UPDATE_MEM_USAGE(tree);
316 if (YAP_IsVarTerm(t1) )
319 id = YAP_IntOfTerm(t1);
324 STORE_TREE_SIZE(tree);
327 UPDATE_MEM_USAGE(tree);
348 if (YAP_IsVarTerm(t1) ) {
349 fprintf(stderr,
"Error printing tree..");
352 id = YAP_IntOfTerm(t1);
366 YAP_Term last_solution;
385 id = YAP_IntOfTerm(t1);
387 val=YAP_IntOfTerm(back_data->last_solution);
388 val=rl_next_in_bigger(tree,val);
389 if ( val > 0 && YAP_Unify(
YAP_Deref(YAP_ARG2),YAP_MkIntTerm(val))) {
390 back_data->last_solution=YAP_MkIntTerm(val);
407 if (!YAP_IsIntTerm(t1)) {
411 if ( YAP_IsVarTerm(t2) ) {
414 back_data->last_solution = YAP_MkIntTerm(0);
417 id = YAP_IntOfTerm(t1);
419 val = YAP_IntOfTerm(t2);
420 if ( in_rl(tree,val) ) {
434 YAP_UserCPredicate(
"rl_new", rl_new,2);
435 YAP_UserCPredicate(
"rl_free", rl_free,1);
436 YAP_UserCPredicate(
"rl_size", rl_size,2);
437 YAP_UserCPredicate(
"rl_mem", rl_mem_usage,1);
439 YAP_UserCPredicate(
"rl_copy", rl_copy,2);
440 YAP_UserCPredicate(
"rl_set_out", rl_set_out,2);
443 YAP_UserCPredicate(
"rl_set_in", rl_set_in,2);
444 YAP_UserCPredicate(
"rl_set_all_in", rl_set_all_in,1);
446 YAP_UserCPredicate(
"rl_print", rl_print,1);
448 YAP_UserCPredicate(
"rl_freeze", rl_freeze,1);
#define YAP_Deref(t)
X_API macro.
range list core data-structures