improve the support for deterministic tabling (still experimental,
problems mainly with the garbage collector)
This commit is contained in:
parent
cc2c6dbe71
commit
fc31e7066e
@ -1878,6 +1878,11 @@ Yap_absmi(int inp)
|
|||||||
case _table_retry:
|
case _table_retry:
|
||||||
case _table_trust:
|
case _table_trust:
|
||||||
case _table_completion:
|
case _table_completion:
|
||||||
|
#ifdef DETERMINISTIC_TABLING
|
||||||
|
if (IS_DET_GEN_CP(B))
|
||||||
|
low_level_trace(retry_table_generator, DET_GEN_CP(B)->cp_pred_entry, NULL);
|
||||||
|
else
|
||||||
|
#endif /* DETERMINISTIC_TABLING */
|
||||||
low_level_trace(retry_table_generator, GEN_CP(B)->cp_pred_entry, (CELL *)(GEN_CP(B) + 1));
|
low_level_trace(retry_table_generator, GEN_CP(B)->cp_pred_entry, (CELL *)(GEN_CP(B) + 1));
|
||||||
break;
|
break;
|
||||||
case _table_answer_resolution:
|
case _table_answer_resolution:
|
||||||
|
@ -5410,8 +5410,16 @@ p_choicepoint_info(void)
|
|||||||
case _table_trust:
|
case _table_trust:
|
||||||
case _table_completion:
|
case _table_completion:
|
||||||
#ifdef LOW_LEVEL_TRACER
|
#ifdef LOW_LEVEL_TRACER
|
||||||
|
#ifdef DETERMINISTIC_TABLING
|
||||||
|
if (IS_DET_GEN_CP(cptr)) {
|
||||||
|
pe = DET_GEN_CP(cptr)->cp_pred_entry;
|
||||||
|
t = MkVarTerm();
|
||||||
|
} else
|
||||||
|
#endif /* DETERMINISTIC_TABLING */
|
||||||
|
{
|
||||||
pe = GEN_CP(cptr)->cp_pred_entry;
|
pe = GEN_CP(cptr)->cp_pred_entry;
|
||||||
t = BuildActivePred(pe, (CELL *)(GEN_CP(B) + 1));
|
t = BuildActivePred(pe, (CELL *)(GEN_CP(B) + 1));
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
pe = UndefCode;
|
pe = UndefCode;
|
||||||
t = MkVarTerm();
|
t = MkVarTerm();
|
||||||
|
75
C/heapgc.c
75
C/heapgc.c
@ -361,7 +361,7 @@ gc_lookup_ma_var(CELL *addr, tr_fr_ptr trp) {
|
|||||||
gc_ma_hash_table[i].loc = trp;
|
gc_ma_hash_table[i].loc = trp;
|
||||||
gc_ma_hash_table[i].more = gc_ma_h_list;
|
gc_ma_hash_table[i].more = gc_ma_h_list;
|
||||||
gc_ma_h_list = gc_ma_hash_table+i;
|
gc_ma_h_list = gc_ma_hash_table+i;
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
gc_ma_hash_table[i].next = NULL;
|
gc_ma_hash_table[i].next = NULL;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -375,7 +375,7 @@ gc_lookup_ma_var(CELL *addr, tr_fr_ptr trp) {
|
|||||||
has the correct new value
|
has the correct new value
|
||||||
*/
|
*/
|
||||||
TrailVal(nptr->loc+1) = TrailVal(trp+1);
|
TrailVal(nptr->loc+1) = TrailVal(trp+1);
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
return nptr;
|
return nptr;
|
||||||
}
|
}
|
||||||
nptr = nptr->next;
|
nptr = nptr->next;
|
||||||
@ -386,7 +386,7 @@ gc_lookup_ma_var(CELL *addr, tr_fr_ptr trp) {
|
|||||||
#if TABLING
|
#if TABLING
|
||||||
nptr->loc = trp;
|
nptr->loc = trp;
|
||||||
nptr->more = gc_ma_h_list;
|
nptr->more = gc_ma_h_list;
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
nptr->next = NULL;
|
nptr->next = NULL;
|
||||||
gc_ma_h_list = nptr;
|
gc_ma_h_list = nptr;
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1748,7 +1748,7 @@ mark_trail(tr_fr_ptr trail_ptr, tr_fr_ptr trail_base, CELL *gc_H, choiceptr gc_B
|
|||||||
#else
|
#else
|
||||||
trail_base++;
|
trail_base++;
|
||||||
mark_external_reference(&(TrailTerm(trail_base)));
|
mark_external_reference(&(TrailTerm(trail_base)));
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
trail_base ++;
|
trail_base ++;
|
||||||
if (HEAP_PTR(trail_cell)) {
|
if (HEAP_PTR(trail_cell)) {
|
||||||
/* fool the gc into thinking this is a variable */
|
/* fool the gc into thinking this is a variable */
|
||||||
@ -1771,7 +1771,7 @@ mark_trail(tr_fr_ptr trail_ptr, tr_fr_ptr trail_base, CELL *gc_H, choiceptr gc_B
|
|||||||
#ifdef FROZEN_STACKS
|
#ifdef FROZEN_STACKS
|
||||||
RESET_VARIABLE(&TrailVal(trail_base));
|
RESET_VARIABLE(&TrailVal(trail_base));
|
||||||
#endif
|
#endif
|
||||||
#endif /* TABLING */
|
#endif /* !TABLING */
|
||||||
trail_base++;
|
trail_base++;
|
||||||
RESET_VARIABLE(&TrailTerm(trail_base));
|
RESET_VARIABLE(&TrailTerm(trail_base));
|
||||||
#ifdef FROZEN_STACKS
|
#ifdef FROZEN_STACKS
|
||||||
@ -1794,7 +1794,7 @@ mark_trail(tr_fr_ptr trail_ptr, tr_fr_ptr trail_base, CELL *gc_H, choiceptr gc_B
|
|||||||
gl = gl->more;
|
gl = gl->more;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
#ifdef EASY_SHUNTING
|
#ifdef EASY_SHUNTING
|
||||||
sTR = (tr_fr_ptr)old_cont_top0;
|
sTR = (tr_fr_ptr)old_cont_top0;
|
||||||
while (begsTR != NULL) {
|
while (begsTR != NULL) {
|
||||||
@ -1877,7 +1877,7 @@ youngest_cp(choiceptr gc_B, dep_fr_ptr *depfrp)
|
|||||||
}
|
}
|
||||||
return min;
|
return min;
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1899,13 +1899,16 @@ mark_choicepoints(register choiceptr gc_B, tr_fr_ptr saved_TR, int very_verbose)
|
|||||||
|
|
||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
gc_B = youngest_cp(gc_B, &depfr);
|
gc_B = youngest_cp(gc_B, &depfr);
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
while (gc_B != NULL) {
|
while (gc_B != NULL) {
|
||||||
op_numbers opnum;
|
op_numbers opnum;
|
||||||
register OPCODE op;
|
register OPCODE op;
|
||||||
yamop *rtp = gc_B->cp_ap;
|
yamop *rtp = gc_B->cp_ap;
|
||||||
|
|
||||||
mark_db_fixed((CELL *)rtp);
|
mark_db_fixed((CELL *)rtp);
|
||||||
|
#ifdef DETERMINISTIC_TABLING
|
||||||
|
if (!IS_DET_GEN_CP(gc_B))
|
||||||
|
#endif /* DETERMINISTIC_TABLING */
|
||||||
mark_db_fixed((CELL *)(gc_B->cp_cp));
|
mark_db_fixed((CELL *)(gc_B->cp_cp));
|
||||||
#ifdef EASY_SHUNTING
|
#ifdef EASY_SHUNTING
|
||||||
current_B = gc_B;
|
current_B = gc_B;
|
||||||
@ -1933,7 +1936,7 @@ mark_choicepoints(register choiceptr gc_B, tr_fr_ptr saved_TR, int very_verbose)
|
|||||||
if (aux_sg_fr && gc_B == SgFr_gen_cp(aux_sg_fr)) {
|
if (aux_sg_fr && gc_B == SgFr_gen_cp(aux_sg_fr)) {
|
||||||
aux_sg_fr = SgFr_next(aux_sg_fr);
|
aux_sg_fr = SgFr_next(aux_sg_fr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
if (very_verbose) {
|
if (very_verbose) {
|
||||||
PredEntry *pe = Yap_PredForChoicePt(gc_B);
|
PredEntry *pe = Yap_PredForChoicePt(gc_B);
|
||||||
#if defined(ANALYST) || defined(DEBUG)
|
#if defined(ANALYST) || defined(DEBUG)
|
||||||
@ -1975,6 +1978,9 @@ mark_choicepoints(register choiceptr gc_B, tr_fr_ptr saved_TR, int very_verbose)
|
|||||||
EnvSizeInCells,
|
EnvSizeInCells,
|
||||||
NULL);
|
NULL);
|
||||||
else if (opnum != _trust_fail)
|
else if (opnum != _trust_fail)
|
||||||
|
#ifdef DETERMINISTIC_TABLING
|
||||||
|
if (!IS_DET_GEN_CP(gc_B))
|
||||||
|
#endif /* DETERMINISTIC_TABLING */
|
||||||
mark_environments((CELL_PTR) gc_B->cp_env,
|
mark_environments((CELL_PTR) gc_B->cp_env,
|
||||||
EnvSize((yamop *) (gc_B->cp_cp)),
|
EnvSize((yamop *) (gc_B->cp_cp)),
|
||||||
EnvBMap((yamop *) (gc_B->cp_cp)));
|
EnvBMap((yamop *) (gc_B->cp_cp)));
|
||||||
@ -2061,12 +2067,19 @@ mark_choicepoints(register choiceptr gc_B, tr_fr_ptr saved_TR, int very_verbose)
|
|||||||
case _table_completion:
|
case _table_completion:
|
||||||
{
|
{
|
||||||
CELL *vars_ptr, vars;
|
CELL *vars_ptr, vars;
|
||||||
|
#ifdef DETERMINISTIC_TABLING
|
||||||
|
if (IS_DET_GEN_CP(gc_B))
|
||||||
|
vars_ptr = (CELL *)(DET_GEN_CP(gc_B) + 1);
|
||||||
|
else
|
||||||
|
#endif /* DETERMINISTIC_TABLING */
|
||||||
|
{
|
||||||
vars_ptr = (CELL *)(GEN_CP(gc_B) + 1);
|
vars_ptr = (CELL *)(GEN_CP(gc_B) + 1);
|
||||||
nargs = SgFr_arity(GEN_CP(gc_B)->cp_sg_fr);
|
nargs = SgFr_arity(GEN_CP(gc_B)->cp_sg_fr);
|
||||||
while (nargs--) {
|
while (nargs--) {
|
||||||
mark_external_reference(vars_ptr);
|
mark_external_reference(vars_ptr);
|
||||||
vars_ptr++;
|
vars_ptr++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
vars = *vars_ptr++;
|
vars = *vars_ptr++;
|
||||||
while (vars--) {
|
while (vars--) {
|
||||||
mark_external_reference(vars_ptr);
|
mark_external_reference(vars_ptr);
|
||||||
@ -2270,7 +2283,7 @@ mark_choicepoints(register choiceptr gc_B, tr_fr_ptr saved_TR, int very_verbose)
|
|||||||
gc_B = youngest_cp(gc_B->cp_b, &depfr);
|
gc_B = youngest_cp(gc_B->cp_b, &depfr);
|
||||||
#else
|
#else
|
||||||
gc_B = gc_B->cp_b;
|
gc_B = gc_B->cp_b;
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2820,7 +2833,7 @@ sweep_choicepoints(choiceptr gc_B)
|
|||||||
|
|
||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
gc_B = youngest_cp(gc_B, &depfr);
|
gc_B = youngest_cp(gc_B, &depfr);
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
while (gc_B != NULL) {
|
while (gc_B != NULL) {
|
||||||
yamop *rtp = gc_B->cp_ap;
|
yamop *rtp = gc_B->cp_ap;
|
||||||
register OPCODE op;
|
register OPCODE op;
|
||||||
@ -2844,7 +2857,7 @@ sweep_choicepoints(choiceptr gc_B)
|
|||||||
if (aux_sg_fr && gc_B == SgFr_gen_cp(aux_sg_fr)) {
|
if (aux_sg_fr && gc_B == SgFr_gen_cp(aux_sg_fr)) {
|
||||||
aux_sg_fr = SgFr_next(aux_sg_fr);
|
aux_sg_fr = SgFr_next(aux_sg_fr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
|
|
||||||
restart_cp:
|
restart_cp:
|
||||||
/*
|
/*
|
||||||
@ -2941,6 +2954,12 @@ sweep_choicepoints(choiceptr gc_B)
|
|||||||
{
|
{
|
||||||
int nargs;
|
int nargs;
|
||||||
CELL *vars_ptr, vars;
|
CELL *vars_ptr, vars;
|
||||||
|
#ifdef DETERMINISTIC_TABLING
|
||||||
|
if (IS_DET_GEN_CP(gc_B))
|
||||||
|
vars_ptr = (CELL *)(DET_GEN_CP(gc_B) + 1);
|
||||||
|
else
|
||||||
|
#endif /* DETERMINISTIC_TABLING */
|
||||||
|
{
|
||||||
sweep_environments(gc_B->cp_env, EnvSize(gc_B->cp_cp), EnvBMap(gc_B->cp_cp));
|
sweep_environments(gc_B->cp_env, EnvSize(gc_B->cp_cp), EnvBMap(gc_B->cp_cp));
|
||||||
vars_ptr = (CELL *)(GEN_CP(gc_B) + 1);
|
vars_ptr = (CELL *)(GEN_CP(gc_B) + 1);
|
||||||
nargs = SgFr_arity(GEN_CP(gc_B)->cp_sg_fr);
|
nargs = SgFr_arity(GEN_CP(gc_B)->cp_sg_fr);
|
||||||
@ -2954,6 +2973,7 @@ sweep_choicepoints(choiceptr gc_B)
|
|||||||
}
|
}
|
||||||
vars_ptr++;
|
vars_ptr++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
vars = *vars_ptr++;
|
vars = *vars_ptr++;
|
||||||
while (vars--) {
|
while (vars--) {
|
||||||
CELL cp_cell = *vars_ptr;
|
CELL cp_cell = *vars_ptr;
|
||||||
@ -3113,7 +3133,7 @@ sweep_choicepoints(choiceptr gc_B)
|
|||||||
gc_B = youngest_cp(gc_B->cp_b, &depfr);
|
gc_B = youngest_cp(gc_B->cp_b, &depfr);
|
||||||
#else
|
#else
|
||||||
gc_B = gc_B->cp_b;
|
gc_B = gc_B->cp_b;
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3146,15 +3166,24 @@ static inline choiceptr
|
|||||||
update_B_H( choiceptr gc_B, CELL *current, CELL *dest, CELL *odest
|
update_B_H( choiceptr gc_B, CELL *current, CELL *dest, CELL *odest
|
||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
, dep_fr_ptr *depfrp
|
, dep_fr_ptr *depfrp
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
) {
|
) {
|
||||||
/* also make the value of H in a choicepoint
|
/* also make the value of H in a choicepoint
|
||||||
coherent with the new global
|
coherent with the new global
|
||||||
*/
|
*/
|
||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
dep_fr_ptr depfr = *depfrp;
|
dep_fr_ptr depfr = *depfrp;
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
|
|
||||||
|
#ifdef DETERMINISTIC_TABLING
|
||||||
|
while (IS_DET_GEN_CP(gc_B))
|
||||||
|
gc_B = gc_B->cp_b;
|
||||||
|
/* make sure we include consumers */
|
||||||
|
if (depfr && gc_B >= DepFr_cons_cp(depfr)) {
|
||||||
|
gc_B = DepFr_cons_cp(depfr);
|
||||||
|
*depfrp = depfr = DepFr_next(depfr);
|
||||||
|
}
|
||||||
|
#endif /* DETERMINISTIC_TABLING */
|
||||||
while (gc_B && current <= gc_B->cp_h) {
|
while (gc_B && current <= gc_B->cp_h) {
|
||||||
if (gc_B->cp_h == current) {
|
if (gc_B->cp_h == current) {
|
||||||
gc_B->cp_h = dest;
|
gc_B->cp_h = dest;
|
||||||
@ -3163,6 +3192,10 @@ update_B_H( choiceptr gc_B, CELL *current, CELL *dest, CELL *odest
|
|||||||
}
|
}
|
||||||
gc_B = gc_B->cp_b;
|
gc_B = gc_B->cp_b;
|
||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
|
#ifdef DETERMINISTIC_TABLING
|
||||||
|
while (IS_DET_GEN_CP(gc_B))
|
||||||
|
gc_B = gc_B->cp_b;
|
||||||
|
#endif /* DETERMINISTIC_TABLING */
|
||||||
/* make sure we include consumers */
|
/* make sure we include consumers */
|
||||||
if (depfr && gc_B >= DepFr_cons_cp(depfr)) {
|
if (depfr && gc_B >= DepFr_cons_cp(depfr)) {
|
||||||
gc_B = DepFr_cons_cp(depfr);
|
gc_B = DepFr_cons_cp(depfr);
|
||||||
@ -3214,14 +3247,14 @@ compact_heap(void)
|
|||||||
gc_B = DepFr_cons_cp(depfr);
|
gc_B = DepFr_cons_cp(depfr);
|
||||||
depfr = DepFr_next(depfr);
|
depfr = DepFr_next(depfr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
next_hb = set_next_hb(gc_B);
|
next_hb = set_next_hb(gc_B);
|
||||||
dest = H0 + total_marked - 1;
|
dest = H0 + total_marked - 1;
|
||||||
|
|
||||||
gc_B = update_B_H(gc_B, H, dest+1, dest+2
|
gc_B = update_B_H(gc_B, H, dest+1, dest+2
|
||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
, &depfr
|
, &depfr
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
);
|
);
|
||||||
for (current = H - 1; current >= start_from; current--) {
|
for (current = H - 1; current >= start_from; current--) {
|
||||||
if (MARKED_PTR(current)) {
|
if (MARKED_PTR(current)) {
|
||||||
@ -3236,7 +3269,7 @@ compact_heap(void)
|
|||||||
gc_B = update_B_H(gc_B, current, dest, dest+1
|
gc_B = update_B_H(gc_B, current, dest, dest+1
|
||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
, &depfr
|
, &depfr
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
);
|
);
|
||||||
next_hb = set_next_hb(gc_B);
|
next_hb = set_next_hb(gc_B);
|
||||||
}
|
}
|
||||||
@ -3397,13 +3430,13 @@ icompact_heap(void)
|
|||||||
gc_B = DepFr_cons_cp(depfr);
|
gc_B = DepFr_cons_cp(depfr);
|
||||||
depfr = DepFr_next(depfr);
|
depfr = DepFr_next(depfr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
next_hb = set_next_hb(gc_B);
|
next_hb = set_next_hb(gc_B);
|
||||||
dest = (CELL_PTR) H0 + total_marked - 1;
|
dest = (CELL_PTR) H0 + total_marked - 1;
|
||||||
gc_B = update_B_H(gc_B, H, dest+1, dest+2
|
gc_B = update_B_H(gc_B, H, dest+1, dest+2
|
||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
, &depfr
|
, &depfr
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
);
|
);
|
||||||
for (iptr = iptop - 1; iptr >= ibase; iptr--) {
|
for (iptr = iptop - 1; iptr >= ibase; iptr--) {
|
||||||
CELL ccell;
|
CELL ccell;
|
||||||
@ -3415,7 +3448,7 @@ icompact_heap(void)
|
|||||||
gc_B = update_B_H(gc_B, current, dest, dest+1
|
gc_B = update_B_H(gc_B, current, dest, dest+1
|
||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
, &depfr
|
, &depfr
|
||||||
#endif
|
#endif /* TABLING */
|
||||||
);
|
);
|
||||||
next_hb = set_next_hb(gc_B);
|
next_hb = set_next_hb(gc_B);
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
/* ----------------------- **
|
/* ----------------------- **
|
||||||
** default sizes **
|
** default sizes **
|
||||||
** ----------------------- */
|
** ----------------------- */
|
||||||
#define MAX_TABLE_VARS 100
|
#define MAX_TABLE_VARS 1000
|
||||||
|
|
||||||
/* ------------------------------------------ **
|
/* ------------------------------------------ **
|
||||||
** trail freeze scheme (define one) **
|
** trail freeze scheme (define one) **
|
||||||
|
@ -811,7 +811,7 @@
|
|||||||
sg_fr = GEN_CP(gcp)->cp_sg_fr;
|
sg_fr = GEN_CP(gcp)->cp_sg_fr;
|
||||||
subs_ptr = (CELL *)(GEN_CP(gcp) + 1) + PREG->u.s.s;
|
subs_ptr = (CELL *)(GEN_CP(gcp) + 1) + PREG->u.s.s;
|
||||||
}
|
}
|
||||||
#ifdef TABLING_ERRORS
|
#if defined(TABLING_ERRORS) && !defined(DETERMINISTIC_TABLING)
|
||||||
{
|
{
|
||||||
int i, j, arity_args, arity_subs;
|
int i, j, arity_args, arity_subs;
|
||||||
CELL *aux_args;
|
CELL *aux_args;
|
||||||
@ -831,7 +831,7 @@
|
|||||||
TABLING_ERROR_MESSAGE("j == arity_args (table_new_answer)");
|
TABLING_ERROR_MESSAGE("j == arity_args (table_new_answer)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* TABLING_ERRORS */
|
#endif /* TABLING_ERRORS && !DETERMINISTIC_TABLING */
|
||||||
#ifdef TABLE_LOCK_AT_ENTRY_LEVEL
|
#ifdef TABLE_LOCK_AT_ENTRY_LEVEL
|
||||||
LOCK(SgFr_lock(sg_fr));
|
LOCK(SgFr_lock(sg_fr));
|
||||||
#endif /* TABLE_LOCK_LEVEL */
|
#endif /* TABLE_LOCK_LEVEL */
|
||||||
|
@ -938,6 +938,11 @@ void CUT_validate_tg_answers(tg_sol_fr_ptr valid_solutions) {
|
|||||||
|
|
||||||
while (valid_solutions) {
|
while (valid_solutions) {
|
||||||
first_answer = last_answer = NULL;
|
first_answer = last_answer = NULL;
|
||||||
|
#ifdef DETERMINISTIC_TABLING
|
||||||
|
if (IS_DET_GEN_CP(TgSolFr_gen_cp(valid_solutions)))
|
||||||
|
sg_fr = DET_GEN_CP(TgSolFr_gen_cp(valid_solutions))->cp_sg_fr;
|
||||||
|
else
|
||||||
|
#endif /* DETERMINISTIC_TABLING */
|
||||||
sg_fr = GEN_CP(TgSolFr_gen_cp(valid_solutions))->cp_sg_fr;
|
sg_fr = GEN_CP(TgSolFr_gen_cp(valid_solutions))->cp_sg_fr;
|
||||||
ltt_valid_solutions = valid_solutions;
|
ltt_valid_solutions = valid_solutions;
|
||||||
valid_solutions = TgSolFr_next(valid_solutions);
|
valid_solutions = TgSolFr_next(valid_solutions);
|
||||||
|
@ -46,6 +46,11 @@ void public_completion(void) {
|
|||||||
sg_fr_ptr top_sg_fr;
|
sg_fr_ptr top_sg_fr;
|
||||||
|
|
||||||
/* complete subgoals */
|
/* complete subgoals */
|
||||||
|
#ifdef DETERMINISTIC_TABLING
|
||||||
|
if (IS_DET_GEN_CP(LOCAL_top_cp))
|
||||||
|
top_sg_fr = SgFr_next(DET_GEN_CP(LOCAL_top_cp)->cp_sg_fr);
|
||||||
|
else
|
||||||
|
#endif /* DETERMINISTIC_TABLING */
|
||||||
top_sg_fr = SgFr_next(GEN_CP(LOCAL_top_cp)->cp_sg_fr);
|
top_sg_fr = SgFr_next(GEN_CP(LOCAL_top_cp)->cp_sg_fr);
|
||||||
do {
|
do {
|
||||||
mark_as_completed(LOCAL_top_sg_fr);
|
mark_as_completed(LOCAL_top_sg_fr);
|
||||||
|
Reference in New Issue
Block a user