Exemplo n.º 1
0
            public override void Write(StringTrieBuilder builder)
            {
                // Write the sub-nodes in reverse order: The jump lengths are deltas from
                // after their own positions, so if we wrote the minUnit sub-node first,
                // then its jump delta would be larger.
                // Instead we write the minUnit sub-node last, for a shorter delta.
                int  unitNumber      = length - 1;
                Node rightEdge       = equal[unitNumber];
                int  rightEdgeNumber = rightEdge == null ? firstEdgeNumber : rightEdge.Offset;

                do
                {
                    --unitNumber;
                    if (equal[unitNumber] != null)
                    {
                        equal[unitNumber].WriteUnlessInsideRightEdge(firstEdgeNumber, rightEdgeNumber, builder);
                    }
                } while (unitNumber > 0);
                // The maxUnit sub-node is written as the very last one because we do
                // not jump for it at all.
                unitNumber = length - 1;
                if (rightEdge == null)
                {
#pragma warning disable 612, 618
                    builder.WriteValueAndFinal(values[unitNumber], true);
#pragma warning restore 612, 618
                }
                else
                {
                    rightEdge.Write(builder);
                }
#pragma warning disable 612, 618
                offset = builder.Write(units[unitNumber]);
#pragma warning restore 612, 618
                // Write the rest of this node's unit-value pairs.
                while (--unitNumber >= 0)
                {
                    int  value;
                    bool isFinal;
                    if (equal[unitNumber] == null)
                    {
                        // Write the final value for the one string ending with this unit.
                        value   = values[unitNumber];
                        isFinal = true;
                    }
                    else
                    {
                        // Write the delta to the start position of the sub-node.
                        Debug.Assert(equal[unitNumber].Offset > 0);
                        value   = offset - equal[unitNumber].Offset;
                        isFinal = false;
                    }
#pragma warning disable 612, 618
                    builder.WriteValueAndFinal(value, isFinal);
                    offset = builder.Write(units[unitNumber]);
#pragma warning restore 612, 618
                }
            }
Exemplo n.º 2
0
            public override void Write(StringTrieBuilder builder)
            {
                next.Write(builder);
#pragma warning disable 612, 618
                offset = builder.WriteValueAndFinal(value, false);
#pragma warning restore 612, 618
            }
Exemplo n.º 3
0
 public override void Write(StringTrieBuilder builder)
 {
     next.Write(builder);
     offset = builder.WriteValueAndFinal(value, false);
 }
Exemplo n.º 4
0
 public override void Write(StringTrieBuilder builder)
 {
     offset = builder.WriteValueAndFinal(value, true);
 }