use of org.trie4j.Node in project trie4j by takawitter.
the class TailLOUDSTrie method build.
private void build(Trie orig, BvTree bvtree, TailArrayBuilder tailArrayBuilder, FastBitSet termBs, NodeListener listener) {
this.bvtree = bvtree;
this.size = orig.size();
this.labels = new char[size];
LinkedList<Node> queue = new LinkedList<Node>();
int count = 0;
if (orig.getRoot() != null)
queue.add(orig.getRoot());
while (!queue.isEmpty()) {
Node node = queue.pollFirst();
int index = count++;
if (index >= labels.length) {
extend();
}
listener.listen(node, index);
if (node.isTerminate()) {
termBs.set(index);
} else if (termBs.size() <= index) {
termBs.ensureCapacity(index);
}
for (Node c : node.getChildren()) {
bvtree.appendChild();
queue.offerLast(c);
}
bvtree.appendSelf();
char[] letters = node.getLetters();
if (letters.length == 0) {
labels[index] = 0xffff;
tailArrayBuilder.appendEmpty(index);
} else {
labels[index] = letters[0];
if (letters.length >= 2) {
tailArrayBuilder.append(index, letters, 1, letters.length - 1);
} else {
tailArrayBuilder.appendEmpty(index);
}
}
}
this.nodeSize = count;
}
Aggregations