Defines | |
| #define | opatom Atom(NodePtr) |
| #define | opsucc ((byte *)(Child(NodePtr))) |
| #define | opfail ((byte *)(Sibl(NodePtr))) |
| #define | FIRST_HASH_NODE -1 |
| #define | NO_MORE_IN_HASH -2 |
| #define | HASH_IS_FREE -3 |
| #define | HASH_IS_NOT_FREE -4 |
| #define | hash_nonvar_subterm(Subterm, pBTHT, BucketNum) |
| #define | find_next_nonempty_bucket(pBTHT, pTable, BucketNum) |
| #define | next_lpcreg |
| #define | proceed_lpcreg |
| #define | non_ftag_lpcreg lpcreg = opsucc |
| #define | MAX_TRIE_REGS 500 |
| #define | restore_regs_and_vars(tbreg, offset) |
| #define | save_trie_registers(tbreg) |
| #define | restore_trie_registers(temp) |
| #define | unify_with_trie_numcon |
| #define | unify_with_trie_str |
| #define | unify_with_trie_list |
| #define | unify_with_trie_val |
| #define | unify_with_trie_attv |
Variables | |
| Cell * | reg_array |
| CPtr | reg_arrayptr |
| int | reg_array_size = DEFAULT_ARRAYSIZ |
| CPtr | var_regs [MAX_TRIE_REGS] |
| int | num_vars_in_var_regs = -1 |
| BTNptr | NodePtr |
| BTNptr | Last_Nod_Sav |
| int | delay_it |
|
|
Value: { \
long TableSize = BTHT_NumBuckets(pBTHT); \
\
while (TRUE) { \
BucketNum++; \
if (BucketNum >= TableSize) { \
BucketNum = NO_MORE_IN_HASH; \
break; \
} \
else if ( IsNonNULL(*(pTable + BucketNum)) ) \
break; \
} \
}
|
|
|
|
|
|
|
|
|
|
|
|
Value: { \
\
Cell symbol = 0; /* eliminate compiler warning */ \
\
switch (cell_tag(Subterm)) { \
case XSB_STRING: \
case XSB_INT: \
case XSB_FLOAT: \
symbol = EncodeTrieConstant(Subterm); \
break; \
case XSB_LIST: \
symbol = EncodeTrieList(Subterm); \
break; \
case XSB_STRUCT: \
symbol = EncodeTrieFunctor(Subterm); \
break; \
default: \
fprintf(stderr,"Bad tag :Type %ld ",cell_tag(Subterm)); \
xsb_exit("In instruction hash_handle"); \
break; \
} \
BucketNum = TrieHash(symbol,BTHT_GetHashSeed(pBTHT)); \
}
|
|
|
|
|
|
Value: { \
if ( IsLeafNode(NodePtr) ) \
proceed_lpcreg \
else \
non_ftag_lpcreg; \
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Value: { \
if( IsInAnswerTrie(NodePtr) && delay_it ) \
handle_conditional_answers; \
global_num_vars = num_vars_in_var_regs; \
num_vars_in_var_regs = -1; \
Last_Nod_Sav = NodePtr; \
lpcreg = cpreg; \
TRIE_R_UNLOCK(); \
}
|
|
|
Value: undo_bindings(tbreg); \ delayreg = cp_pdreg(tbreg); \ restore_some_wamregs(tbreg, ereg); \ restore_trie_registers(tbreg + offset) |
|
|
Value: { \
int i; \
CPtr treg = temp; \
\
reg_arrayptr = reg_array - 1; \
i = cell(treg); \
i = int_val(i); \
while (i > 0) { \
reg_arrayptr++; \
*reg_arrayptr = *(++treg); \
i--; \
} \
i = *(++treg); \
num_vars_in_var_regs = int_val(i); \
for (i = 0; i <= num_vars_in_var_regs; i++) { \
var_regs[i] = (CPtr)*(++treg); \
} \
}
|
|
|
Value: { \
CPtr temp_arrayptr; \
int reg_count = 0, i; \
\
i = num_vars_in_var_regs; \
while (i >= 0) { \
*(--tbreg) = (Cell)var_regs[i]; \
i--; \
} \
*(--tbreg) = makeint(num_vars_in_var_regs); \
temp_arrayptr = reg_arrayptr; \
while (temp_arrayptr >= reg_array) { \
/* INV: temp_array_ptr + reg_count == reg_arrayptr */ \
*(--tbreg) = *temp_arrayptr; \
reg_count++; \
temp_arrayptr--; \
} \
(*--tbreg) = makeint(reg_count); \
}
|
|
|
Value: { \
XSB_Deref(*reg_arrayptr); \
num_vars_in_var_regs = (int)int_val(opatom) &0xffff; \
if (isref(*reg_arrayptr)) { \
bind_ref((CPtr) *reg_arrayptr, makeattv(hreg)); \
} \
else if (isattv(*reg_arrayptr)) { \
add_interrupt(CTXTc cell(((CPtr)dec_addr(*reg_arrayptr) + 1)),makeattv(hreg)); \
bind_ref((CPtr)dec_addr(*reg_arrayptr), makeattv(hreg)); \
} \
else { \
attv_dbgmsg(">>>> add_interrupt in unify_with_trie_attv\n"); \
add_interrupt(CTXTc makeattv(hreg), *reg_arrayptr); \
} \
var_regs[num_vars_in_var_regs] = (CPtr) makeattv(hreg); \
new_heap_free(hreg); \
*reg_arrayptr = (Cell) hreg; \
new_heap_free(hreg); \
}
|
|
|
|
|
|
Value: { \
XSB_Deref(*reg_arrayptr); \
if (isref(*reg_arrayptr)) { \
bind_ref((CPtr)*reg_arrayptr, opatom); \
} \
else if (isattv(*reg_arrayptr)) { \
attv_dbgmsg(">>>> add_interrupt in unify_with_trie_numcon\n"); \
add_interrupt(CTXTc cell(((CPtr)dec_addr(*reg_arrayptr) + 1)), opatom);\
bind_int_tagged((CPtr)dec_addr(*reg_arrayptr), opatom); \
} \
else { \
if (*reg_arrayptr != opatom) { \
Fail1; \
XSB_Next_Instr(); \
} \
} \
}
|
|
|
|
|
|
Value: { \
Cell cell2deref; \
XSB_Deref(*reg_arrayptr); \
if (isref(*reg_arrayptr)) { \
cell2deref = (Cell)var_regs[(int)int_val(opatom)]; \
XSB_Deref(cell2deref); \
if (cell2deref != *reg_arrayptr) \
bind_ref((CPtr) *reg_arrayptr, cell2deref); \
} \
else if (isattv(*reg_arrayptr)) { \
cell2deref = (Cell) var_regs[(int)int_val(opatom)]; \
XSB_Deref(cell2deref); \
if (*reg_arrayptr != cell2deref) { \
/* Do not trigger attv interrupt! */ \
bind_ref(clref_val(*reg_arrayptr), cell2deref); \
} \
else { \
attv_dbgmsg(">>>> keep old attr in unify_with_trie_val\n"); \
} \
} \
else { \
op1 = (Cell)*reg_arrayptr; \
op2 = (Cell) var_regs[(int)int_val(opatom)]; \
if (unify(CTXTc op1,op2) == FALSE) { \
Fail1; \
XSB_Next_Instr(); \
} \
} \
reg_arrayptr--; \
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.4.5