adding two new modes to the yap_flag/2 and tabling_mode/2 built-in
predicates: 'local_trie' mode and 'global_trie' mode.
This commit is contained in:
parent
052c20a29b
commit
ddb1cd8604
@ -3509,7 +3509,7 @@ static Term
|
|||||||
all_calls(void)
|
all_calls(void)
|
||||||
{
|
{
|
||||||
Term ts[4];
|
Term ts[4];
|
||||||
Functor f = Yap_MkFunctor(AtomLocal,4);
|
Functor f = Yap_MkFunctor(AtomLocalSp,4);
|
||||||
|
|
||||||
ts[0] = MkIntegerTerm((Int)P);
|
ts[0] = MkIntegerTerm((Int)P);
|
||||||
ts[1] = MkIntegerTerm((Int)CP);
|
ts[1] = MkIntegerTerm((Int)CP);
|
||||||
|
65
C/stdpreds.c
65
C/stdpreds.c
@ -273,6 +273,9 @@ static char SccsId[] = "%W% %G%";
|
|||||||
#include "YapHeap.h"
|
#include "YapHeap.h"
|
||||||
#include "eval.h"
|
#include "eval.h"
|
||||||
#include "yapio.h"
|
#include "yapio.h"
|
||||||
|
#ifdef TABLING
|
||||||
|
#include "tab.macros.h"
|
||||||
|
#endif /* TABLING */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#if HAVE_STRING_H
|
#if HAVE_STRING_H
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -3656,28 +3659,19 @@ p_access_yap_flags(void)
|
|||||||
}
|
}
|
||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
if (flag == TABLING_MODE_FLAG) {
|
if (flag == TABLING_MODE_FLAG) {
|
||||||
int n = 0;
|
tout = TermNil;
|
||||||
if (IsMode_CompletedOn(yap_flags[flag])) {
|
if (IsMode_LocalTrie(yap_flags[flag]))
|
||||||
if (IsMode_LoadAnswers(yap_flags[flag]))
|
tout = MkPairTerm(MkAtomTerm(AtomLocalTrie), tout);
|
||||||
tout = MkAtomTerm(AtomLoadAnswers);
|
else if (IsMode_GlobalTrie(yap_flags[flag]))
|
||||||
else
|
tout = MkPairTerm(MkAtomTerm(AtomGlobalTrie), tout);
|
||||||
tout = MkAtomTerm(AtomExecAnswers);
|
if (IsMode_ExecAnswers(yap_flags[flag]))
|
||||||
n++;
|
tout = MkPairTerm(MkAtomTerm(AtomExecAnswers), tout);
|
||||||
}
|
else if (IsMode_LoadAnswers(yap_flags[flag]))
|
||||||
if (IsMode_SchedulingOn(yap_flags[flag])) {
|
tout = MkPairTerm(MkAtomTerm(AtomLoadAnswers), tout);
|
||||||
Term taux = tout;
|
if (IsMode_Batched(yap_flags[flag]))
|
||||||
if (IsMode_Local(yap_flags[flag]))
|
tout = MkPairTerm(MkAtomTerm(AtomBatched), tout);
|
||||||
tout = MkAtomTerm(AtomLocalA);
|
else if (IsMode_Local(yap_flags[flag]))
|
||||||
else
|
tout = MkPairTerm(MkAtomTerm(AtomLocal), tout);
|
||||||
tout = MkAtomTerm(AtomBatched);
|
|
||||||
if (n) {
|
|
||||||
taux = MkPairTerm(taux, MkAtomTerm(AtomNil));
|
|
||||||
tout = MkPairTerm(tout, taux);
|
|
||||||
}
|
|
||||||
n++;
|
|
||||||
}
|
|
||||||
if (n == 0)
|
|
||||||
tout = MkAtomTerm(AtomDefault);
|
|
||||||
} else
|
} else
|
||||||
#endif /* TABLING */
|
#endif /* TABLING */
|
||||||
tout = MkIntegerTerm(yap_flags[flag]);
|
tout = MkIntegerTerm(yap_flags[flag]);
|
||||||
@ -3804,14 +3798,7 @@ p_set_yap_flags(void)
|
|||||||
if (value == 0) { /* default */
|
if (value == 0) { /* default */
|
||||||
tab_ent_ptr tab_ent = GLOBAL_root_tab_ent;
|
tab_ent_ptr tab_ent = GLOBAL_root_tab_ent;
|
||||||
while(tab_ent) {
|
while(tab_ent) {
|
||||||
if (IsDefaultMode_Local(TabEnt_mode(tab_ent)))
|
TabEnt_mode(tab_ent) = TabEnt_flags(tab_ent);
|
||||||
SetMode_Local(TabEnt_mode(tab_ent));
|
|
||||||
else
|
|
||||||
SetMode_Batched(TabEnt_mode(tab_ent));
|
|
||||||
if (IsDefaultMode_LoadAnswers(TabEnt_mode(tab_ent)))
|
|
||||||
SetMode_LoadAnswers(TabEnt_mode(tab_ent));
|
|
||||||
else
|
|
||||||
SetMode_ExecAnswers(TabEnt_mode(tab_ent));
|
|
||||||
tab_ent = TabEnt_next(tab_ent);
|
tab_ent = TabEnt_next(tab_ent);
|
||||||
}
|
}
|
||||||
yap_flags[TABLING_MODE_FLAG] = 0;
|
yap_flags[TABLING_MODE_FLAG] = 0;
|
||||||
@ -3822,7 +3809,6 @@ p_set_yap_flags(void)
|
|||||||
tab_ent = TabEnt_next(tab_ent);
|
tab_ent = TabEnt_next(tab_ent);
|
||||||
}
|
}
|
||||||
SetMode_Batched(yap_flags[TABLING_MODE_FLAG]);
|
SetMode_Batched(yap_flags[TABLING_MODE_FLAG]);
|
||||||
SetMode_SchedulingOn(yap_flags[TABLING_MODE_FLAG]);
|
|
||||||
} else if (value == 2) { /* local */
|
} else if (value == 2) { /* local */
|
||||||
tab_ent_ptr tab_ent = GLOBAL_root_tab_ent;
|
tab_ent_ptr tab_ent = GLOBAL_root_tab_ent;
|
||||||
while(tab_ent) {
|
while(tab_ent) {
|
||||||
@ -3830,7 +3816,6 @@ p_set_yap_flags(void)
|
|||||||
tab_ent = TabEnt_next(tab_ent);
|
tab_ent = TabEnt_next(tab_ent);
|
||||||
}
|
}
|
||||||
SetMode_Local(yap_flags[TABLING_MODE_FLAG]);
|
SetMode_Local(yap_flags[TABLING_MODE_FLAG]);
|
||||||
SetMode_SchedulingOn(yap_flags[TABLING_MODE_FLAG]);
|
|
||||||
} else if (value == 3) { /* exec_answers */
|
} else if (value == 3) { /* exec_answers */
|
||||||
tab_ent_ptr tab_ent = GLOBAL_root_tab_ent;
|
tab_ent_ptr tab_ent = GLOBAL_root_tab_ent;
|
||||||
while(tab_ent) {
|
while(tab_ent) {
|
||||||
@ -3838,7 +3823,6 @@ p_set_yap_flags(void)
|
|||||||
tab_ent = TabEnt_next(tab_ent);
|
tab_ent = TabEnt_next(tab_ent);
|
||||||
}
|
}
|
||||||
SetMode_ExecAnswers(yap_flags[TABLING_MODE_FLAG]);
|
SetMode_ExecAnswers(yap_flags[TABLING_MODE_FLAG]);
|
||||||
SetMode_CompletedOn(yap_flags[TABLING_MODE_FLAG]);
|
|
||||||
} else if (value == 4) { /* load_answers */
|
} else if (value == 4) { /* load_answers */
|
||||||
tab_ent_ptr tab_ent = GLOBAL_root_tab_ent;
|
tab_ent_ptr tab_ent = GLOBAL_root_tab_ent;
|
||||||
while(tab_ent) {
|
while(tab_ent) {
|
||||||
@ -3846,7 +3830,20 @@ p_set_yap_flags(void)
|
|||||||
tab_ent = TabEnt_next(tab_ent);
|
tab_ent = TabEnt_next(tab_ent);
|
||||||
}
|
}
|
||||||
SetMode_LoadAnswers(yap_flags[TABLING_MODE_FLAG]);
|
SetMode_LoadAnswers(yap_flags[TABLING_MODE_FLAG]);
|
||||||
SetMode_CompletedOn(yap_flags[TABLING_MODE_FLAG]);
|
} else if (value == 5) { /* local_trie */
|
||||||
|
tab_ent_ptr tab_ent = GLOBAL_root_tab_ent;
|
||||||
|
while(tab_ent) {
|
||||||
|
SetMode_LocalTrie(TabEnt_mode(tab_ent));
|
||||||
|
tab_ent = TabEnt_next(tab_ent);
|
||||||
|
}
|
||||||
|
SetMode_LocalTrie(yap_flags[TABLING_MODE_FLAG]);
|
||||||
|
} else if (value == 6) { /* global_trie */
|
||||||
|
tab_ent_ptr tab_ent = GLOBAL_root_tab_ent;
|
||||||
|
while(tab_ent) {
|
||||||
|
SetMode_GlobalTrie(TabEnt_mode(tab_ent));
|
||||||
|
tab_ent = TabEnt_next(tab_ent);
|
||||||
|
}
|
||||||
|
SetMode_GlobalTrie(yap_flags[TABLING_MODE_FLAG]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif /* TABLING */
|
#endif /* TABLING */
|
||||||
|
@ -114,7 +114,8 @@
|
|||||||
AtomGeneratePredInfo = Yap_FullLookupAtom("$generate_pred_info");
|
AtomGeneratePredInfo = Yap_FullLookupAtom("$generate_pred_info");
|
||||||
AtomGetwork = Yap_FullLookupAtom("$getwork");
|
AtomGetwork = Yap_FullLookupAtom("$getwork");
|
||||||
AtomGetworkSeq = Yap_FullLookupAtom("$getwork_seq");
|
AtomGetworkSeq = Yap_FullLookupAtom("$getwork_seq");
|
||||||
AtomGlobal = Yap_LookupAtom("global_sp");
|
AtomGlobalSp = Yap_LookupAtom("global_sp");
|
||||||
|
AtomGlobalTrie = Yap_LookupAtom("global_trie");
|
||||||
AtomGoalExpansion = Yap_LookupAtom("goal_expansion");
|
AtomGoalExpansion = Yap_LookupAtom("goal_expansion");
|
||||||
AtomHERE = Yap_LookupAtom("\n <====HERE====> \n");
|
AtomHERE = Yap_LookupAtom("\n <====HERE====> \n");
|
||||||
AtomHandleThrow = Yap_FullLookupAtom("$handle_throw");
|
AtomHandleThrow = Yap_FullLookupAtom("$handle_throw");
|
||||||
@ -142,8 +143,9 @@
|
|||||||
AtomList = Yap_LookupAtom("list");
|
AtomList = Yap_LookupAtom("list");
|
||||||
AtomLive = Yap_FullLookupAtom("$live");
|
AtomLive = Yap_FullLookupAtom("$live");
|
||||||
AtomLoadAnswers = Yap_LookupAtom("load_answers");
|
AtomLoadAnswers = Yap_LookupAtom("load_answers");
|
||||||
AtomLocal = Yap_LookupAtom("local_sp");
|
AtomLocal = Yap_LookupAtom("local");
|
||||||
AtomLocalA = Yap_LookupAtom("local");
|
AtomLocalSp = Yap_LookupAtom("local_sp");
|
||||||
|
AtomLocalTrie = Yap_LookupAtom("local_trie");
|
||||||
AtomMaxArity = Yap_LookupAtom("max_arity");
|
AtomMaxArity = Yap_LookupAtom("max_arity");
|
||||||
AtomMaxFiles = Yap_LookupAtom("max_files");
|
AtomMaxFiles = Yap_LookupAtom("max_files");
|
||||||
AtomMegaClause = Yap_FullLookupAtom("$mega_clause");
|
AtomMegaClause = Yap_FullLookupAtom("$mega_clause");
|
||||||
|
@ -114,7 +114,8 @@
|
|||||||
AtomGeneratePredInfo = AtomAdjust(AtomGeneratePredInfo);
|
AtomGeneratePredInfo = AtomAdjust(AtomGeneratePredInfo);
|
||||||
AtomGetwork = AtomAdjust(AtomGetwork);
|
AtomGetwork = AtomAdjust(AtomGetwork);
|
||||||
AtomGetworkSeq = AtomAdjust(AtomGetworkSeq);
|
AtomGetworkSeq = AtomAdjust(AtomGetworkSeq);
|
||||||
AtomGlobal = AtomAdjust(AtomGlobal);
|
AtomGlobalSp = AtomAdjust(AtomGlobalSp);
|
||||||
|
AtomGlobalTrie = AtomAdjust(AtomGlobalTrie);
|
||||||
AtomGoalExpansion = AtomAdjust(AtomGoalExpansion);
|
AtomGoalExpansion = AtomAdjust(AtomGoalExpansion);
|
||||||
AtomHERE = AtomAdjust(AtomHERE);
|
AtomHERE = AtomAdjust(AtomHERE);
|
||||||
AtomHandleThrow = AtomAdjust(AtomHandleThrow);
|
AtomHandleThrow = AtomAdjust(AtomHandleThrow);
|
||||||
@ -143,7 +144,8 @@
|
|||||||
AtomLive = AtomAdjust(AtomLive);
|
AtomLive = AtomAdjust(AtomLive);
|
||||||
AtomLoadAnswers = AtomAdjust(AtomLoadAnswers);
|
AtomLoadAnswers = AtomAdjust(AtomLoadAnswers);
|
||||||
AtomLocal = AtomAdjust(AtomLocal);
|
AtomLocal = AtomAdjust(AtomLocal);
|
||||||
AtomLocalA = AtomAdjust(AtomLocalA);
|
AtomLocalSp = AtomAdjust(AtomLocalSp);
|
||||||
|
AtomLocalTrie = AtomAdjust(AtomLocalTrie);
|
||||||
AtomMaxArity = AtomAdjust(AtomMaxArity);
|
AtomMaxArity = AtomAdjust(AtomMaxArity);
|
||||||
AtomMaxFiles = AtomAdjust(AtomMaxFiles);
|
AtomMaxFiles = AtomAdjust(AtomMaxFiles);
|
||||||
AtomMegaClause = AtomAdjust(AtomMegaClause);
|
AtomMegaClause = AtomAdjust(AtomMegaClause);
|
||||||
|
12
H/tatoms.h
12
H/tatoms.h
@ -230,8 +230,10 @@
|
|||||||
#define AtomGetwork Yap_heap_regs->AtomGetwork_
|
#define AtomGetwork Yap_heap_regs->AtomGetwork_
|
||||||
Atom AtomGetworkSeq_;
|
Atom AtomGetworkSeq_;
|
||||||
#define AtomGetworkSeq Yap_heap_regs->AtomGetworkSeq_
|
#define AtomGetworkSeq Yap_heap_regs->AtomGetworkSeq_
|
||||||
Atom AtomGlobal_;
|
Atom AtomGlobalSp_;
|
||||||
#define AtomGlobal Yap_heap_regs->AtomGlobal_
|
#define AtomGlobalSp Yap_heap_regs->AtomGlobalSp_
|
||||||
|
Atom AtomGlobalTrie_;
|
||||||
|
#define AtomGlobalTrie Yap_heap_regs->AtomGlobalTrie_
|
||||||
Atom AtomGoalExpansion_;
|
Atom AtomGoalExpansion_;
|
||||||
#define AtomGoalExpansion Yap_heap_regs->AtomGoalExpansion_
|
#define AtomGoalExpansion Yap_heap_regs->AtomGoalExpansion_
|
||||||
Atom AtomHERE_;
|
Atom AtomHERE_;
|
||||||
@ -288,8 +290,10 @@
|
|||||||
#define AtomLoadAnswers Yap_heap_regs->AtomLoadAnswers_
|
#define AtomLoadAnswers Yap_heap_regs->AtomLoadAnswers_
|
||||||
Atom AtomLocal_;
|
Atom AtomLocal_;
|
||||||
#define AtomLocal Yap_heap_regs->AtomLocal_
|
#define AtomLocal Yap_heap_regs->AtomLocal_
|
||||||
Atom AtomLocalA_;
|
Atom AtomLocalSp_;
|
||||||
#define AtomLocalA Yap_heap_regs->AtomLocalA_
|
#define AtomLocalSp Yap_heap_regs->AtomLocalSp_
|
||||||
|
Atom AtomLocalTrie_;
|
||||||
|
#define AtomLocalTrie Yap_heap_regs->AtomLocalTrie_
|
||||||
Atom AtomMaxArity_;
|
Atom AtomMaxArity_;
|
||||||
#define AtomMaxArity Yap_heap_regs->AtomMaxArity_
|
#define AtomMaxArity Yap_heap_regs->AtomMaxArity_
|
||||||
Atom AtomMaxFiles_;
|
Atom AtomMaxFiles_;
|
||||||
|
@ -616,10 +616,6 @@ Int p_table(void) {
|
|||||||
return (FALSE); /* predicate already compiled */
|
return (FALSE); /* predicate already compiled */
|
||||||
pe->PredFlags |= TabledPredFlag;
|
pe->PredFlags |= TabledPredFlag;
|
||||||
new_table_entry(tab_ent, pe, at, arity);
|
new_table_entry(tab_ent, pe, at, arity);
|
||||||
if (IsMode_Local(yap_flags[TABLING_MODE_FLAG]))
|
|
||||||
SetMode_Local(TabEnt_mode(tab_ent));
|
|
||||||
if (IsMode_LoadAnswers(yap_flags[TABLING_MODE_FLAG]))
|
|
||||||
SetMode_LoadAnswers(TabEnt_mode(tab_ent));
|
|
||||||
pe->TableOfPred = tab_ent;
|
pe->TableOfPred = tab_ent;
|
||||||
return (TRUE);
|
return (TRUE);
|
||||||
}
|
}
|
||||||
@ -627,7 +623,7 @@ Int p_table(void) {
|
|||||||
|
|
||||||
static
|
static
|
||||||
Int p_tabling_mode(void) {
|
Int p_tabling_mode(void) {
|
||||||
Term mod, t, val;
|
Term mod, t, tvalue;
|
||||||
tab_ent_ptr tab_ent;
|
tab_ent_ptr tab_ent;
|
||||||
|
|
||||||
mod = Deref(ARG1);
|
mod = Deref(ARG1);
|
||||||
@ -638,61 +634,69 @@ Int p_tabling_mode(void) {
|
|||||||
tab_ent = RepPredProp(PredPropByFunc(FunctorOfTerm(t), mod))->TableOfPred;
|
tab_ent = RepPredProp(PredPropByFunc(FunctorOfTerm(t), mod))->TableOfPred;
|
||||||
else
|
else
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
val = Deref(ARG3);
|
tvalue = Deref(ARG3);
|
||||||
if (IsVarTerm(val)) {
|
if (IsVarTerm(tvalue)) {
|
||||||
Term mode;
|
t = TermNil;
|
||||||
t = MkAtomTerm(AtomNil);
|
if (IsMode_LocalTrie(TabEnt_flags(tab_ent)))
|
||||||
if (IsDefaultMode_LoadAnswers(TabEnt_mode(tab_ent)))
|
t = MkPairTerm(MkAtomTerm(AtomLocalTrie), t);
|
||||||
mode = MkAtomTerm(Yap_LookupAtom("load_answers"));
|
else if (IsMode_GlobalTrie(TabEnt_flags(tab_ent)))
|
||||||
else
|
t = MkPairTerm(MkAtomTerm(AtomGlobalTrie), t);
|
||||||
mode = MkAtomTerm(Yap_LookupAtom("exec_answers"));
|
if (IsMode_ExecAnswers(TabEnt_flags(tab_ent)))
|
||||||
t = MkPairTerm(mode, t);
|
t = MkPairTerm(MkAtomTerm(AtomExecAnswers), t);
|
||||||
if (IsDefaultMode_Local(TabEnt_mode(tab_ent)))
|
else if (IsMode_LoadAnswers(TabEnt_flags(tab_ent)))
|
||||||
mode = MkAtomTerm(Yap_LookupAtom("local"));
|
t = MkPairTerm(MkAtomTerm(AtomLoadAnswers), t);
|
||||||
else
|
if (IsMode_Batched(TabEnt_flags(tab_ent)))
|
||||||
mode = MkAtomTerm(Yap_LookupAtom("batched"));
|
t = MkPairTerm(MkAtomTerm(AtomBatched), t);
|
||||||
t = MkPairTerm(mode, t);
|
else if (IsMode_Local(TabEnt_flags(tab_ent)))
|
||||||
mode = MkAtomTerm(Yap_LookupAtom("default"));
|
t = MkPairTerm(MkAtomTerm(AtomLocal), t);
|
||||||
t = MkPairTerm(mode, t);
|
t = MkPairTerm(MkAtomTerm(AtomDefault), t);
|
||||||
t = MkPairTerm(t, MkAtomTerm(AtomNil));
|
t = MkPairTerm(t, TermNil);
|
||||||
if (IsMode_LoadAnswers(TabEnt_mode(tab_ent)))
|
if (IsMode_LocalTrie(TabEnt_mode(tab_ent)))
|
||||||
mode = MkAtomTerm(Yap_LookupAtom("load_answers"));
|
t = MkPairTerm(MkAtomTerm(AtomLocalTrie), t);
|
||||||
else
|
else if (IsMode_GlobalTrie(TabEnt_mode(tab_ent)))
|
||||||
mode = MkAtomTerm(Yap_LookupAtom("exec_answers"));
|
t = MkPairTerm(MkAtomTerm(AtomGlobalTrie), t);
|
||||||
t = MkPairTerm(mode, t);
|
if (IsMode_ExecAnswers(TabEnt_mode(tab_ent)))
|
||||||
if (IsMode_Local(TabEnt_mode(tab_ent)))
|
t = MkPairTerm(MkAtomTerm(AtomExecAnswers), t);
|
||||||
mode = MkAtomTerm(Yap_LookupAtom("local"));
|
else if (IsMode_LoadAnswers(TabEnt_mode(tab_ent)))
|
||||||
else
|
t = MkPairTerm(MkAtomTerm(AtomLoadAnswers), t);
|
||||||
mode = MkAtomTerm(Yap_LookupAtom("batched"));
|
if (IsMode_Batched(TabEnt_mode(tab_ent)))
|
||||||
t = MkPairTerm(mode, t);
|
t = MkPairTerm(MkAtomTerm(AtomBatched), t);
|
||||||
Bind((CELL *)val, t);
|
else if (IsMode_Local(TabEnt_mode(tab_ent)))
|
||||||
|
t = MkPairTerm(MkAtomTerm(AtomLocal), t);
|
||||||
|
Bind((CELL *) tvalue, t);
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
} else if (IsIntTerm(tvalue)) {
|
||||||
if (IsAtomTerm(val)) {
|
Int value = IntOfTerm(tvalue);
|
||||||
char *str_val = RepAtom(AtomOfTerm(val))->StrOfAE;
|
if (value == 1) { /* batched */
|
||||||
if (strcmp(str_val,"batched") == 0) {
|
SetMode_Batched(TabEnt_flags(tab_ent));
|
||||||
SetDefaultMode_Batched(TabEnt_mode(tab_ent));
|
if (! IsMode_Local(yap_flags[TABLING_MODE_FLAG]))
|
||||||
if (IsMode_SchedulingOff(yap_flags[TABLING_MODE_FLAG]))
|
|
||||||
SetMode_Batched(TabEnt_mode(tab_ent));
|
SetMode_Batched(TabEnt_mode(tab_ent));
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
} else if (value == 2) { /* local */
|
||||||
if (strcmp(str_val,"local") == 0) {
|
SetMode_Local(TabEnt_flags(tab_ent));
|
||||||
SetDefaultMode_Local(TabEnt_mode(tab_ent));
|
if (! IsMode_Batched(yap_flags[TABLING_MODE_FLAG]))
|
||||||
if (IsMode_SchedulingOff(yap_flags[TABLING_MODE_FLAG]))
|
|
||||||
SetMode_Local(TabEnt_mode(tab_ent));
|
SetMode_Local(TabEnt_mode(tab_ent));
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
} else if (value == 3) { /* exec_answers */
|
||||||
if (strcmp(str_val,"exec_answers") == 0) {
|
SetMode_ExecAnswers(TabEnt_flags(tab_ent));
|
||||||
SetDefaultMode_ExecAnswers(TabEnt_mode(tab_ent));
|
if (! IsMode_LoadAnswers(yap_flags[TABLING_MODE_FLAG]))
|
||||||
if (IsMode_CompletedOff(yap_flags[TABLING_MODE_FLAG]))
|
|
||||||
SetMode_ExecAnswers(TabEnt_mode(tab_ent));
|
SetMode_ExecAnswers(TabEnt_mode(tab_ent));
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
} else if (value == 4) { /* load_answers */
|
||||||
if (strcmp(str_val,"load_answers") == 0) {
|
SetMode_LoadAnswers(TabEnt_flags(tab_ent));
|
||||||
SetDefaultMode_LoadAnswers(TabEnt_mode(tab_ent));
|
if (! IsMode_ExecAnswers(yap_flags[TABLING_MODE_FLAG]))
|
||||||
if (IsMode_CompletedOff(yap_flags[TABLING_MODE_FLAG]))
|
|
||||||
SetMode_LoadAnswers(TabEnt_mode(tab_ent));
|
SetMode_LoadAnswers(TabEnt_mode(tab_ent));
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
|
} else if (value == 5) { /* local_trie */
|
||||||
|
SetMode_LocalTrie(TabEnt_flags(tab_ent));
|
||||||
|
if (! IsMode_GlobalTrie(yap_flags[TABLING_MODE_FLAG]))
|
||||||
|
SetMode_LocalTrie(TabEnt_mode(tab_ent));
|
||||||
|
return(TRUE);
|
||||||
|
} else if (value == 6) { /* global_trie */
|
||||||
|
SetMode_GlobalTrie(TabEnt_flags(tab_ent));
|
||||||
|
if (! IsMode_LocalTrie(yap_flags[TABLING_MODE_FLAG]))
|
||||||
|
SetMode_GlobalTrie(TabEnt_mode(tab_ent));
|
||||||
|
return(TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
|
@ -56,6 +56,35 @@ static inline tg_sol_fr_ptr CUT_prune_tg_solution_frames(tg_sol_fr_ptr, int);
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************
|
||||||
|
** Tabling mode flags **
|
||||||
|
*********************************/
|
||||||
|
|
||||||
|
#define Flag_Batched 0x001
|
||||||
|
#define Flag_Local 0x002
|
||||||
|
#define Flags_SchedulingMode (Flag_Batched | Flag_Local)
|
||||||
|
#define Flag_ExecAnswers 0x010
|
||||||
|
#define Flag_LoadAnswers 0x020
|
||||||
|
#define Flags_AnswersMode (Flag_ExecAnswers | Flag_LoadAnswers)
|
||||||
|
#define Flag_LocalTrie 0x100
|
||||||
|
#define Flag_GlobalTrie 0x200
|
||||||
|
#define Flags_TrieMode (Flag_LocalTrie | Flag_GlobalTrie)
|
||||||
|
|
||||||
|
#define SetMode_Batched(X) (X) = ((X) & ~Flags_SchedulingMode) | Flag_Batched
|
||||||
|
#define SetMode_Local(X) (X) = ((X) & ~Flags_SchedulingMode) | Flag_Local
|
||||||
|
#define SetMode_ExecAnswers(X) (X) = ((X) & ~Flags_AnswersMode) | Flag_ExecAnswers
|
||||||
|
#define SetMode_LoadAnswers(X) (X) = ((X) & ~Flags_AnswersMode) | Flag_LoadAnswers
|
||||||
|
#define SetMode_LocalTrie(X) (X) = ((X) & ~Flags_TrieMode) | Flag_LocalTrie
|
||||||
|
#define SetMode_GlobalTrie(X) (X) = ((X) & ~Flags_TrieMode) | Flag_GlobalTrie
|
||||||
|
#define IsMode_Batched(X) ((X) & Flag_Batched)
|
||||||
|
#define IsMode_Local(X) ((X) & Flag_Local)
|
||||||
|
#define IsMode_ExecAnswers(X) ((X) & Flag_ExecAnswers)
|
||||||
|
#define IsMode_LoadAnswers(X) ((X) & Flag_LoadAnswers)
|
||||||
|
#define IsMode_LocalTrie(X) ((X) & Flag_LocalTrie)
|
||||||
|
#define IsMode_GlobalTrie(X) ((X) & Flag_GlobalTrie)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*********************
|
/*********************
|
||||||
** Macros **
|
** Macros **
|
||||||
*********************/
|
*********************/
|
||||||
@ -235,7 +264,17 @@ static inline tg_sol_fr_ptr CUT_prune_tg_solution_frames(tg_sol_fr_ptr, int);
|
|||||||
TabEnt_pe(TAB_ENT) = PRED_ENTRY; \
|
TabEnt_pe(TAB_ENT) = PRED_ENTRY; \
|
||||||
TabEnt_atom(TAB_ENT) = ATOM; \
|
TabEnt_atom(TAB_ENT) = ATOM; \
|
||||||
TabEnt_arity(TAB_ENT) = ARITY; \
|
TabEnt_arity(TAB_ENT) = ARITY; \
|
||||||
TabEnt_mode(TAB_ENT) = 0; \
|
TabEnt_flags(TAB_ENT) = 0; \
|
||||||
|
SetMode_Batched(TabEnt_flags(TAB_ENT)); \
|
||||||
|
SetMode_ExecAnswers(TabEnt_flags(TAB_ENT)); \
|
||||||
|
SetMode_LocalTrie(TabEnt_flags(TAB_ENT)); \
|
||||||
|
TabEnt_mode(TAB_ENT) = TabEnt_flags(TAB_ENT); \
|
||||||
|
if (IsMode_Local(yap_flags[TABLING_MODE_FLAG])) \
|
||||||
|
SetMode_Local(TabEnt_mode(TAB_ENT)); \
|
||||||
|
if (IsMode_LoadAnswers(yap_flags[TABLING_MODE_FLAG])) \
|
||||||
|
SetMode_LoadAnswers(TabEnt_mode(TAB_ENT)); \
|
||||||
|
if (IsMode_GlobalTrie(yap_flags[TABLING_MODE_FLAG])) \
|
||||||
|
SetMode_GlobalTrie(TabEnt_mode(TAB_ENT)); \
|
||||||
TabEnt_subgoal_trie(TAB_ENT) = sg_node; \
|
TabEnt_subgoal_trie(TAB_ENT) = sg_node; \
|
||||||
TabEnt_hash_chain(TAB_ENT) = NULL; \
|
TabEnt_hash_chain(TAB_ENT) = NULL; \
|
||||||
TabEnt_next(TAB_ENT) = GLOBAL_root_tab_ent; \
|
TabEnt_next(TAB_ENT) = GLOBAL_root_tab_ent; \
|
||||||
|
@ -11,58 +11,23 @@
|
|||||||
** **
|
** **
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
/*********************************
|
/************************************************************************
|
||||||
** Tabling mode flags **
|
** Table Space Data Structures **
|
||||||
*********************************/
|
************************************************************************/
|
||||||
|
|
||||||
#define Mode_SchedulingOn 0x00000001L /* yap_flags[TABLING_MODE_FLAG] */
|
/**************************
|
||||||
#define Mode_CompletedOn 0x00000002L /* yap_flags[TABLING_MODE_FLAG] */
|
** table_entry **
|
||||||
|
**************************/
|
||||||
#define Mode_Local 0x10000000L /* yap_flags[TABLING_MODE_FLAG] + struct table_entry */
|
|
||||||
#define Mode_LoadAnswers 0x20000000L /* yap_flags[TABLING_MODE_FLAG] + struct table_entry */
|
|
||||||
|
|
||||||
#define DefaultMode_Local 0x00000001L /* struct table_entry */
|
|
||||||
#define DefaultMode_LoadAnswers 0x00000002L /* struct table_entry */
|
|
||||||
|
|
||||||
#define SetMode_SchedulingOn(X) (X) |= Mode_SchedulingOn
|
|
||||||
#define SetMode_CompletedOn(X) (X) |= Mode_CompletedOn
|
|
||||||
#define IsMode_SchedulingOn(X) ((X) & Mode_SchedulingOn)
|
|
||||||
#define IsMode_SchedulingOff(X) (!IsMode_SchedulingOn(X))
|
|
||||||
#define IsMode_CompletedOn(X) ((X) & Mode_CompletedOn)
|
|
||||||
#define IsMode_CompletedOff(X) (!IsMode_CompletedOn(X))
|
|
||||||
|
|
||||||
#define SetMode_Local(X) (X) |= Mode_Local
|
|
||||||
#define SetMode_Batched(X) (X) &= ~Mode_Local
|
|
||||||
#define SetMode_LoadAnswers(X) (X) |= Mode_LoadAnswers
|
|
||||||
#define SetMode_ExecAnswers(X) (X) &= ~Mode_LoadAnswers
|
|
||||||
#define IsMode_Local(X) ((X) & Mode_Local)
|
|
||||||
#define IsMode_Batched(X) (!IsMode_Local(X))
|
|
||||||
#define IsMode_LoadAnswers(X) ((X) & Mode_LoadAnswers)
|
|
||||||
#define IsMode_ExecAnswers(X) (!IsMode_LoadAnswers(X))
|
|
||||||
|
|
||||||
#define SetDefaultMode_Local(X) (X) |= DefaultMode_Local
|
|
||||||
#define SetDefaultMode_Batched(X) (X) &= ~DefaultMode_Local
|
|
||||||
#define SetDefaultMode_LoadAnswers(X) (X) |= DefaultMode_LoadAnswers
|
|
||||||
#define SetDefaultMode_ExecAnswers(X) (X) &= ~DefaultMode_LoadAnswers
|
|
||||||
#define IsDefaultMode_Local(X) ((X) & DefaultMode_Local)
|
|
||||||
#define IsDefaultMode_Batched(X) (!IsDefaultMode_Local(X))
|
|
||||||
#define IsDefaultMode_LoadAnswers(X) ((X) & DefaultMode_LoadAnswers)
|
|
||||||
#define IsDefaultMode_ExecAnswers(X) (!IsDefaultMode_LoadAnswers(X))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************
|
|
||||||
** Struct table_entry **
|
|
||||||
*********************************/
|
|
||||||
|
|
||||||
typedef struct table_entry {
|
typedef struct table_entry {
|
||||||
#if defined(YAPOR) || defined(THREADS)
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
lockvar lock;
|
lockvar lock;
|
||||||
#endif /* YAPOR */
|
#endif /* YAPOR || THREADS */
|
||||||
struct pred_entry *pred_entry;
|
struct pred_entry *pred_entry;
|
||||||
Atom pred_atom;
|
Atom pred_atom;
|
||||||
int pred_arity;
|
int pred_arity;
|
||||||
int mode_flags;
|
short pred_flags;
|
||||||
|
short execution_mode; /* combines yap_flags with pred_flags */
|
||||||
struct subgoal_trie_node *subgoal_trie;
|
struct subgoal_trie_node *subgoal_trie;
|
||||||
struct subgoal_trie_hash *hash_chain;
|
struct subgoal_trie_hash *hash_chain;
|
||||||
struct table_entry *next;
|
struct table_entry *next;
|
||||||
@ -72,16 +37,17 @@ typedef struct table_entry {
|
|||||||
#define TabEnt_pe(X) ((X)->pred_entry)
|
#define TabEnt_pe(X) ((X)->pred_entry)
|
||||||
#define TabEnt_atom(X) ((X)->pred_atom)
|
#define TabEnt_atom(X) ((X)->pred_atom)
|
||||||
#define TabEnt_arity(X) ((X)->pred_arity)
|
#define TabEnt_arity(X) ((X)->pred_arity)
|
||||||
#define TabEnt_mode(X) ((X)->mode_flags)
|
#define TabEnt_flags(X) ((X)->pred_flags)
|
||||||
|
#define TabEnt_mode(X) ((X)->execution_mode)
|
||||||
#define TabEnt_subgoal_trie(X) ((X)->subgoal_trie)
|
#define TabEnt_subgoal_trie(X) ((X)->subgoal_trie)
|
||||||
#define TabEnt_hash_chain(X) ((X)->hash_chain)
|
#define TabEnt_hash_chain(X) ((X)->hash_chain)
|
||||||
#define TabEnt_next(X) ((X)->next)
|
#define TabEnt_next(X) ((X)->next)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/***********************************************************************
|
||||||
** Structs global_trie_node, subgoal_trie_node and answer_trie_node **
|
** global_trie_node, subgoal_trie_node and answer_trie_node **
|
||||||
*******************************************************************************/
|
***********************************************************************/
|
||||||
|
|
||||||
#ifdef GLOBAL_TRIE
|
#ifdef GLOBAL_TRIE
|
||||||
typedef struct global_trie_node {
|
typedef struct global_trie_node {
|
||||||
@ -127,9 +93,9 @@ typedef struct answer_trie_node {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/***********************************************************************
|
||||||
** Structs global_trie_hash, subgoal_trie_hash and answer_trie_hash **
|
** global_trie_hash, subgoal_trie_hash and answer_trie_hash **
|
||||||
*******************************************************************************/
|
***********************************************************************/
|
||||||
|
|
||||||
#ifdef GLOBAL_TRIE
|
#ifdef GLOBAL_TRIE
|
||||||
typedef struct global_trie_hash {
|
typedef struct global_trie_hash {
|
||||||
@ -172,9 +138,54 @@ typedef struct answer_trie_hash {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************
|
/************************************************************************
|
||||||
** Struct subgoal_frame **
|
** Execution Data Structures **
|
||||||
***********************************/
|
************************************************************************/
|
||||||
|
|
||||||
|
/****************************
|
||||||
|
** choice points **
|
||||||
|
****************************/
|
||||||
|
|
||||||
|
struct generator_choicept {
|
||||||
|
struct choicept cp;
|
||||||
|
struct dependency_frame *cp_dep_fr; /* always NULL if batched scheduling */
|
||||||
|
struct subgoal_frame *cp_sg_fr;
|
||||||
|
#ifdef LOW_LEVEL_TRACER
|
||||||
|
struct pred_entry *cp_pred_entry;
|
||||||
|
#endif /* LOW_LEVEL_TRACER */
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef DETERMINISTIC_TABLING
|
||||||
|
struct deterministic_generator_choicept {
|
||||||
|
struct deterministic_choicept cp;
|
||||||
|
struct subgoal_frame *cp_sg_fr;
|
||||||
|
#ifdef LOW_LEVEL_TRACER
|
||||||
|
struct pred_entry *cp_pred_entry;
|
||||||
|
#endif /* LOW_LEVEL_TRACER */
|
||||||
|
};
|
||||||
|
#endif /* DETERMINISTIC_TABLING */
|
||||||
|
|
||||||
|
struct consumer_choicept {
|
||||||
|
struct choicept cp;
|
||||||
|
struct dependency_frame *cp_dep_fr;
|
||||||
|
#ifdef LOW_LEVEL_TRACER
|
||||||
|
struct pred_entry *cp_pred_entry;
|
||||||
|
#endif /* LOW_LEVEL_TRACER */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct loader_choicept {
|
||||||
|
struct choicept cp;
|
||||||
|
struct answer_trie_node *cp_last_answer;
|
||||||
|
#ifdef LOW_LEVEL_TRACER
|
||||||
|
struct pred_entry *cp_pred_entry;
|
||||||
|
#endif /* LOW_LEVEL_TRACER */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****************************
|
||||||
|
** subgoal_frame **
|
||||||
|
****************************/
|
||||||
|
|
||||||
typedef struct subgoal_frame {
|
typedef struct subgoal_frame {
|
||||||
#if defined(YAPOR) || defined(THREADS)
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
@ -185,7 +196,7 @@ typedef struct subgoal_frame {
|
|||||||
struct or_frame *top_or_frame_on_generator_branch;
|
struct or_frame *top_or_frame_on_generator_branch;
|
||||||
#endif /* YAPOR */
|
#endif /* YAPOR */
|
||||||
yamop *code_of_subgoal;
|
yamop *code_of_subgoal;
|
||||||
enum {
|
enum { /* do not change order !!! */
|
||||||
incomplete = 0, /* INCOMPLETE_TABLING */
|
incomplete = 0, /* INCOMPLETE_TABLING */
|
||||||
ready = 1,
|
ready = 1,
|
||||||
evaluating = 2,
|
evaluating = 2,
|
||||||
@ -193,7 +204,7 @@ typedef struct subgoal_frame {
|
|||||||
complete_in_use = 4, /* LIMIT_TABLING */
|
complete_in_use = 4, /* LIMIT_TABLING */
|
||||||
compiled = 5,
|
compiled = 5,
|
||||||
compiled_in_use = 6 /* LIMIT_TABLING */
|
compiled_in_use = 6 /* LIMIT_TABLING */
|
||||||
} state_flag; /* do not change order !!! */
|
} state_flag;
|
||||||
choiceptr generator_choice_point;
|
choiceptr generator_choice_point;
|
||||||
struct answer_trie_hash *hash_chain;
|
struct answer_trie_hash *hash_chain;
|
||||||
struct answer_trie_node *answer_trie;
|
struct answer_trie_node *answer_trie;
|
||||||
@ -252,14 +263,14 @@ typedef struct subgoal_frame {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************
|
/*******************************
|
||||||
** Struct dependency_frame **
|
** dependency_frame **
|
||||||
**************************************/
|
*******************************/
|
||||||
|
|
||||||
typedef struct dependency_frame {
|
typedef struct dependency_frame {
|
||||||
#if defined(YAPOR) || defined(THREADS)
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
lockvar lock;
|
lockvar lock;
|
||||||
#endif
|
#endif /* YAPOR || THREADS */
|
||||||
#ifdef YAPOR
|
#ifdef YAPOR
|
||||||
int leader_dependency_is_on_stack;
|
int leader_dependency_is_on_stack;
|
||||||
struct or_frame *top_or_frame;
|
struct or_frame *top_or_frame;
|
||||||
@ -307,9 +318,9 @@ typedef struct dependency_frame {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************
|
/*******************************
|
||||||
** Struct suspension_frame **
|
** suspension_frame **
|
||||||
**************************************/
|
*******************************/
|
||||||
|
|
||||||
#ifdef YAPOR
|
#ifdef YAPOR
|
||||||
typedef struct suspension_frame {
|
typedef struct suspension_frame {
|
||||||
@ -338,44 +349,3 @@ typedef struct suspension_frame {
|
|||||||
#define SuspFr_trail_start(X) ((X)->trail_block.block_start)
|
#define SuspFr_trail_start(X) ((X)->trail_block.block_start)
|
||||||
#define SuspFr_trail_size(X) ((X)->trail_block.block_size)
|
#define SuspFr_trail_size(X) ((X)->trail_block.block_size)
|
||||||
#define SuspFr_next(X) ((X)->next)
|
#define SuspFr_next(X) ((X)->next)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/************************************
|
|
||||||
** Structs choice points **
|
|
||||||
************************************/
|
|
||||||
|
|
||||||
struct generator_choicept {
|
|
||||||
struct choicept cp;
|
|
||||||
struct dependency_frame *cp_dep_fr; /* always NULL if batched scheduling */
|
|
||||||
struct subgoal_frame *cp_sg_fr;
|
|
||||||
#ifdef LOW_LEVEL_TRACER
|
|
||||||
struct pred_entry *cp_pred_entry;
|
|
||||||
#endif /* LOW_LEVEL_TRACER */
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef DETERMINISTIC_TABLING
|
|
||||||
struct deterministic_generator_choicept {
|
|
||||||
struct deterministic_choicept cp;
|
|
||||||
struct subgoal_frame *cp_sg_fr;
|
|
||||||
#ifdef LOW_LEVEL_TRACER
|
|
||||||
struct pred_entry *cp_pred_entry;
|
|
||||||
#endif /* LOW_LEVEL_TRACER */
|
|
||||||
};
|
|
||||||
#endif /* DETERMINISTIC_TABLING */
|
|
||||||
|
|
||||||
struct consumer_choicept {
|
|
||||||
struct choicept cp;
|
|
||||||
struct dependency_frame *cp_dep_fr;
|
|
||||||
#ifdef LOW_LEVEL_TRACER
|
|
||||||
struct pred_entry *cp_pred_entry;
|
|
||||||
#endif /* LOW_LEVEL_TRACER */
|
|
||||||
};
|
|
||||||
|
|
||||||
struct loader_choicept {
|
|
||||||
struct choicept cp;
|
|
||||||
struct answer_trie_node *cp_last_answer;
|
|
||||||
#ifdef LOW_LEVEL_TRACER
|
|
||||||
struct pred_entry *cp_pred_entry;
|
|
||||||
#endif /* LOW_LEVEL_TRACER */
|
|
||||||
};
|
|
||||||
|
@ -123,7 +123,8 @@ A GcVeryVerbose F "$gc_very_verbose"
|
|||||||
A GeneratePredInfo F "$generate_pred_info"
|
A GeneratePredInfo F "$generate_pred_info"
|
||||||
A Getwork F "$getwork"
|
A Getwork F "$getwork"
|
||||||
A GetworkSeq F "$getwork_seq"
|
A GetworkSeq F "$getwork_seq"
|
||||||
A Global N "global_sp"
|
A GlobalSp N "global_sp"
|
||||||
|
A GlobalTrie N "global_trie"
|
||||||
A GoalExpansion N "goal_expansion"
|
A GoalExpansion N "goal_expansion"
|
||||||
A HERE N "\n <====HERE====> \n"
|
A HERE N "\n <====HERE====> \n"
|
||||||
A HandleThrow F "$handle_throw"
|
A HandleThrow F "$handle_throw"
|
||||||
@ -151,8 +152,9 @@ A Leash F "$leash"
|
|||||||
A List N "list"
|
A List N "list"
|
||||||
A Live F "$live"
|
A Live F "$live"
|
||||||
A LoadAnswers N "load_answers"
|
A LoadAnswers N "load_answers"
|
||||||
A Local N "local_sp"
|
A Local N "local"
|
||||||
A LocalA N "local"
|
A LocalSp N "local_sp"
|
||||||
|
A LocalTrie N "local_trie"
|
||||||
A MaxArity N "max_arity"
|
A MaxArity N "max_arity"
|
||||||
A MaxFiles N "max_files"
|
A MaxFiles N "max_files"
|
||||||
A MegaClause F "$mega_clause"
|
A MegaClause F "$mega_clause"
|
||||||
|
24
pl/flags.yap
24
pl/flags.yap
@ -190,25 +190,25 @@ yap_flag(home,X) :-
|
|||||||
yap_flag(tabling_mode,Options) :-
|
yap_flag(tabling_mode,Options) :-
|
||||||
var(Options), !,
|
var(Options), !,
|
||||||
'$access_yap_flags'(20,Options).
|
'$access_yap_flags'(20,Options).
|
||||||
yap_flag(tabling_mode,[]) :- !.
|
yap_flag(tabling_mode,[]) :- !,
|
||||||
|
yap_flag(tabling_mode,default).
|
||||||
yap_flag(tabling_mode,[HOption|TOption]) :- !,
|
yap_flag(tabling_mode,[HOption|TOption]) :- !,
|
||||||
yap_flag(tabling_mode,HOption),
|
yap_flag(tabling_mode,TOption),
|
||||||
yap_flag(tabling_mode,TOption).
|
yap_flag(tabling_mode,HOption).
|
||||||
yap_flag(tabling_mode,(Option1,Option2)) :- !,
|
|
||||||
yap_flag(tabling_mode,Option1),
|
|
||||||
yap_flag(tabling_mode,Option2).
|
|
||||||
yap_flag(tabling_mode,Option) :-
|
yap_flag(tabling_mode,Option) :-
|
||||||
'$transl_to_tabling_mode'(Flag,Option),
|
'$transl_to_yap_flag_tabling_mode'(Flag,Option), !,
|
||||||
'$set_yap_flags'(20,Flag).
|
'$set_yap_flags'(20,Flag).
|
||||||
yap_flag(tabling_mode,Options) :-
|
yap_flag(tabling_mode,Options) :-
|
||||||
'$do_error'(domain_error(flag_value,tabling_mode+Options),yap_flag(tabling_mode,Options)).
|
'$do_error'(domain_error(flag_value,tabling_mode+Options),yap_flag(tabling_mode,Options)).
|
||||||
|
|
||||||
% should match with code in stdpreds.c
|
% should match with code in stdpreds.c
|
||||||
'$transl_to_tabling_mode'(0,default).
|
'$transl_to_yap_flag_tabling_mode'(0,default).
|
||||||
'$transl_to_tabling_mode'(1,batched).
|
'$transl_to_yap_flag_tabling_mode'(1,batched).
|
||||||
'$transl_to_tabling_mode'(2,local).
|
'$transl_to_yap_flag_tabling_mode'(2,local).
|
||||||
'$transl_to_tabling_mode'(3,exec_answers).
|
'$transl_to_yap_flag_tabling_mode'(3,exec_answers).
|
||||||
'$transl_to_tabling_mode'(4,load_answers).
|
'$transl_to_yap_flag_tabling_mode'(4,load_answers).
|
||||||
|
'$transl_to_yap_flag_tabling_mode'(5,local_trie).
|
||||||
|
'$transl_to_yap_flag_tabling_mode'(6,global_trie).
|
||||||
|
|
||||||
yap_flag(informational_messages,X) :- var(X), !,
|
yap_flag(informational_messages,X) :- var(X), !,
|
||||||
get_value('$verbose',X).
|
get_value('$verbose',X).
|
||||||
|
@ -120,9 +120,12 @@ tabling_mode(Pred,Options) :-
|
|||||||
integer(PredArity),
|
integer(PredArity),
|
||||||
functor(PredFunctor,PredName,PredArity),
|
functor(PredFunctor,PredName,PredArity),
|
||||||
'$flags'(PredFunctor,Mod,Flags,Flags), !,
|
'$flags'(PredFunctor,Mod,Flags,Flags), !,
|
||||||
(Flags /\ 0x000040 =\= 0, !, '$set_tabling_mode'(Mod,PredFunctor,Options)
|
(
|
||||||
|
Flags /\ 0x000040 =\= 0, !, '$set_tabling_mode'(Mod,PredFunctor,Options)
|
||||||
;
|
;
|
||||||
'$do_error'(domain_error(table,Mod:PredName/PredArity),tabling_mode(Mod:PredName/PredArity,Options))).
|
write(icardioi),nl,
|
||||||
|
'$do_error'(domain_error(table,Mod:PredName/PredArity),tabling_mode(Mod:PredName/PredArity,Options))
|
||||||
|
).
|
||||||
'$do_tabling_mode'(Mod,Pred,Options) :-
|
'$do_tabling_mode'(Mod,Pred,Options) :-
|
||||||
'$do_error'(type_error(callable,Mod:Pred),tabling_mode(Mod:Pred,Options)).
|
'$do_error'(type_error(callable,Mod:Pred),tabling_mode(Mod:Pred,Options)).
|
||||||
|
|
||||||
@ -137,12 +140,20 @@ tabling_mode(Pred,Options) :-
|
|||||||
'$set_tabling_mode'(Mod,PredFunctor,Option1),
|
'$set_tabling_mode'(Mod,PredFunctor,Option1),
|
||||||
'$set_tabling_mode'(Mod,PredFunctor,Option2).
|
'$set_tabling_mode'(Mod,PredFunctor,Option2).
|
||||||
'$set_tabling_mode'(Mod,PredFunctor,Option) :-
|
'$set_tabling_mode'(Mod,PredFunctor,Option) :-
|
||||||
(Option = batched ; Option = local ; Option = exec_answers ; Option = load_answers), !,
|
'$transl_to_pred_flag_tabling_mode'(Flag,Option), !,
|
||||||
'$c_tabling_mode'(Mod,PredFunctor,Option).
|
'$c_tabling_mode'(Mod,PredFunctor,Flag).
|
||||||
'$set_tabling_mode'(Mod,PredFunctor,Options) :-
|
'$set_tabling_mode'(Mod,PredFunctor,Options) :-
|
||||||
functor(PredFunctor,PredName,PredArity),
|
functor(PredFunctor,PredName,PredArity),
|
||||||
'$do_error'(domain_error(flag_value,tabling_mode+Options),tabling_mode(Mod:PredName/PredArity,Options)).
|
'$do_error'(domain_error(flag_value,tabling_mode+Options),tabling_mode(Mod:PredName/PredArity,Options)).
|
||||||
|
|
||||||
|
% should match with code in OPTYap/opt.preds.c
|
||||||
|
'$transl_to_pred_flag_tabling_mode'(1,batched).
|
||||||
|
'$transl_to_pred_flag_tabling_mode'(2,local).
|
||||||
|
'$transl_to_pred_flag_tabling_mode'(3,exec_answers).
|
||||||
|
'$transl_to_pred_flag_tabling_mode'(4,load_answers).
|
||||||
|
'$transl_to_pred_flag_tabling_mode'(5,local_trie).
|
||||||
|
'$transl_to_pred_flag_tabling_mode'(6,global_trie).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**************************
|
/**************************
|
||||||
@ -170,9 +181,11 @@ abolish_table(Pred) :-
|
|||||||
integer(PredArity),
|
integer(PredArity),
|
||||||
functor(PredFunctor,PredName,PredArity),
|
functor(PredFunctor,PredName,PredArity),
|
||||||
'$flags'(PredFunctor,Mod,Flags,Flags), !,
|
'$flags'(PredFunctor,Mod,Flags,Flags), !,
|
||||||
(Flags /\ 0x000040 =\= 0, !, '$c_abolish_table'(Mod,PredFunctor)
|
(
|
||||||
|
Flags /\ 0x000040 =\= 0, !, '$c_abolish_table'(Mod,PredFunctor)
|
||||||
;
|
;
|
||||||
'$do_error'(domain_error(table,Mod:PredName/PredArity),abolish_table(Mod:PredName/PredArity))).
|
'$do_error'(domain_error(table,Mod:PredName/PredArity),abolish_table(Mod:PredName/PredArity))
|
||||||
|
).
|
||||||
'$do_abolish_table'(Mod,Pred) :-
|
'$do_abolish_table'(Mod,Pred) :-
|
||||||
'$do_error'(type_error(callable,Mod:Pred),abolish_table(Mod:Pred)).
|
'$do_error'(type_error(callable,Mod:Pred),abolish_table(Mod:Pred)).
|
||||||
|
|
||||||
@ -203,9 +216,11 @@ show_table(Pred) :-
|
|||||||
integer(PredArity),
|
integer(PredArity),
|
||||||
functor(PredFunctor,PredName,PredArity),
|
functor(PredFunctor,PredName,PredArity),
|
||||||
'$flags'(PredFunctor,Mod,Flags,Flags), !,
|
'$flags'(PredFunctor,Mod,Flags,Flags), !,
|
||||||
(Flags /\ 0x000040 =\= 0, !, '$c_show_table'(Mod,PredFunctor)
|
(
|
||||||
|
Flags /\ 0x000040 =\= 0, !, '$c_show_table'(Mod,PredFunctor)
|
||||||
;
|
;
|
||||||
'$do_error'(domain_error(table,Mod:PredName/PredArity),show_table(Mod:PredName/PredArity))).
|
'$do_error'(domain_error(table,Mod:PredName/PredArity),show_table(Mod:PredName/PredArity))
|
||||||
|
).
|
||||||
'$do_show_table'(Mod,Pred) :-
|
'$do_show_table'(Mod,Pred) :-
|
||||||
'$do_error'(type_error(callable,Mod:Pred),show_table(Mod:Pred)).
|
'$do_error'(type_error(callable,Mod:Pred),show_table(Mod:Pred)).
|
||||||
|
|
||||||
@ -236,8 +251,10 @@ table_statistics(Pred) :-
|
|||||||
integer(PredArity),
|
integer(PredArity),
|
||||||
functor(PredFunctor,PredName,PredArity),
|
functor(PredFunctor,PredName,PredArity),
|
||||||
'$flags'(PredFunctor,Mod,Flags,Flags), !,
|
'$flags'(PredFunctor,Mod,Flags,Flags), !,
|
||||||
(Flags /\ 0x000040 =\= 0, !, '$c_table_statistics'(Mod,PredFunctor)
|
(
|
||||||
|
Flags /\ 0x000040 =\= 0, !, '$c_table_statistics'(Mod,PredFunctor)
|
||||||
;
|
;
|
||||||
'$do_error'(domain_error(table,Mod:PredName/PredArity),table_statistics(Mod:PredName/PredArity))).
|
'$do_error'(domain_error(table,Mod:PredName/PredArity),table_statistics(Mod:PredName/PredArity))
|
||||||
|
).
|
||||||
'$do_table_statistics'(Mod,Pred) :-
|
'$do_table_statistics'(Mod,Pred) :-
|
||||||
'$do_error'(type_error(callable,Mod:Pred),table_statistics(Mod:Pred)).
|
'$do_error'(type_error(callable,Mod:Pred),table_statistics(Mod:Pred)).
|
||||||
|
Reference in New Issue
Block a user