protected Pair findNextPair()

in src/main/java/org/apache/accumulo/testing/merkle/MerkleTree.java [67:96]


  protected Pair<Integer,Integer> findNextPair(List<MerkleTreeNode> nodes) {
    int i = 0, j = 1;
    while (i < nodes.size() && j < nodes.size()) {
      MerkleTreeNode left = nodes.get(i), right = nodes.get(j);

      // At the same level
      if (left.getLevel() == right.getLevel()) {
        return new Pair<>(i, j);
      }

      // Peek to see if we have another element
      if (j + 1 < nodes.size()) {
        // If we do, try to match those
        i++;
        j++;
      } else {
        // Otherwise, the last two elements must be paired
        return new Pair<>(i, j);
      }
    }

    if (2 < nodes.size()) {
      throw new IllegalStateException(
          "Should not have exited loop without pairing two elements when we have at least 3 nodes");
    } else if (2 == nodes.size()) {
      return new Pair<>(0, 1);
    } else {
      throw new IllegalStateException("Must have at least two nodes to pair");
    }
  }