new support for join/intersect operations
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@2086 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
@@ -72,6 +72,17 @@ void itrie_data_print(TrNode node) {
|
||||
}
|
||||
|
||||
|
||||
inline
|
||||
void itrie_data_construct(TrNode node_dest, TrNode node_source) {
|
||||
TrData data_dest, data_source;
|
||||
|
||||
data_source = (TrData) GET_DATA_FROM_LEAF_TRIE_NODE(node_source);
|
||||
new_itrie_data(data_dest, CURRENT_ITRIE, node_dest, TrData_pos(data_source), TrData_neg(data_source), TrData_timestamp(data_source), TrData_depth(data_source));
|
||||
PUT_DATA_IN_LEAF_TRIE_NODE(node_dest, data_dest);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
inline
|
||||
void itrie_data_destruct(TrNode node) {
|
||||
TrEntry itrie;
|
||||
@@ -95,17 +106,12 @@ inline
|
||||
void itrie_data_add(TrNode node_dest, TrNode node_source) {
|
||||
TrData data_dest, data_source;
|
||||
|
||||
data_dest = (TrData) GET_DATA_FROM_LEAF_TRIE_NODE(node_dest);
|
||||
data_source = (TrData) GET_DATA_FROM_LEAF_TRIE_NODE(node_source);
|
||||
if (!(data_dest = (TrData) GET_DATA_FROM_LEAF_TRIE_NODE(node_dest))) {
|
||||
new_itrie_data(data_dest, CURRENT_ITRIE, node_dest, TrData_pos(data_source), TrData_neg(data_source),
|
||||
TrData_timestamp(data_source), TrData_depth(data_source));
|
||||
PUT_DATA_IN_LEAF_TRIE_NODE(node_dest, data_dest);
|
||||
} else {
|
||||
TrData_pos(data_dest) += TrData_pos(data_source);
|
||||
TrData_neg(data_dest) += TrData_neg(data_source);
|
||||
if (TrData_timestamp(data_dest) < TrData_timestamp(data_source))
|
||||
TrData_timestamp(data_dest) = TrData_timestamp(data_source);
|
||||
}
|
||||
TrData_pos(data_dest) += TrData_pos(data_source);
|
||||
TrData_neg(data_dest) += TrData_neg(data_source);
|
||||
if (TrData_timestamp(data_dest) < TrData_timestamp(data_source))
|
||||
TrData_timestamp(data_dest) = TrData_timestamp(data_source);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -302,14 +308,6 @@ void itrie_remove_subtree(TrData data) {
|
||||
}
|
||||
|
||||
|
||||
inline
|
||||
void itrie_join(TrEntry itrie_dest, TrEntry itrie_source) {
|
||||
CURRENT_ITRIE = itrie_dest;
|
||||
trie_join(ITRIE_ENGINE, TrEntry_trie(itrie_dest), TrEntry_trie(itrie_source), &itrie_data_add);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
inline
|
||||
void itrie_add(TrEntry itrie_dest, TrEntry itrie_source) {
|
||||
trie_add(TrEntry_trie(itrie_dest), TrEntry_trie(itrie_source), &itrie_data_add);
|
||||
@@ -324,6 +322,33 @@ void itrie_subtract(TrEntry itrie_dest, TrEntry itrie_source) {
|
||||
}
|
||||
|
||||
|
||||
inline
|
||||
void itrie_join(TrEntry itrie_dest, TrEntry itrie_source) {
|
||||
CURRENT_ITRIE = itrie_dest;
|
||||
trie_join(ITRIE_ENGINE, TrEntry_trie(itrie_dest), TrEntry_trie(itrie_source), &itrie_data_add, &itrie_data_construct);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
inline
|
||||
void itrie_intersect(TrEntry itrie_dest, TrEntry itrie_source) {
|
||||
trie_intersect(ITRIE_ENGINE, TrEntry_trie(itrie_dest), TrEntry_trie(itrie_source), &itrie_data_add, &itrie_data_destruct);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
inline
|
||||
YAP_Int itrie_count_join(TrEntry itrie1, TrEntry itrie2) {
|
||||
return trie_count_join(TrEntry_trie(itrie1), TrEntry_trie(itrie2));
|
||||
}
|
||||
|
||||
|
||||
inline
|
||||
YAP_Int itrie_count_intersect(TrEntry itrie1, TrEntry itrie2) {
|
||||
return trie_count_intersect(TrEntry_trie(itrie1), TrEntry_trie(itrie2));
|
||||
}
|
||||
|
||||
|
||||
inline
|
||||
void itrie_save(TrEntry itrie, FILE *file) {
|
||||
trie_save(TrEntry_trie(itrie), file, &itrie_data_save);
|
||||
|
Reference in New Issue
Block a user