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 / OrderedMap.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-03-12  |  7.2 KB  |  294 lines

  1. package COM.objectspace.jgl;
  2.  
  3. import java.io.IOException;
  4. import java.io.ObjectInputStream;
  5. import java.io.ObjectOutputStream;
  6. import java.util.Enumeration;
  7.  
  8. public class OrderedMap extends Map {
  9.    transient Tree myTree;
  10.  
  11.    public OrderedMap() {
  12.       this.myTree = new Tree(true, false, this);
  13.    }
  14.  
  15.    public OrderedMap(boolean var1) {
  16.       this.myTree = new Tree(true, var1, this);
  17.    }
  18.  
  19.    public OrderedMap(BinaryPredicate var1) {
  20.       this.myTree = new Tree(true, false, var1, this);
  21.    }
  22.  
  23.    public OrderedMap(BinaryPredicate var1, boolean var2) {
  24.       this.myTree = new Tree(true, var2, var1, this);
  25.    }
  26.  
  27.    public OrderedMap(OrderedMap var1) {
  28.       synchronized(var1){}
  29.  
  30.       try {
  31.          this.myTree = new Tree(var1.myTree);
  32.       } catch (Throwable var4) {
  33.          throw var4;
  34.       }
  35.  
  36.    }
  37.  
  38.    public boolean allowsDuplicates() {
  39.       return this.myTree.myInsertAlways;
  40.    }
  41.  
  42.    public synchronized Object clone() {
  43.       return new OrderedMap(this);
  44.    }
  45.  
  46.    public synchronized void copy(OrderedMap var1) {
  47.       synchronized(var1){}
  48.  
  49.       try {
  50.          Tree var4 = this.myTree;
  51.          Tree var5 = var1.myTree;
  52.          if (var4 != var5) {
  53.             var4.clear();
  54.             var4.copyTree(var5);
  55.          }
  56.       } catch (Throwable var7) {
  57.          throw var7;
  58.       }
  59.  
  60.    }
  61.  
  62.    public synchronized String toString() {
  63.       return "OrderedMap" + Printing.toString(this.start(), this.finish());
  64.    }
  65.  
  66.    public synchronized Enumeration elements() {
  67.       Tree var1 = this.myTree;
  68.       return new OrderedMapIterator(var1, var1.myHeader.left, (OrderedMap)var1.myContainer, 3);
  69.    }
  70.  
  71.    public ForwardIterator start() {
  72.       return this.begin();
  73.    }
  74.  
  75.    public ForwardIterator finish() {
  76.       return this.end();
  77.    }
  78.  
  79.    public synchronized OrderedMapIterator begin() {
  80.       Tree var1 = this.myTree;
  81.       return new OrderedMapIterator(var1, var1.myHeader.left, (OrderedMap)var1.myContainer, 1);
  82.    }
  83.  
  84.    public synchronized OrderedMapIterator end() {
  85.       Tree var1 = this.myTree;
  86.       return new OrderedMapIterator(var1, var1.myHeader, (OrderedMap)var1.myContainer, 1);
  87.    }
  88.  
  89.    public boolean isEmpty() {
  90.       return this.myTree.size == 0;
  91.    }
  92.  
  93.    public int size() {
  94.       return this.myTree.size;
  95.    }
  96.  
  97.    public int maxSize() {
  98.       Tree var1 = this.myTree;
  99.       return Integer.MAX_VALUE;
  100.    }
  101.  
  102.    public boolean equals(Object var1) {
  103.       return var1 instanceof OrderedMap && this.equals((OrderedMap)var1);
  104.    }
  105.  
  106.    public synchronized boolean equals(OrderedMap var1) {
  107.       synchronized(var1){}
  108.  
  109.       boolean var2;
  110.       try {
  111.          var2 = this.size() == var1.size() && Comparing.equal(this.start(), this.finish(), var1.start());
  112.       } catch (Throwable var8) {
  113.          throw var8;
  114.       }
  115.  
  116.       return var2;
  117.    }
  118.  
  119.    public synchronized int hashCode() {
  120.       Tree var1 = this.myTree;
  121.       OrderedMapIterator var3 = new OrderedMapIterator(var1, var1.myHeader.left, (OrderedMap)var1.myContainer, 2);
  122.       Tree var2 = this.myTree;
  123.       OrderedMapIterator var4 = new OrderedMapIterator(var2, var2.myHeader, (OrderedMap)var2.myContainer, 2);
  124.       return Hashing.orderedHash(var3, var4);
  125.    }
  126.  
  127.    public synchronized void swap(OrderedMap var1) {
  128.       synchronized(var1){}
  129.  
  130.       try {
  131.          Tree var4 = this.myTree;
  132.          this.myTree = var1.myTree;
  133.          var1.myTree = var4;
  134.       } catch (Throwable var6) {
  135.          throw var6;
  136.       }
  137.  
  138.    }
  139.  
  140.    public synchronized void clear() {
  141.       this.myTree.clear();
  142.    }
  143.  
  144.    public synchronized Object remove(Object var1) {
  145.       return this.myTree.remove(var1).first;
  146.    }
  147.  
  148.    public synchronized int remove(Object var1, int var2) {
  149.       Pair var3 = this.myTree.remove(var1, var2);
  150.       return ((Number)var3.second).intValue();
  151.    }
  152.  
  153.    public synchronized Object remove(Enumeration var1) {
  154.       if (!(var1 instanceof OrderedMapIterator)) {
  155.          throw new IllegalArgumentException("Enumeration not an OrderedMapIterator");
  156.       } else if (((OrderedMapIterator)var1).myOrderedMap != this) {
  157.          throw new IllegalArgumentException("Enumeration not for this OrderedMap");
  158.       } else {
  159.          Tree.TreeNode var2 = this.myTree.remove(((OrderedMapIterator)var1).myNode);
  160.          return var2 == null ? null : var2.object;
  161.       }
  162.    }
  163.  
  164.    public synchronized int remove(Enumeration var1, Enumeration var2) {
  165.       if (var1 instanceof OrderedMapIterator && var2 instanceof OrderedMapIterator) {
  166.          if (((OrderedMapIterator)var1).myOrderedMap == this && ((OrderedMapIterator)var2).myOrderedMap == this) {
  167.             Tree var3 = this.myTree;
  168.             Tree.TreeNode var4 = ((OrderedMapIterator)var1).myNode;
  169.             Tree.TreeNode var5 = ((OrderedMapIterator)var2).myNode;
  170.             Pair var6 = var3.remove(var4, var5, var3.size);
  171.             return ((Number)var6.second).intValue();
  172.          } else {
  173.             throw new IllegalArgumentException("Enumeration not for this OrderedMap");
  174.          }
  175.       } else {
  176.          throw new IllegalArgumentException("Enumeration not an OrderedMapIterator");
  177.       }
  178.    }
  179.  
  180.    public synchronized OrderedMapIterator find(Object var1) {
  181.       return new OrderedMapIterator(this.myTree, this.myTree.find(var1), this, 1);
  182.    }
  183.  
  184.    public synchronized int count(Object var1) {
  185.       return this.myTree.count(var1);
  186.    }
  187.  
  188.    public synchronized int countValues(Object var1) {
  189.       Tree var2 = this.myTree;
  190.       OrderedMapIterator var10000 = new OrderedMapIterator(var2, var2.myHeader.left, (OrderedMap)var2.myContainer, 3);
  191.       var2 = this.myTree;
  192.       return Counting.count(var10000, new OrderedMapIterator(var2, var2.myHeader, (OrderedMap)var2.myContainer, 3), var1);
  193.    }
  194.  
  195.    public synchronized OrderedMapIterator lowerBound(Object var1) {
  196.       Tree var2;
  197.       return new OrderedMapIterator(var2 = this.myTree, (Tree.TreeNode)var2.equalRange(var1).first, this, 1);
  198.    }
  199.  
  200.    public synchronized OrderedMapIterator upperBound(Object var1) {
  201.       Tree var2;
  202.       return new OrderedMapIterator(var2 = this.myTree, (Tree.TreeNode)var2.equalRange(var1).second, this, 1);
  203.    }
  204.  
  205.    public synchronized Range equalRange(Object var1) {
  206.       Pair var2 = this.myTree.equalRange(var1);
  207.       return new Range(new OrderedMapIterator(this.myTree, (Tree.TreeNode)var2.first, this, 1), new OrderedMapIterator(this.myTree, (Tree.TreeNode)var2.second, this, 1));
  208.    }
  209.  
  210.    public BinaryPredicate getComparator() {
  211.       return this.myTree.myComparator;
  212.    }
  213.  
  214.    public synchronized Object get(Object var1) {
  215.       return this.myTree.get(var1);
  216.    }
  217.  
  218.    public synchronized Object put(Object var1, Object var2) {
  219.       if (var1 != null && var2 != null) {
  220.          Tree var3 = this.myTree;
  221.          Pair var4 = new Pair(var1, var2);
  222.          Tree.InsertResult var6 = var3.insertAux(var4, false);
  223.          if (var6.ok) {
  224.             return null;
  225.          } else {
  226.             var4 = (Pair)var6.node.object;
  227.             Object var5 = var4.second;
  228.             var4.second = var2;
  229.             return var5;
  230.          }
  231.       } else {
  232.          throw new NullPointerException();
  233.       }
  234.    }
  235.  
  236.    public Object add(Object var1) {
  237.       if (var1 == null) {
  238.          throw new NullPointerException();
  239.       } else if (!(var1 instanceof Pair)) {
  240.          throw new IllegalArgumentException("object is not Pair");
  241.       } else if (((Pair)var1).first != null && ((Pair)var1).second != null) {
  242.          Pair var2 = (Pair)var1;
  243.          return this.add(var2.first, var2.second);
  244.       } else {
  245.          throw new NullPointerException();
  246.       }
  247.    }
  248.  
  249.    public synchronized Object add(Object var1, Object var2) {
  250.       if (var1 != null && var2 != null) {
  251.          Tree var3 = this.myTree;
  252.          Pair var4 = new Pair(var1, var2);
  253.          Tree.InsertResult var5 = var3.insertAux(var4, true);
  254.          return var5.ok ? null : ((Pair)var5.node.object).second;
  255.       } else {
  256.          throw new NullPointerException();
  257.       }
  258.    }
  259.  
  260.    public synchronized Enumeration keys() {
  261.       Tree var1 = this.myTree;
  262.       return new OrderedMapIterator(var1, var1.myHeader.left, (OrderedMap)var1.myContainer, 2);
  263.    }
  264.  
  265.    public synchronized Enumeration keys(Object var1) {
  266.       return this.myTree.keys(var1).elements();
  267.    }
  268.  
  269.    public synchronized Enumeration values(Object var1) {
  270.       return this.myTree.values(var1).elements();
  271.    }
  272.  
  273.    private synchronized void writeObject(ObjectOutputStream var1) throws IOException {
  274.       var1.defaultWriteObject();
  275.       var1.writeBoolean(this.allowsDuplicates());
  276.       var1.writeObject(this.getComparator());
  277.       var1.writeInt(this.size());
  278.       Copying.copy(this.begin(), this.end(), new ObjectOutputStreamIterator(var1));
  279.    }
  280.  
  281.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  282.       var1.defaultReadObject();
  283.       boolean var2 = var1.readBoolean();
  284.       BinaryPredicate var3 = (BinaryPredicate)var1.readObject();
  285.       this.myTree = new Tree(true, var2, var3, this);
  286.       int var4 = var1.readInt();
  287.  
  288.       while(var4-- > 0) {
  289.          this.add(var1.readObject());
  290.       }
  291.  
  292.    }
  293. }
  294.