null+****@clear*****
null+****@clear*****
2012年 1月 26日 (木) 10:08:38 JST
Susumu Yata 2012-01-26 10:08:38 +0900 (Thu, 26 Jan 2012) New Revision: dfcea424948ff62f8ec4fe9d293eef2f2c33435b Log: updated to rebuild child-sibling links in grn::dat::Trie::repair(). Modified files: lib/dat/trie.cpp Modified: lib/dat/trie.cpp (+4 -1) =================================================================== --- lib/dat/trie.cpp 2012-01-25 16:41:33 +0900 (6cfe884) +++ lib/dat/trie.cpp 2012-01-26 10:08:38 +0900 (6858e7f) @@ -393,7 +393,7 @@ void Trie::build_from_keys(const UInt32 *begin, const UInt32 *end, UInt32 offset; { - UInt16 labels[MAX_LABEL + 1]; + UInt16 labels[MAX_LABEL + 2]; UInt32 num_labels = 0; const UInt32 *it = begin; @@ -409,12 +409,15 @@ void Trie::build_from_keys(const UInt32 *begin, const UInt32 *end, labels[num_labels++] = (UInt8)key[depth]; } } + labels[num_labels] = INVALID_LABEL; offset = find_offset(labels, num_labels); + ith_node(node_id).set_child(labels[0]); for (UInt32 i = 0; i < num_labels; ++i) { const UInt32 next = offset ^ labels[i]; reserve_node(next); ith_node(next).set_label(labels[i]); + ith_node(next).set_sibling(labels[i + 1]); } if (offset >= num_nodes()) {