visitKey method

void visitKey(
  1. RadixTreeNode<T> node,
  2. String key,
  3. String prefix,
  4. RadixTreeKVVisitor<T?> visitor,
)

Visits the given node of this tree with the given key and visitor.

Implementation

void visitKey(
  RadixTreeNode<T> node,
  String key,
  String prefix,
  RadixTreeKVVisitor<T?> visitor,
) {
  if (node.hasValue && prefix == key) {
    visitor(prefix, node.value);
    return;
  }

  var prefixLength = prefix.length;

  if (key.length > prefixLength) {
    // Search the children only if there's more key remaining.
    // Unfortunately this is O(|your_alphabet|)
    for (var child in node.children) {
      if (child.prefix[0] == key[prefixLength]) {
        return visitKey(child, key, prefix + child.prefix, visitor);
      }
    }
  }
}