Summary: SnapTree repair relies on a notion of responsibility handoff, where any violations of the tree constraints ("damage") are repaired either by the current thread or by another thread that prevents the current thread from completing the repair. There are three types of damage: incorrect height, out of balance, and unnecessary routing node. The rotation code assumed that it repaired all damage to a node, but only actually repaired the first 2 types. This means that if a routing node was simultaneously rotated down and had one of its leaves removed, it could be left in the tree despite having only one child. The end effect is that after emptying the tree (and observing size() == 0), isEmpty() still returned true. This fixes issue #5
Summary: As part of the work of releasing a robust SnapTreeMap, this diff removes the other experimental data structures from the master branch of the snaptree repo. They are still present on the experimental branch.
… Serialization not yet implemented.