ICU 60.1
60.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. More...  
Public Member Functions inherited from icu::StringTrieBuilder::ValueNode  
ValueNode (int32_t initialHash)  
void  setValue (int32_t v) 
Public Member Functions inherited from icu::StringTrieBuilder::Node  
Node (int32_t initialHash)  
int32_t  hashCode () const 
UBool  operator!= (const Node &other) const 
virtual void  write (StringTrieBuilder &builder)=0 
void  writeUnlessInsideRightEdge (int32_t firstRight, int32_t lastRight, StringTrieBuilder &builder) 
int32_t  getOffset () const 
Public Member Functions inherited from icu::UObject  
virtual  ~UObject () 
Destructor. More...  
virtual UClassID  getDynamicClassID () const 
ICU4C "poor man's RTTI", returns a UClassID for the actual ICU class. More...  
Protected Attributes  
int32_t  length 
Node *  next 
Protected Attributes inherited from icu::StringTrieBuilder::ValueNode  
UBool  hasValue 
int32_t  value 
Protected Attributes inherited from icu::StringTrieBuilder::Node  
int32_t  hash 
int32_t  offset 
Additional Inherited Members  
Static Public Member Functions inherited from icu::StringTrieBuilder::Node  
static int32_t  hashCode (const Node *node) 
This API is for internal use only.
Definition at line 307 of file stringtriebuilder.h.

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 furtherleft 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 subnodes. 
Reimplemented from icu::StringTrieBuilder::Node.