#include "xsb_config.h"#include "xsb_debug.h"#include "debugs/debug_tries.h"#include <stdio.h>#include <stdlib.h>#include "auxlry.h"#include "cell_xsb.h"#include "error_xsb.h"#include "psc_xsb.h"#include "deref.h"#include "table_stats.h"#include "trie_internals.h"#include "tst_aux.h"#include "subp.h"#include "debug_xsb.h"#include "flags_xsb.h"#include "context.h"#include "memory_xsb.h"Defines | |
| #define | ContStack_ExpandOnOverflow(Stack, StackSize, NeededSize) |
| #define | CPF_AlternateNode ((tstCCPStack.top)->alt_node) |
| #define | CPF_VariableChain ((tstCCPStack.top)->var_chain) |
| #define | CPF_TermStackTopIndex ((tstCCPStack.top)->termstk_top_index) |
| #define | CPF_TermStackLogTopIndex ((tstCCPStack.top)->log_top_index) |
| #define | CPF_TrailTopIndex ((tstCCPStack.top)->trail_top_index) |
| #define | CPStack_ResetTOS tstCCPStack.top = tstCCPStack.base |
| #define | CPStack_IsEmpty (tstCCPStack.top == tstCCPStack.base) |
| #define | CPStack_IsFull (tstCCPStack.top == tstCCPStack.ceiling) |
| #define | CPStack_OverflowCheck |
| #define | CPStack_PushFrame(AltNode, VarChain) |
| #define | CPStack_PopFrame(CurNode, VarChain) |
| #define | Conditionally_Create_ChoicePoint(VariableChain) |
| #define | Create_ChoicePoint(AlternateBTN, VariableChain) CPStack_PushFrame(AlternateBTN,VariableChain) |
| #define | BacktrackSearch |
| #define | SubsumptiveTrieLookupError(String) sub_trie_lookup_error(CTXTc String) |
| #define | TrieVar_BindToSubterm(TrieVarNum, Subterm) |
| #define | TrieVar_BindToMarkedPrologVar(TrieVarNum, PrologVarMarker) |
| #define | PrologVar_MarkIt(DerefedVar, Index) |
| #define | PrologVar_IsMarked(pDerefedPrologVar) IsStandardizedVariable(pDerefedPrologVar) |
| #define | PrologVar_Index(VarEnumAddr) IndexOfStdVar(VarEnumAddr) |
| #define | Set_Matching_and_TrieVar_Chains(Symbol, MatchChain, VarChain) |
| #define | SetNoVariant(LastNodeMatched) |
| #define | NonVarSearchChain_ExactMatch(Symbol, MatchChain, VariableChain, TermStack_PushOp) |
| #define | NonVarSearchChain_BoundTrievar(Subterm, CurNODE, VarChain) |
| #define | NonVarSearchChain_UnboundTrievar(Subterm, VarChain) |
| #define | Descend_In_Trie_and_Continue(PairedBTN) |
Typedefs | |
| typedef enum Search_Strategy_Mode | SearchMode |
Enumerations | |
| enum | Search_Strategy_Mode { MATCH_SYMBOL_EXACTLY, MATCH_WITH_TRIEVAR } |
Functions | |
| static xsbBool | save_variant_continuation (CTXTdeclc BTNptr last_node_match) |
| void * | stl_restore_variant_cont (CTXTdecl) |
| void | initSubsumptiveLookup (CTXTdecl) |
| static void | sub_trie_lookup_error (CTXTdeclc char *string) |
| void * | iter_sub_trie_lookup (CTXTdeclc void *trieNode, TriePathType *pathType) |
| void * | var_trie_lookup (CTXTdeclc void *branchRoot, xsbBool *wasFound, Cell *failedSymbol) |
| void * | variant_trie_lookup (CTXTdeclc void *trieRoot, int nTerms, CPtr termVector, Cell varArray[]) |
| static BTNptr | rec_sub_trie_lookup (CTXTdeclc BTNptr parent, TriePathType *pathType) |
| void * | subsumptive_trie_lookup (CTXTdeclc void *trieRoot, int nTerms, CPtr termVector, TriePathType *path_type, Cell subtermArray[]) |
Variables | |
| static struct VariantContinuation | variant_cont |
| static struct tstCCPStack_t | tstCCPStack |
|
|
Value: { \
CPStack_PopFrame(pCurrentBTN,variableChain); \
search_mode = MATCH_WITH_TRIEVAR; \
}
|
|
|
Value: { \
BTNptr alternateBTN = VariableChain; \
\
while ( IsNonNULL(alternateBTN) ) { \
if ( IsTrieVar(BTN_Symbol(alternateBTN)) ) { \
CPStack_PushFrame(alternateBTN, VariableChain) \
break; \
} \
alternateBTN = BTN_Sibling(alternateBTN); \
} \
}
|
|
|
Value: { \
\
size_t new_size; /* in number of stack elements */ \
void *p; \
\
if ( StackSize < NeededSize ) { \
new_size = 2 * StackSize; \
if ( new_size < NeededSize ) \
new_size = new_size + NeededSize; \
p = realloc(Stack,(new_size * sizeof(Stack[0]))); \
if ( IsNULL(p) ) \
return FALSE; \
Stack = p; \
StackSize = new_size; \
} \
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Value: if (CPStack_IsFull) \ SubsumptiveTrieLookupError("tstCCPStack overflow!") |
|
|
Value: { \
tstCCPStack.top--; \
CurNode = CPF_AlternateNode; \
VarChain = CPF_VariableChain; \
TermStackLog_Unwind(CPF_TermStackLogTopIndex); \
TermStack_SetTOS(CPF_TermStackTopIndex); \
Trail_Unwind(CPF_TrailTopIndex); \
}
|
|
|
Value: { \
CPStack_OverflowCheck; \
CPF_AlternateNode = AltNode; \
CPF_VariableChain = VarChain; \
CPF_TermStackTopIndex = \
TermStack_Top - TermStack_Base + 1; \
CPF_TermStackLogTopIndex = \
TermStackLog_Top - TermStackLog_Base - 1; \
CPF_TrailTopIndex = Trail_Top - Trail_Base; \
tstCCPStack.top++; \
}
|
|
|
|
|
|
|
|
|
Value: pParentBTN = PairedBTN; \ pCurrentBTN = BTN_Child(PairedBTN); \ search_mode = MATCH_SYMBOL_EXACTLY; \ goto While_TermStack_NotEmpty |
|
|
Value: { \
\
int trievar_index; \
\
while ( IsNonNULL(CurNODE) ) { \
if ( IsTrieVar(BTN_Symbol(CurNODE)) && \
! IsNewTrieVar(BTN_Symbol(CurNODE)) ) { \
trievar_index = DecodeTrieVar(BTN_Symbol(CurNODE)); \
if ( are_identical_terms(TrieVarBindings[trievar_index], \
Subterm) ) { \
Create_ChoicePoint(BTN_Sibling(CurNODE),VarChain) \
Descend_In_Trie_and_Continue(CurNODE); \
} \
} \
CurNODE = BTN_Sibling(CurNODE); \
} \
}
|
|
|
Value: \ while ( IsNonNULL(MatchChain) ) { \ if (Symbol == BTN_Symbol(MatchChain)) { \ Conditionally_Create_ChoicePoint(VariableChain) \ TermStack_PushOp \ Descend_In_Trie_and_Continue(MatchChain); \ } \ MatchChain = BTN_Sibling(MatchChain); \ } |
|
|
Value: { \
\
int trievar_index; \
\
while ( IsNonNULL(VarChain) ) { \
if ( IsTrieVar(BTN_Symbol(VarChain)) && \
IsNewTrieVar(BTN_Symbol(VarChain)) ) { \
trievar_index = DecodeTrieVar(BTN_Symbol(VarChain)); \
TrieVar_BindToSubterm(trievar_index,Subterm); \
Descend_In_Trie_and_Continue(VarChain); \
} \
VarChain = BTN_Sibling(VarChain); \
} \
}
|
|
|
|
|
|
|
|
|
Value: StandardizeVariable(DerefedVar,Index); \ Trail_Push((CPtr)DerefedVar) |
|
|
Value: if ( IsNonNULL(pCurrentBTN) && IsHashHeader(pCurrentBTN) ) { \ BTNptr *buckets; \ BTHTptr pBTHT; \ \ pBTHT = (BTHTptr)pCurrentBTN; \ buckets = BTHT_BucketArray(pBTHT); \ MatchChain = buckets[TrieHash(Symbol,BTHT_GetHashSeed(pBTHT))]; \ VarChain = buckets[TRIEVAR_BUCKET]; \ } \ else /* simple chain of nodes */ \ VarChain = MatchChain = pCurrentBTN |
|
|
Value: if (variant_path == YES) { \ if ( ! save_variant_continuation(CTXTc LastNodeMatched) ) \ SubsumptiveTrieLookupError("Memory exhausted."); \ variant_path = NO; \ } |
|
|
|
|
|
Value: TrieVarBindings[TrieVarNum] = \ TrieVarBindings[PrologVar_Index(PrologVarMarker)]; \ Trail_Push(&TrieVarBindings[TrieVarNum]) |
|
|
Value: TrieVarBindings[TrieVarNum] = Subterm; \ Trail_Push(&TrieVarBindings[TrieVarNum]) |
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||
|
|
|
||||||||||||||||
|
|
|
||||||||||||||||||||
|
|
|
|
|
|
|
|
1.4.5