tst_retrv.c File Reference

#include "xsb_config.h"
#include "xsb_debug.h"
#include <stdio.h>
#include <stdlib.h>
#include "auxlry.h"
#include "cell_xsb.h"
#include "inst_xsb.h"
#include "register.h"
#include "memory_xsb.h"
#include "error_xsb.h"
#include "psc_xsb.h"
#include "deref.h"
#include "binding.h"
#include "cut_xsb.h"
#include "sw_envs.h"
#include "subp.h"
#include "table_stats.h"
#include "trie_internals.h"
#include "macro_xsb.h"
#include "tst_aux.h"
#include "tst_utils.h"
#include "debug_xsb.h"
#include "flags_xsb.h"
#include "thread_xsb.h"

Defines

#define Save_and_Set_WAM_Registers
#define Restore_WAM_Registers
#define Trie_bind_copy(Addr, Val)
#define Trie_Conditionally_Trail(Addr, Val)
#define Bind_and_Conditionally_Trail(Addr, Val)   Trie_bind_copy(Addr,Val) \
#define Bind_and_Trail(Addr, Val)
#define Sys_Trail_Unwind(UnwindBase)   table_undo_bindings(UnwindBase)
#define tstCPF_AlternateNode   ((tstCPStack.top)->alt_node)
#define tstCPF_TermStackTopIndex   ((tstCPStack.top)->ts_top_index)
#define tstCPF_TSLogTopIndex   ((tstCPStack.top)->log_top_index)
#define tstCPF_TrailTop   ((tstCPStack.top)->trail_top)
#define tstCPF_HBreg   ((tstCPStack.top)->heap_bktrk)
#define CPStack_IsEmpty   (tstCPStack.top == tstCPStack.base)
#define CPStack_IsFull   (tstCPStack.top == tstCPStack.ceiling)
#define CPStack_PushFrame(AlternateTSTN)
#define CPStack_Pop   tstCPStack.top--
#define TST_Backtrack
#define Descend_Into_TST_and_Continue_Search
#define ResetParentAndCurrentNodes
#define RestoreTermStack
#define ResetHeap_fromCPF
#define CPStack_OverflowCheck
#define IsValidTS(SymbolTS, CutoffTS)   (SymbolTS > CutoffTS)
#define ALN_InsertAnswer(pAnsListHead, pAnswerNode)
#define RequiresCleanup   TRUE
#define NoCleanupRequired   FALSE
#define TST_Collection_Error(String, DoesRequireCleanup)
#define backtrack   break
#define Chain_NextValidTSTN(Chain, TS, tsAccessMacro)
#define TSI_NextValidTSTN(ValidTSIN, TS)
#define SetMatchAndUnifyChains(Symbol, SymChain, VarChain)
#define SearchChain_ExactMatch(SearchChain, TrieEncodedSubterm, TS, ContChain, TermStack_PushOp)
#define SearchChain_UnifyWithConstant(Chain, Subterm, TS, Get_TS_Op)
#define SearchChain_UnifyWithFunctor(Chain, Subterm, TS, Get_TS_Op)
#define SearchChain_UnifyWithList(Chain, Subterm, TS, Get_TS_Op)
#define CurrentTSTN_UnifyWithVariable(Chain, Subterm, Continuation)

Functions

void initCollectRelevantAnswers (CTXTdecl)
static void tstCollectionError (CTXTdeclc char *string, xsbBool cleanup_needed)
ALNptr tst_collect_relevant_answers (CTXTdeclc TSTNptr tstRoot, TimeStamp ts, int numTerms, CPtr termsRev)

Variables

static CPtrtrail_base
static CPtrorig_trreg
static CPtr orig_hreg
static CPtr orig_hbreg
static CPtr orig_ebreg
static struct tstCPStack_t tstCPStack

Define Documentation

#define ALN_InsertAnswer pAnsListHead,
pAnswerNode   ) 
 

Value:

{                       \
    ALNptr newAnsListNode;                                              \
    New_Private_ALN(newAnsListNode,(void *)pAnswerNode,pAnsListHead);   \
    pAnsListHead = newAnsListNode;                                      \
  }

#define backtrack   break
 

#define Bind_and_Conditionally_Trail Addr,
Val   )     Trie_bind_copy(Addr,Val) \
 

#define Bind_and_Trail Addr,
Val   ) 
 

Value:

pushtrail0(Addr, Val)   \
  *(Addr) = Val

#define Chain_NextValidTSTN Chain,
TS,
tsAccessMacro   ) 
 

Value:

while ( IsNonNULL(Chain) && (! IsValidTS(tsAccessMacro(Chain),TS)) )    \
     Chain = TSTN_Sibling(Chain)

#define CPStack_IsEmpty   (tstCPStack.top == tstCPStack.base)
 

#define CPStack_IsFull   (tstCPStack.top == tstCPStack.ceiling)
 

#define CPStack_OverflowCheck
 

Value:

if (CPStack_IsFull)                                                     \
     TST_Collection_Error("tstCPStack overflow.", RequiresCleanup)

#define CPStack_Pop   tstCPStack.top--
 

#define CPStack_PushFrame AlternateTSTN   ) 
 

Value:

#define CurrentTSTN_UnifyWithVariable Chain,
Subterm,
Continuation   ) 
 

#define Descend_Into_TST_and_Continue_Search
 

Value:

parentTSTN = cur_chain;                 \
   cur_chain = TSTN_Child(cur_chain);           \
   goto While_TSnotEmpty

#define IsValidTS SymbolTS,
CutoffTS   )     (SymbolTS > CutoffTS)
 

#define NoCleanupRequired   FALSE
 

#define RequiresCleanup   TRUE
 

#define ResetHeap_fromCPF
 

Value:

#define ResetParentAndCurrentNodes
 

Value:

cur_chain = tstCPF_AlternateNode;               \
   parentTSTN = TSTN_Parent(cur_chain)

#define Restore_WAM_Registers
 

Value:

#define RestoreTermStack
 

Value:

#define Save_and_Set_WAM_Registers
 

Value:

#define SearchChain_ExactMatch SearchChain,
TrieEncodedSubterm,
TS,
ContChain,
TermStack_PushOp   ) 
 

Value:

while ( IsNonNULL(SearchChain) ) {                                      \
     if ( TrieEncodedSubterm == TSTN_Symbol(SearchChain) ) {            \
       if ( IsValidTS(TSTN_GetTSfromTSIN(SearchChain),TS) ) {           \
         Chain_NextValidTSTN(ContChain,TS,TSTN_GetTSfromTSIN);          \
         CPStack_PushFrame(ContChain);                                  \
         TermStackLog_PushFrame;                                        \
         TermStack_PushOp;                                              \
         Descend_Into_TST_and_Continue_Search;                          \
       }                                                                \
       else                                                             \
         break;   /* matching symbol's TS is too old */                 \
     }                                                                  \
     SearchChain = TSTN_Sibling(SearchChain);                           \
   }

#define SearchChain_UnifyWithConstant Chain,
Subterm,
TS,
Get_TS_Op   ) 
 

Value:

{       \
   Chain_NextValidTSTN(Chain,TS,Get_TS_Op);                             \
   while ( IsNonNULL(Chain) ) {                                         \
     alt_chain = TSTN_Sibling(Chain);                                   \
     Chain_NextValidTSTN(alt_chain,TS,Get_TS_Op);                       \
     symbol = TSTN_Symbol(Chain);                                       \
     TrieSymbol_Deref(symbol);                                          \
     if ( isref(symbol) ) {                                             \
       /*                                                               \
        *  Either an unbound TrieVar or some unbound prolog var.        \
        */                                                              \
       CPStack_PushFrame(alt_chain);                                    \
       Bind_and_Conditionally_Trail((CPtr)symbol, Subterm);             \
       TermStackLog_PushFrame;                                          \
       Descend_Into_TST_and_Continue_Search;                            \
     }                                                                  \
     else if (symbol == Subterm) {                                      \
       CPStack_PushFrame(alt_chain);                                    \
       TermStackLog_PushFrame;                                          \
       Descend_Into_TST_and_Continue_Search;                            \
     }                                                                  \
     Chain = alt_chain;                                                 \
   }                                                                    \
 }

#define SearchChain_UnifyWithFunctor Chain,
Subterm,
TS,
Get_TS_Op   ) 
 

#define SearchChain_UnifyWithList Chain,
Subterm,
TS,
Get_TS_Op   ) 
 

#define SetMatchAndUnifyChains Symbol,
SymChain,
VarChain   ) 
 

Value:

{       \
                                                                \
   TSTHTptr ht = (TSTHTptr)SymChain;                            \
   TSTNptr *buckets = TSTHT_BucketArray(ht);                    \
                                                                \
   SymChain = buckets[TrieHash(Symbol,TSTHT_GetHashSeed(ht))];  \
   VarChain = buckets[TRIEVAR_BUCKET];                          \
 }

#define Sys_Trail_Unwind UnwindBase   )     table_undo_bindings(UnwindBase)
 

#define Trie_bind_copy Addr,
Val   ) 
 

Value:

Trie_Conditionally_Trail(Addr,Val);             \
  *(Addr) = Val

#define Trie_Conditionally_Trail Addr,
Val   ) 
 

Value:

if ( IsUnboundTrieVar(Addr) || conditional(Addr) )      \
     { pushtrail0(Addr, Val) }

#define TSI_NextValidTSTN ValidTSIN,
TS   ) 
 

Value:

( ( IsNonNULL(TSIN_Next(ValidTSIN)) &&                  \
       IsValidTS(TSIN_TimeStamp(TSIN_Next(ValidTSIN)),TS) )     \
     ? TSIN_TSTNode(TSIN_Next(ValidTSIN))                       \
     : NULL )

#define TST_Backtrack
 

Value:

#define TST_Collection_Error String,
DoesRequireCleanup   ) 
 

Value:

{       \
   tstCollectionError(CTXTc String, DoesRequireCleanup);        \
   return NULL;                                                 \
 }

#define tstCPF_AlternateNode   ((tstCPStack.top)->alt_node)
 

#define tstCPF_HBreg   ((tstCPStack.top)->heap_bktrk)
 

#define tstCPF_TermStackTopIndex   ((tstCPStack.top)->ts_top_index)
 

#define tstCPF_TrailTop   ((tstCPStack.top)->trail_top)
 

#define tstCPF_TSLogTopIndex   ((tstCPStack.top)->log_top_index)
 


Function Documentation

void initCollectRelevantAnswers CTXTdecl   ) 
 

ALNptr tst_collect_relevant_answers CTXTdeclc TSTNptr  tstRoot,
TimeStamp  ts,
int  numTerms,
CPtr  termsRev
 

static void tstCollectionError CTXTdeclc char *  string,
xsbBool  cleanup_needed
[static]
 


Variable Documentation

CPtr orig_ebreg [static]
 

CPtr orig_hbreg [static]
 

CPtr orig_hreg [static]
 

CPtr* orig_trreg [static]
 

CPtr* trail_base [static]
 

struct tstCPStack_t tstCPStack [static]
 


Generated on Wed Jul 26 13:26:55 2006 for XSB by  doxygen 1.4.5