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 } }
public override void Write(StringTrieBuilder builder) { next.Write(builder); #pragma warning disable 612, 618 offset = builder.WriteValueAndFinal(value, false); #pragma warning restore 612, 618 }
public override void Write(StringTrieBuilder builder) { next.Write(builder); offset = builder.WriteValueAndFinal(value, false); }
public override void Write(StringTrieBuilder builder) { offset = builder.WriteValueAndFinal(value, true); }