void printTriePath(FILE *fp, BTNptr pLeaf, xsbBool printLeafAddr) { BTNptr pRoot; if ( IsNULL(pLeaf) ) { fprintf(fp, "NULL"); return; } if ( ! IsLeafNode(pLeaf) ) { fprintf(fp, "printTriePath() called with non-Leaf node!\n"); printTrieNode(fp, pLeaf); return; } if ( printLeafAddr ) fprintf(fp, "Leaf %p: ", pLeaf); if ( IsEscapeNode(pLeaf) ) { pRoot = BTN_Parent(pLeaf); if ( IsNonNULL(pRoot) ) printTrieSymbol(fp, BTN_Symbol(pRoot)); else fprintf(fp, "ESCAPE node"); return; } SymbolStack_ResetTOS; SymbolStack_PushPathRoot(pLeaf,pRoot); if ( IsTrieFunctor(BTN_Symbol(pRoot)) ) { SymbolStack_Push(BTN_Symbol(pRoot)); symstkPrintNextTerm(fp,FALSE); } else { printTrieSymbol(fp,BTN_Symbol(pRoot)); fprintf(fp, "("); symstkPrintNextTerm(fp,FALSE); while ( ! SymbolStack_IsEmpty ) { fprintf(fp, ","); symstkPrintNextTerm(fp,FALSE); } fprintf(fp, ")"); } }
void printSymbolStack(CTXTdeclc FILE *fp, char * name, DynamicStack stack) { CPtr curFrame; curFrame = DynStk_Top(stack); curFrame = (CPtr) ((char *) curFrame - DynStk_FrameSize(stack)); while ((void *)curFrame >= DynStk_Base(stack)) { printf("%s: ",name);printTrieSymbol(fp, *curFrame);fprintf(fp,"\n"); curFrame = (CPtr) ((char *) curFrame - DynStk_FrameSize(stack)); } }
void printTrieNode(FILE *fp, BTNptr pTN) { fprintf(fp, "Trie Node: Addr(%p)", pTN); if ( IsDeletedNode(pTN) ) fprintf(fp, " (DELETED)"); fprintf(fp, "\n\tInstr(%s), Status(%s), NodeType(%s),\n" "\tTrieType(%s), Symbol(", inst_name(TN_Instr(pTN)), stringNodeStatus(TN_Status(pTN)), stringNodeType(TN_NodeType(pTN)), stringTrieType(TN_TrieType(pTN))); printTrieSymbol(fp, TN_Symbol(pTN)); fprintf(fp, ")"); if ( IsInTimeStampedTrie(pTN) ) fprintf(fp, ", TimeStamp(%ld)", TSTN_TimeStamp((TSTNptr)pTN)); fprintf(fp, "\n\tParent(%p), Child(%p), Sibling(%p)\n", TN_Parent(pTN), TN_Child(pTN), TN_Sibling(pTN)); }