// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: packimports(3) fieldsfirst lnc
// Source File Name: BinaryTree.java
package com.icl.saxon.sort;
import java.io.PrintStream;
import java.util.Vector;
// Referenced classes of package com.icl.saxon.sort:
// StringComparer, UppercaseFirstComparer, DoubleComparer, Comparer
public class BinaryTree
{
private class BinaryTreeNode
{
BinaryTreeNode left;
BinaryTreeNode right;
Object key;
Object value;
public boolean isDeleted()
{
/* 284*/ return value == null;
}
public void delete()
{
/* 287*/ value = null;
}
public BinaryTreeNode(Object obj, Object obj1)
{
/* 277*/ left = null;
/* 278*/ right = null;
/* 279*/ key = obj;
/* 280*/ value = obj1;
}
}
private BinaryTreeNode root;
private Comparer comparer;
private BinaryTreeNode prev;
private boolean ascending;
private boolean allowDuplicates;
public BinaryTree()
{
/* 49*/ root = null;
/* 50*/ ascending = true;
/* 51*/ allowDuplicates = false;
}
public void setAscending(boolean flag)
{
/* 61*/ ascending = flag;
}
public void setDuplicatesAllowed(boolean flag)
{
/* 71*/ allowDuplicates = flag;
}
public void setComparer(Comparer comparer1)
{
/* 80*/ if(isEmpty())
/* 80*/ comparer = comparer1;
}
public Vector getValues()
{
/* 89*/ BinaryTreeNode binarytreenode = root;
/* 90*/ Vector vector = new Vector();
/* 91*/ getValues(root, vector);
/* 92*/ return vector;
}
private void getValues(BinaryTreeNode binarytreenode, Vector vector)
{
/* 101*/ if(binarytreenode != null)
{
/* 102*/ getValues(binarytreenode.left, vector);
/* 103*/ if(!binarytreenode.isDeleted())
/* 104*/ vector.addElement(binarytreenode.value);
/* 106*/ getValues(binarytreenode.right, vector);
}
}
public Vector getKeys()
{
/* 116*/ BinaryTreeNode binarytreenode = root;
/* 117*/ Vector vector = new Vector();
/* 118*/ getKeys(root, vector);
/* 119*/ return vector;
}
private void getKeys(BinaryTreeNode binarytreenode, Vector vector)
{
/* 128*/ if(binarytreenode != null)
{
/* 129*/ getKeys(binarytreenode.left, vector);
/* 130*/ if(!binarytreenode.isDeleted())
/* 131*/ vector.addElement(binarytreenode.key);
/* 133*/ getKeys(binarytreenode.right, vector);
}
}
public Object get(Object obj)
{
/* 146*/ BinaryTreeNode binarytreenode = find(obj);
/* 147*/ return binarytreenode != null ? binarytreenode.value : null;
}
public boolean isEmpty()
{
/* 157*/ return size() == 0;
}
public Object put(Object obj, Object obj1)
{
/* 170*/ if(obj == null || obj1 == null)
/* 170*/ throw new NullPointerException();
/* 172*/ BinaryTreeNode binarytreenode = root;
/* 174*/ if(comparer == null)
/* 175*/ comparer = new StringComparer();
/* 178*/ if(root == null)
{
/* 179*/ root = new BinaryTreeNode(obj, obj1);
/* 180*/ return null;
}
/* 183*/ do
{
int i;
/* 183*/ do
{
/* 183*/ i = comparer.compare(binarytreenode.key, obj);
/* 184*/ if(!ascending)
/* 184*/ i = 0 - i;
/* 185*/ if(i == 0 && allowDuplicates)
/* 185*/ i = -1;
/* 186*/ if(i > 0)
{
/* 187*/ if(binarytreenode.left == null)
{
/* 188*/ binarytreenode.left = new BinaryTreeNode(obj, obj1);
/* 189*/ return null;
}
/* 191*/ binarytreenode = binarytreenode.left;
}
/* 193*/ if(i == 0)
{
/* 194*/ Object obj2 = binarytreenode.value;
/* 195*/ binarytreenode.value = obj1;
/* 196*/ return obj2;
}
} while(i >= 0);
/* 199*/ if(binarytreenode.right == null)
{
/* 200*/ binarytreenode.right = new BinaryTreeNode(obj, obj1);
/* 201*/ return null;
}
/* 203*/ binarytreenode = binarytreenode.right;
} while(true);
}
public Object remove(Object obj)
{
/* 221*/ BinaryTreeNode binarytreenode = find(obj);
/* 223*/ if(binarytreenode == null)
{
/* 223*/ return null;
} else
{
/* 224*/ Object obj1 = binarytreenode.value;
/* 225*/ binarytreenode.delete();
/* 226*/ return obj1;
}
}
public int size()
{
/* 236*/ return count(root);
}
private int count(BinaryTreeNode binarytreenode)
{
/* 245*/ if(binarytreenode == null)
/* 245*/ return 0;
/* 246*/ else
/* 246*/ return count(binarytreenode.left) + (binarytreenode.isDeleted() ? 0 : 1) + count(binarytreenode.right);
}
private BinaryTreeNode find(Object obj)
{
/* 255*/ BinaryTreeNode binarytreenode = root;
/* 257*/ if(binarytreenode == null)
/* 257*/ return null;
/* 259*/ while(binarytreenode != null)
{
/* 259*/ int i = comparer.compare(obj, binarytreenode.key);
/* 260*/ if(i < 0)
/* 260*/ binarytreenode = binarytreenode.left;
/* 261*/ if(i == 0)
/* 261*/ return binarytreenode.isDeleted() ? null : binarytreenode;
/* 262*/ if(i > 0)
/* 262*/ binarytreenode = binarytreenode.right;
}
/* 264*/ return null;
}
public static void main(String args[])
throws Exception
{
/* 298*/ BinaryTree binarytree = new BinaryTree();
/* 299*/ binarytree.setComparer(new UppercaseFirstComparer());
/* 300*/ binarytree.setAscending(true);
/* 301*/ binarytree.setDuplicatesAllowed(true);
/* 302*/ binarytree.put("a", "1");
/* 303*/ binarytree.put("b", "2");
/* 304*/ binarytree.put("c", "3");
/* 305*/ binarytree.put("aa", "4");
/* 306*/ binarytree.put("ab", "5");
/* 307*/ binarytree.put("A", "6");
/* 308*/ binarytree.put("A", "6a");
/* 309*/ binarytree.put("B", "7");
/* 310*/ binarytree.put("AA", "8");
/* 311*/ binarytree.put("XYZ", "9");
/* 312*/ binarytree.put("", "10");
/* 313*/ System.out.println(binarytree.getKeys());
/* 314*/ System.out.println(binarytree.getValues());
/* 316*/ binarytree = new BinaryTree();
/* 317*/ binarytree.setComparer(new DoubleComparer());
/* 318*/ binarytree.setAscending(false);
/* 319*/ binarytree.put(new Double(1.4299999999999999D), "1");
/* 320*/ binarytree.put(new Double(84.200000000000003D), "2");
/* 321*/ binarytree.put(new Double(-100D), "3");
/* 322*/ binarytree.put(new Double(0.0D), "4");
/* 323*/ System.out.println(binarytree.getKeys());
/* 324*/ System.out.println(binarytree.getValues());
}
}