findOrInsertStack method

StateElement findOrInsertStack(
  1. StateElement root,
  2. List<int> stack,
  3. int index,
  4. int stack_top,
)

Implementation

StateElement findOrInsertStack(
    StateElement root, List<int> stack, int index, int stack_top) {
  var state_number = stack[index];
  for (StateElement? p = root; p != null; p = p.siblings) {
    if (p.number == state_number) {
      return (index == stack_top
          ? p
          : p.children == null
              ? makeStateList(p, stack, index + 1, stack_top)
              : findOrInsertStack(p.children!, stack, index + 1, stack_top));
    }
  }

  state_element_size++;

  var node = StateElement();
  node.number = state_number;
  node.parent = root.parent;
  node.children = null;
  node.siblings = root.siblings;
  root.siblings = node;

  return (index == stack_top
      ? node
      : makeStateList(node, stack, index + 1, stack_top));
}