home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / Extras / OSpace / jgl.exe / jgl_2_0 / COM / objectspace / jgl / Tree.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-03-12  |  9.2 KB  |  725 lines

  1. package COM.objectspace.jgl;
  2.  
  3. final class Tree {
  4.    public static final int RED = 1;
  5.    public static final int BLACK = 2;
  6.    TreeNode NIL;
  7.    int size;
  8.    boolean myInsertAlways;
  9.    boolean myIsMap;
  10.    BinaryPredicate myComparator;
  11.    Container myContainer;
  12.    TreeNode myHeader;
  13.  
  14.    Tree(boolean var1, boolean var2, Container var3) {
  15.       this(var1, var2, new HashComparator(), var3);
  16.    }
  17.  
  18.    Tree(boolean var1, boolean var2, BinaryPredicate var3, Container var4) {
  19.       this.NIL = new TreeNode(this);
  20.       this.myHeader = new TreeNode(this);
  21.       this.myContainer = var4;
  22.       this.myIsMap = var1;
  23.       this.myInsertAlways = var2;
  24.       this.myComparator = var3;
  25.       this.myHeader.color = 1;
  26.       this.clear();
  27.    }
  28.  
  29.    Tree(Tree var1) {
  30.       this.NIL = new TreeNode(this);
  31.       this.myHeader = new TreeNode(this);
  32.       this.myContainer = var1.myContainer;
  33.       this.myIsMap = var1.myIsMap;
  34.       this.myInsertAlways = var1.myInsertAlways;
  35.       this.myComparator = var1.myComparator;
  36.       this.myHeader.color = 1;
  37.       this.copyTree(var1);
  38.    }
  39.  
  40.    boolean compare(Object var1, Object var2) {
  41.       return this.myComparator.execute(var1, var2);
  42.    }
  43.  
  44.    Object key(Object var1) {
  45.       return this.myIsMap ? ((Pair)var1).first : var1;
  46.    }
  47.  
  48.    Object value(Object var1) {
  49.       if (this.myIsMap) {
  50.          return var1 == null ? null : ((Pair)var1).second;
  51.       } else {
  52.          return var1;
  53.       }
  54.    }
  55.  
  56.    void copy(Tree var1) {
  57.       if (this != var1) {
  58.          this.clear();
  59.          this.copyTree(var1);
  60.       }
  61.  
  62.    }
  63.  
  64.    OrderedSetIterator beginSet() {
  65.       return new OrderedSetIterator(this, this.myHeader.left, (OrderedSet)this.myContainer);
  66.    }
  67.  
  68.    OrderedSetIterator endSet() {
  69.       return new OrderedSetIterator(this, this.myHeader, (OrderedSet)this.myContainer);
  70.    }
  71.  
  72.    OrderedMapIterator beginMap(int var1) {
  73.       return new OrderedMapIterator(this, this.myHeader.left, (OrderedMap)this.myContainer, var1);
  74.    }
  75.  
  76.    OrderedMapIterator endMap(int var1) {
  77.       return new OrderedMapIterator(this, this.myHeader, (OrderedMap)this.myContainer, var1);
  78.    }
  79.  
  80.    int maxSize() {
  81.       return Integer.MAX_VALUE;
  82.    }
  83.  
  84.    TreeNode insert(TreeNode var1, Object var2) {
  85.       if (var1 == this.myHeader.left) {
  86.          if (this.size > 0) {
  87.             Object var8 = this.myIsMap ? ((Pair)var2).first : var2;
  88.             Object var12 = var1.object;
  89.             var12 = this.myIsMap ? ((Pair)var12).first : var12;
  90.             if (this.myComparator.execute(var8, var12)) {
  91.                return this.insert(var1, var1, var2);
  92.             }
  93.          }
  94.  
  95.          return this.insertAux(var2, true).node;
  96.       } else if (var1 == this.myHeader) {
  97.          Object var6 = this.myHeader.right.object;
  98.          var6 = this.myIsMap ? ((Pair)var6).first : var6;
  99.          Object var11 = this.myIsMap ? ((Pair)var2).first : var2;
  100.          return this.myComparator.execute(var6, var11) ? this.insert(this.NIL, this.myHeader.right, var2) : this.insertAux(var2, true).node;
  101.       } else {
  102.          TreeNode var3 = decrement(var1, this.NIL);
  103.          Object var4 = var3.object;
  104.          var4 = this.myIsMap ? ((Pair)var4).first : var4;
  105.          Object var5 = this.myIsMap ? ((Pair)var2).first : var2;
  106.          if (this.myComparator.execute(var4, var5)) {
  107.             var4 = this.myIsMap ? ((Pair)var2).first : var2;
  108.             var5 = var1.object;
  109.             var5 = this.myIsMap ? ((Pair)var5).first : var5;
  110.             if (this.myComparator.execute(var4, var5)) {
  111.                if (var3.right == this.NIL) {
  112.                   return this.insert(this.NIL, var3, var2);
  113.                }
  114.  
  115.                return this.insert(var1, var1, var2);
  116.             }
  117.          }
  118.  
  119.          return this.insertAux(var2, true).node;
  120.       }
  121.    }
  122.  
  123.    void clear() {
  124.       this.myHeader.parent = this.NIL;
  125.       this.myHeader.right = this.myHeader;
  126.       this.myHeader.left = this.myHeader;
  127.       this.size = 0;
  128.    }
  129.  
  130.    Pair remove(Object var1) {
  131.       Pair var2 = this.equalRange(var1);
  132.       return this.remove((TreeNode)var2.first, (TreeNode)var2.second, this.size);
  133.    }
  134.  
  135.    Pair remove(Object var1, int var2) {
  136.       Pair var3 = this.equalRange(var1);
  137.       return this.remove((TreeNode)var3.first, (TreeNode)var3.second, var2);
  138.    }
  139.  
  140.    Pair remove(TreeNode var1, TreeNode var2) {
  141.       return this.remove(var1, var2, this.size);
  142.    }
  143.  
  144.    Pair remove(TreeNode var1, TreeNode var2, int var3) {
  145.       if (var3 <= 0) {
  146.          return new Pair((Object)null, new Integer(0));
  147.       } else {
  148.          int var4 = 0;
  149.          Object var5 = null;
  150.          if (var1 == this.myHeader.left && var2 == this.myHeader && this.size <= var3) {
  151.             var4 = this.size;
  152.             Object var8 = var1.object;
  153.             var5 = this.myIsMap ? (var8 == null ? null : ((Pair)var8).second) : var8;
  154.             this.clear();
  155.          } else {
  156.             while(var3 > 0 && var1 != var2) {
  157.                if (var4 == 0) {
  158.                   Object var7 = var1.object;
  159.                   var5 = this.myIsMap ? (var7 == null ? null : ((Pair)var7).second) : var7;
  160.                }
  161.  
  162.                --var3;
  163.                ++var4;
  164.                TreeNode var6 = increment(var1, this.NIL);
  165.                this.remove(var1);
  166.                var1 = var6;
  167.             }
  168.          }
  169.  
  170.          return new Pair(var5, new Integer(var4));
  171.       }
  172.    }
  173.  
  174.    TreeNode find(Object var1) {
  175.       TreeNode var2 = (TreeNode)this.equalRange(var1).first;
  176.       if (var2 != this.myHeader) {
  177.          Object var3 = var2.object;
  178.          var3 = this.myIsMap ? ((Pair)var3).first : var3;
  179.          if (!this.myComparator.execute(var1, var3)) {
  180.             return var2;
  181.          }
  182.       }
  183.  
  184.       return this.myHeader;
  185.    }
  186.  
  187.    int count(Object var1) {
  188.       Pair var2 = this.equalRange(var1);
  189.       return distance((TreeNode)var2.first, (TreeNode)var2.second, this.NIL);
  190.    }
  191.  
  192.    TreeNode lowerBound(Object var1) {
  193.       return (TreeNode)this.equalRange(var1).first;
  194.    }
  195.  
  196.    TreeNode upperBound(Object var1) {
  197.       return (TreeNode)this.equalRange(var1).second;
  198.    }
  199.  
  200.    Pair equalRange(Object var1) {
  201.       TreeNode var2 = this.lowerBoundAux(var1);
  202.       TreeNode var3 = this.upperBoundAux(var1);
  203.       if (var3 == this.myHeader) {
  204.          return new Pair(var2, var3);
  205.       } else if (var2 == this.myHeader) {
  206.          return new Pair(var3, var2);
  207.       } else {
  208.          TreeNode var4 = var2;
  209.          TreeNode var5 = var3;
  210.  
  211.          while(true) {
  212.             var4 = increment(var4, this.NIL);
  213.             var5 = increment(var5, this.NIL);
  214.             if (var5 != this.myHeader && var4 != var3) {
  215.                if (var4 != this.myHeader && var2 != var5) {
  216.                   continue;
  217.                }
  218.  
  219.                return new Pair(var3, var2);
  220.             }
  221.  
  222.             return new Pair(var2, var3);
  223.          }
  224.       }
  225.    }
  226.  
  227.    TreeNode lowerBoundAux(Object var1) {
  228.       TreeNode var2 = this.myHeader;
  229.       TreeNode var3 = this.myHeader.parent;
  230.  
  231.       boolean var4;
  232.       for(var4 = false; var3 != this.NIL; var3 = var4 ? var3.right : var3.left) {
  233.          var2 = var3;
  234.          Object var5 = var3.object;
  235.          var5 = this.myIsMap ? ((Pair)var5).first : var5;
  236.          var4 = this.myComparator.execute(var5, var1);
  237.       }
  238.  
  239.       if (var4) {
  240.          return increment(var2, this.NIL);
  241.       } else {
  242.          return var2;
  243.       }
  244.    }
  245.  
  246.    TreeNode upperBoundAux(Object var1) {
  247.       TreeNode var2 = this.myHeader;
  248.       TreeNode var3 = this.myHeader.parent;
  249.  
  250.       boolean var4;
  251.       for(var4 = true; var3 != this.NIL; var3 = var4 ? var3.left : var3.right) {
  252.          var2 = var3;
  253.          Object var5 = var3.object;
  254.          var5 = this.myIsMap ? ((Pair)var5).first : var5;
  255.          var4 = this.myComparator.execute(var1, var5);
  256.       }
  257.  
  258.       if (var4) {
  259.          return var2;
  260.       } else {
  261.          return increment(var2, this.NIL);
  262.       }
  263.    }
  264.  
  265.    void insert(InputIterator var1, InputIterator var2) {
  266.       InputIterator var3 = (InputIterator)var1.clone();
  267.  
  268.       while(!var3.equals(var2)) {
  269.          Object var4 = var3.nextElement();
  270.          this.insertAux(var4, true);
  271.       }
  272.  
  273.    }
  274.  
  275.    InsertResult insertAux(Object var1, boolean var2) {
  276.       TreeNode var3 = this.myHeader;
  277.       TreeNode var4 = this.myHeader.parent;
  278.  
  279.       boolean var5;
  280.       for(var5 = true; var4 != this.NIL; var4 = var5 ? var4.left : var4.right) {
  281.          var3 = var4;
  282.          Object var6 = this.myIsMap ? ((Pair)var1).first : var1;
  283.          Object var7 = var4.object;
  284.          var7 = this.myIsMap ? ((Pair)var7).first : var7;
  285.          var5 = this.myComparator.execute(var6, var7);
  286.       }
  287.  
  288.       if (this.myInsertAlways && var2) {
  289.          return new InsertResult(this, this.insert(var4, var3, var1), true);
  290.       } else {
  291.          TreeNode var9 = var3;
  292.          if (var5) {
  293.             if (var3 == this.myHeader.left) {
  294.                return new InsertResult(this, this.insert(var4, var3, var1), true);
  295.             }
  296.  
  297.             var9 = decrement(var3, this.NIL);
  298.          }
  299.  
  300.          Object var11 = var9.object;
  301.          var11 = this.myIsMap ? ((Pair)var11).first : var11;
  302.          Object var8 = this.myIsMap ? ((Pair)var1).first : var1;
  303.          if (this.myComparator.execute(var11, var8)) {
  304.             return new InsertResult(this, this.insert(var4, var3, var1), true);
  305.          } else {
  306.             return new InsertResult(this, var9, false);
  307.          }
  308.       }
  309.    }
  310.  
  311.    InsertResult insert(Object var1) {
  312.       return this.insertAux(var1, true);
  313.    }
  314.  
  315.    InsertResult put(Object var1) {
  316.       return this.insertAux(var1, false);
  317.    }
  318.  
  319.    Object get(Object var1) {
  320.       TreeNode var2 = this.myHeader;
  321.       TreeNode var3 = this.myHeader.parent;
  322.  
  323.       boolean var4;
  324.       for(var4 = true; var3 != this.NIL; var3 = var4 ? var3.left : var3.right) {
  325.          var2 = var3;
  326.          Object var5 = var3.object;
  327.          var5 = this.myIsMap ? ((Pair)var5).first : var5;
  328.          var4 = this.myComparator.execute(var1, var5);
  329.       }
  330.  
  331.       TreeNode var8 = var2;
  332.       if (var4) {
  333.          if (var2 == this.myHeader.left) {
  334.             return null;
  335.          }
  336.  
  337.          var8 = decrement(var2, this.NIL);
  338.       }
  339.  
  340.       Object var6 = var8.object;
  341.       var6 = this.myIsMap ? ((Pair)var6).first : var6;
  342.       if (this.myComparator.execute(var6, var1)) {
  343.          return null;
  344.       } else {
  345.          return ((Pair)var8.object).second;
  346.       }
  347.    }
  348.  
  349.    TreeNode insert(TreeNode var1, TreeNode var2, Object var3) {
  350.       TreeNode var4;
  351.       boolean var10000;
  352.       label24: {
  353.          ++this.size;
  354.          var4 = new TreeNode(this, var3);
  355.          if (var2 != this.myHeader && var1 == this.NIL) {
  356.             Object var5 = this.myIsMap ? ((Pair)var3).first : var3;
  357.             Object var6 = var2.object;
  358.             var6 = this.myIsMap ? ((Pair)var6).first : var6;
  359.             if (!this.myComparator.execute(var5, var6)) {
  360.                var10000 = false;
  361.                break label24;
  362.             }
  363.          }
  364.  
  365.          var10000 = true;
  366.       }
  367.  
  368.       boolean var7 = var10000;
  369.       this.insert(var7, var1, var2, var4);
  370.       return var4;
  371.    }
  372.  
  373.    static int distance(TreeNode var0, TreeNode var1, TreeNode var2) {
  374.       int var3;
  375.       for(var3 = 0; var0 != var1; ++var3) {
  376.          var0 = increment(var0, var2);
  377.       }
  378.  
  379.       return var3;
  380.    }
  381.  
  382.    TreeNode copyTree(TreeNode var1, TreeNode var2, TreeNode var3) {
  383.       if (var1 == var3) {
  384.          return this.NIL;
  385.       } else {
  386.          TreeNode var4 = new TreeNode(this, var1.object);
  387.          var4.color = var1.color;
  388.          var4.left = this.copyTree(var1.left, var4, var3);
  389.          var4.right = this.copyTree(var1.right, var4, var3);
  390.          var4.parent = var2;
  391.          return var4;
  392.       }
  393.    }
  394.  
  395.    void copyTree(Tree var1) {
  396.       this.myHeader.parent = this.copyTree(var1.myHeader.parent, this.myHeader, var1.NIL);
  397.       this.myHeader.left = this.minimum(this.myHeader.parent);
  398.       this.myHeader.right = this.maximum(this.myHeader.parent);
  399.       this.size = var1.size;
  400.    }
  401.  
  402.    Array keys() {
  403.       Array var1 = new Array();
  404.  
  405.       for(TreeNode var2 = this.myHeader.left; var2 != this.myHeader; var2 = increment(var2, this.NIL)) {
  406.          var1.add(((Pair)var2.object).first);
  407.       }
  408.  
  409.       return var1;
  410.    }
  411.  
  412.    Array keys(Object var1) {
  413.       Array var2 = new Array();
  414.  
  415.       for(TreeNode var3 = this.myHeader.left; var3 != this.myHeader; var3 = increment(var3, this.NIL)) {
  416.          if (((Pair)var3.object).second.equals(var1)) {
  417.             var2.add(((Pair)var3.object).first);
  418.          }
  419.       }
  420.  
  421.       return var2;
  422.    }
  423.  
  424.    Array values(Object var1) {
  425.       Array var2 = new Array();
  426.  
  427.       for(TreeNode var3 = this.myHeader.left; var3 != this.myHeader; var3 = increment(var3, this.NIL)) {
  428.          if (((Pair)var3.object).first.equals(var1)) {
  429.             var2.add(((Pair)var3.object).second);
  430.          }
  431.       }
  432.  
  433.       return var2;
  434.    }
  435.  
  436.    static TreeNode increment(TreeNode var0, TreeNode var1) {
  437.       if (var0.right != var1) {
  438.          for(var0 = var0.right; var0.left != var1; var0 = var0.left) {
  439.          }
  440.  
  441.          return var0;
  442.       } else {
  443.          while(var0 == var0.parent.right) {
  444.             var0 = var0.parent;
  445.          }
  446.  
  447.          return var0.right == var0.parent ? var0 : var0.parent;
  448.       }
  449.    }
  450.  
  451.    static TreeNode decrement(TreeNode var0, TreeNode var1) {
  452.       if (var0.color == 1 && var0.parent.parent == var0) {
  453.          return var0.right;
  454.       } else if (var0.left != var1) {
  455.          for(var0 = var0.left; var0.right != var1; var0 = var0.right) {
  456.          }
  457.  
  458.          return var0;
  459.       } else {
  460.          while(var0 == var0.parent.left) {
  461.             var0 = var0.parent;
  462.          }
  463.  
  464.          return var0.parent;
  465.       }
  466.    }
  467.  
  468.    TreeNode minimum(TreeNode var1) {
  469.       if (var1 == this.NIL) {
  470.          return this.myHeader;
  471.       } else {
  472.          while(var1.left != this.NIL) {
  473.             var1 = var1.left;
  474.          }
  475.  
  476.          return var1;
  477.       }
  478.    }
  479.  
  480.    TreeNode maximum(TreeNode var1) {
  481.       if (var1 == this.NIL) {
  482.          return this.myHeader;
  483.       } else {
  484.          while(var1.right != this.NIL) {
  485.             var1 = var1.right;
  486.          }
  487.  
  488.          return var1;
  489.       }
  490.    }
  491.  
  492.    void rotateLeft(TreeNode var1) {
  493.       TreeNode var2 = var1.right;
  494.       var1.right = var2.left;
  495.       if (var2.left != this.NIL) {
  496.          var2.left.parent = var1;
  497.       }
  498.  
  499.       var2.parent = var1.parent;
  500.       if (var1 == this.myHeader.parent) {
  501.          this.myHeader.parent = var2;
  502.       } else if (var1 == var1.parent.left) {
  503.          var1.parent.left = var2;
  504.       } else {
  505.          var1.parent.right = var2;
  506.       }
  507.  
  508.       var2.left = var1;
  509.       var1.parent = var2;
  510.    }
  511.  
  512.    void rotateRight(TreeNode var1) {
  513.       TreeNode var2 = var1.left;
  514.       var1.left = var2.right;
  515.       if (var2.right != this.NIL) {
  516.          var2.right.parent = var1;
  517.       }
  518.  
  519.       var2.parent = var1.parent;
  520.       if (var1 == this.myHeader.parent) {
  521.          this.myHeader.parent = var2;
  522.       } else if (var1 == var1.parent.right) {
  523.          var1.parent.right = var2;
  524.       } else {
  525.          var1.parent.left = var2;
  526.       }
  527.  
  528.       var2.right = var1;
  529.       var1.parent = var2;
  530.    }
  531.  
  532.    void insert(boolean var1, TreeNode var2, TreeNode var3, TreeNode var4) {
  533.       if (var1) {
  534.          var3.left = var4;
  535.          if (var3 == this.myHeader) {
  536.             this.myHeader.parent = var4;
  537.             this.myHeader.right = var4;
  538.          } else if (var3 == this.myHeader.left) {
  539.             this.myHeader.left = var4;
  540.          }
  541.       } else {
  542.          var3.right = var4;
  543.          if (var3 == this.myHeader.right) {
  544.             this.myHeader.right = var4;
  545.          }
  546.       }
  547.  
  548.       var4.parent = var3;
  549.       var4.left = this.NIL;
  550.       var4.right = this.NIL;
  551.       var2 = var4;
  552.       var4.color = 1;
  553.  
  554.       while(var2 != this.myHeader.parent && var2.parent.color == 1) {
  555.          if (var2.parent == var2.parent.parent.left) {
  556.             var3 = var2.parent.parent.right;
  557.             if (var3.color == 1) {
  558.                var2.parent.color = 2;
  559.                var3.color = 2;
  560.                var2.parent.parent.color = 1;
  561.                var2 = var2.parent.parent;
  562.             } else {
  563.                if (var2 == var2.parent.right) {
  564.                   var2 = var2.parent;
  565.                   this.rotateLeft(var2);
  566.                }
  567.  
  568.                var2.parent.color = 2;
  569.                var2.parent.parent.color = 1;
  570.                this.rotateRight(var2.parent.parent);
  571.             }
  572.          } else {
  573.             var3 = var2.parent.parent.left;
  574.             if (var3.color == 1) {
  575.                var2.parent.color = 2;
  576.                var3.color = 2;
  577.                var2.parent.parent.color = 1;
  578.                var2 = var2.parent.parent;
  579.             } else {
  580.                if (var2 == var2.parent.left) {
  581.                   var2 = var2.parent;
  582.                   this.rotateRight(var2);
  583.                }
  584.  
  585.                var2.parent.color = 2;
  586.                var2.parent.parent.color = 1;
  587.                this.rotateLeft(var2.parent.parent);
  588.             }
  589.          }
  590.       }
  591.  
  592.       this.myHeader.parent.color = 2;
  593.    }
  594.  
  595.    TreeNode remove(TreeNode var1) {
  596.       TreeNode var2 = var1;
  597.       TreeNode var3;
  598.       if (var1.left == this.NIL) {
  599.          var3 = var1.right;
  600.       } else if (var1.right == this.NIL) {
  601.          var3 = var1.left;
  602.       } else {
  603.          for(var2 = var1.right; var2.left != this.NIL; var2 = var2.left) {
  604.          }
  605.  
  606.          var3 = var2.right;
  607.       }
  608.  
  609.       if (var2 != var1) {
  610.          var1.left.parent = var2;
  611.          var2.left = var1.left;
  612.          if (var2 != var1.right) {
  613.             var3.parent = var2.parent;
  614.             var2.parent.left = var3;
  615.             var2.right = var1.right;
  616.             var1.right.parent = var2;
  617.          } else {
  618.             var3.parent = var2;
  619.          }
  620.  
  621.          if (this.myHeader.parent == var1) {
  622.             this.myHeader.parent = var2;
  623.          } else if (var1.parent.left == var1) {
  624.             var1.parent.left = var2;
  625.          } else {
  626.             var1.parent.right = var2;
  627.          }
  628.  
  629.          var2.parent = var1.parent;
  630.          int var4 = var2.color;
  631.          var2.color = var1.color;
  632.          var1.color = var4;
  633.          var2 = var1;
  634.       } else {
  635.          var3.parent = var2.parent;
  636.          if (this.myHeader.parent == var1) {
  637.             this.myHeader.parent = var3;
  638.          } else if (var1.parent.left == var1) {
  639.             var1.parent.left = var3;
  640.          } else {
  641.             var1.parent.right = var3;
  642.          }
  643.  
  644.          if (this.myHeader.left == var1) {
  645.             if (var1.right == this.NIL) {
  646.                this.myHeader.left = var1.parent;
  647.             } else {
  648.                this.myHeader.left = this.minimum(var3);
  649.             }
  650.          }
  651.  
  652.          if (this.myHeader.right == var1) {
  653.             if (var1.left == this.NIL) {
  654.                this.myHeader.right = var1.parent;
  655.             } else {
  656.                this.myHeader.right = this.maximum(var3);
  657.             }
  658.          }
  659.       }
  660.  
  661.       if (var2.color != 1) {
  662.          while(var3 != this.myHeader.parent && var3.color == 2) {
  663.             if (var3 == var3.parent.left) {
  664.                TreeNode var6 = var3.parent.right;
  665.                if (var6.color == 1) {
  666.                   var6.color = 2;
  667.                   var3.parent.color = 1;
  668.                   this.rotateLeft(var3.parent);
  669.                   var6 = var3.parent.right;
  670.                }
  671.  
  672.                if (var6.left.color != 2 || var6.right.color != 2) {
  673.                   if (var6.right.color == 2) {
  674.                      var6.left.color = 2;
  675.                      var6.color = 1;
  676.                      this.rotateRight(var6);
  677.                      var6 = var3.parent.right;
  678.                   }
  679.  
  680.                   var6.color = var3.parent.color;
  681.                   var3.parent.color = 2;
  682.                   var6.right.color = 2;
  683.                   this.rotateLeft(var3.parent);
  684.                   break;
  685.                }
  686.  
  687.                var6.color = 1;
  688.                var3 = var3.parent;
  689.             } else {
  690.                TreeNode var5 = var3.parent.left;
  691.                if (var5.color == 1) {
  692.                   var5.color = 2;
  693.                   var3.parent.color = 1;
  694.                   this.rotateRight(var3.parent);
  695.                   var5 = var3.parent.left;
  696.                }
  697.  
  698.                if (var5.right.color != 2 || var5.left.color != 2) {
  699.                   if (var5.left.color == 2) {
  700.                      var5.right.color = 2;
  701.                      var5.color = 1;
  702.                      this.rotateLeft(var5);
  703.                      var5 = var3.parent.left;
  704.                   }
  705.  
  706.                   var5.color = var3.parent.color;
  707.                   var3.parent.color = 2;
  708.                   var5.left.color = 2;
  709.                   this.rotateRight(var3.parent);
  710.                   break;
  711.                }
  712.  
  713.                var5.color = 1;
  714.                var3 = var3.parent;
  715.             }
  716.          }
  717.  
  718.          var3.color = 2;
  719.       }
  720.  
  721.       --this.size;
  722.       return var2;
  723.    }
  724. }
  725.