X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Futil%2FBalancedTree.java;h=24c474dcc840cbd372737a93816a134a6fdcd06a;hp=be8be46f04e9d7199bc0410c94614cd6dd62c8a1;hb=fffcafc33aa4066bdf85da7a32e1a1cdb9db2d6f;hpb=9f6088ca9ac462999a202ab33ac45656c3c9bd3c diff --git a/src/org/ibex/util/BalancedTree.java b/src/org/ibex/util/BalancedTree.java index be8be46..24c474d 100644 --- a/src/org/ibex/util/BalancedTree.java +++ b/src/org/ibex/util/BalancedTree.java @@ -25,8 +25,6 @@ public class BalancedTree { private int cached_index = -1; private int cached_slot = -1; - private FinalizationHelper fh; - // Public API ////////////////////////////////////////////////////////////////////////// /** the number of elements in the tree */ @@ -47,7 +45,6 @@ public class BalancedTree { if (root != 0) { insert(index, arg, root, 0, false, false); } else { - if(fh == null) fh = new FinalizationHelper(this); root = arg; left[arg] = right[arg] = parent[arg] = 0; size[arg] = 1; @@ -267,7 +264,6 @@ public class BalancedTree { int d = right[b]; int c = left[d]; if (d == 0) throw new Error("rotation error"); - if(DEBUG) check(); left[d] = b; right[b] = c; @@ -280,9 +276,7 @@ public class BalancedTree { else if (right[p] == b) right[p] = d; else throw new Error("rotate called with invalid parent"); size[b] = 1 + sizeof(left[b]) + sizeof(right[b]); - size[d] = 1 + sizeof(left[d]) + sizeof(right[d]); - - if(DEBUG) try { check(); } catch(Error e) { System.err.println("rotate: " + toTheLeft + "," + b + "," + p); throw e; } + size[d] = 1 + sizeof(left[d]) + sizeof(right[d]); } private void balance(int slot, int p) { @@ -335,7 +329,6 @@ public class BalancedTree { right[arg] = 0; parent[arg] = p; left[p] = arg; - if(DEBUG) check(); balance(arg, p); // we take the place of a preexisting node @@ -349,14 +342,12 @@ public class BalancedTree { if(left[arg] != 0) parent[left[arg]] = arg; if (slot == root) { root = arg; - if(DEBUG) check(); balance(slot, arg); balance(arg, 0); } else { if (left[p] == slot) left[p] = arg; else if (right[p] == slot) right[p] = arg; else throw new Error("should never happen"); - if(DEBUG) check(); balance(slot, arg); balance(arg, p); } @@ -431,12 +422,8 @@ public class BalancedTree { return slot; } } - - static class FinalizationHelper { - private BalancedTree bt; - FinalizationHelper(BalancedTree bt) { this.bt = bt; } - protected void finalize() { bt.clear(); } - } + + protected void finalize() { clear(); } // Debugging /////////////////////////////////////////////////////////////////////////// @@ -450,6 +437,12 @@ public class BalancedTree { if(parent[root] != 0) throw new Error("parent of the root isn't 0"); if(left[0] != 0 || right[0] != 0 || size[0] != 0 || parent[0] != 0) throw new Error("someone messed with [0]"); + + int c = 0; + int n = leftmost(root); + while(n != 0) { c++; n = next(n); } + if(c != size[root]) throw new Error("size[] mismatch"); + if(root != 0) check(root); } catch(Error e) { printTree(); @@ -487,7 +480,7 @@ public class BalancedTree { } } - public static void main(String[] args) { + /*public static void main(String[] args) { BalancedTree t = new BalancedTree(); for(int i=0;i