ICU 4.8.1.1
4.8.1.1
|
#include <stringtriebuilder.h>
Public Member Functions | |
LinearMatchNode (int32_t len, Node *nextNode) | |
virtual UBool | operator== (const Node &other) const |
virtual int32_t | markRightEdgesFirst (int32_t edgeNumber) |
Traverses the Node graph and numbers branch edges, with rightmost edges first. | |
Protected Attributes | |
int32_t | length |
Node * | next |
This API is for internal use only.
Definition at line 277 of file stringtriebuilder.h.
virtual int32_t StringTrieBuilder::LinearMatchNode::markRightEdgesFirst | ( | int32_t | edgeNumber | ) | [virtual] |
Traverses the Node graph and numbers branch edges, with rightmost edges first.
This is to avoid writing a duplicate node twice.
Branch nodes in this trie data structure are not symmetric. Most branch edges "jump" to other nodes but the rightmost branch edges just continue without a jump. Therefore, write() must write the rightmost branch edge last (trie units are written backwards), and must write it at that point even if it is a duplicate of a node previously written elsewhere.
This function visits and marks right branch edges first. Edges are numbered with increasingly negative values because we share the offset field which gets positive values when nodes are written. A branch edge also remembers the first number for any of its edges.
When a further-left branch edge has a number in the range of the rightmost edge's numbers, then it will be written as part of the required right edge and we can avoid writing it first.
After root.markRightEdgesFirst(-1) the offsets of all nodes are negative edge numbers.
edgeNumber | The first edge number for this node and its sub-nodes. |
Reimplemented from StringTrieBuilder::Node.