Main Page   Packages   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

TypedSplayTreeMap.java

00001 package ca.mcgill.sable.util;
00002 
00003 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
00004  * SableUtil, a clean room implementation of the Collection API.     *
00005  * Copyright (C) 1997, 1998 Etienne Gagnon (gagnon@sable.mcgill.ca). *
00006  * All rights reserved.                                              *
00007  *                                                                   *
00008  * This work was done as a project of the Sable Research Group,      *
00009  * School of Computer Science, McGill University, Canada             *
00010  * (http://www.sable.mcgill.ca/).  It is understood that any         *
00011  * modification not identified as such is not covered by the         *
00012  * preceding statement.                                              *
00013  *                                                                   *
00014  * This work is free software; you can redistribute it and/or        *
00015  * modify it under the terms of the GNU Library General Public       *
00016  * License as published by the Free Software Foundation; either      *
00017  * version 2 of the License, or (at your option) any later version.  *
00018  *                                                                   *
00019  * This work is distributed in the hope that it will be useful,      *
00020  * but WITHOUT ANY WARRANTY; without even the implied warranty of    *
00021  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *
00022  * Library General Public License for more details.                  *
00023  *                                                                   *
00024  * You should have received a copy of the GNU Library General Public *
00025  * License along with this library; if not, write to the             *
00026  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,      *
00027  * Boston, MA  02111-1307, USA.                                      *
00028  *                                                                   *
00029  * To submit a bug report, send a comment, or get the latest news on *
00030  * this project and other Sable Research Group projects, please      *
00031  * visit the web site: http://www.sable.mcgill.ca/                   *
00032  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
00033 
00034 /*
00035  Reference Version
00036  -----------------
00037  This is the latest official version on which this file is based.
00038  The reference version is: $SableUtilVersion: 1.11 $
00039 
00040  Change History
00041  --------------
00042  A) Notes:
00043 
00044  Please use the following template.  Most recent changes should
00045  appear at the top of the list.
00046 
00047  - Modified on [date (March 1, 1900)] by [name]. [(*) if appropriate]
00048    [description of modification].
00049 
00050  Any Modification flagged with "(*)" was done as a project of the
00051  Sable Research Group, School of Computer Science,
00052  McGill University, Canada (http://www.sable.mcgill.ca/).
00053 
00054  You should add your copyright, using the following template, at
00055  the top of this file, along with other copyrights.
00056 
00057  *                                                                   *
00058  * Modifications by [name] are                                       *
00059  * Copyright (C) [year(s)] [your name (or company)].  All rights     *
00060  * reserved.                                                         *
00061  *                                                                   *
00062 
00063  B) Changes:
00064 
00065  - Modified on June 7, 1998 by Etienne Gagnon (gagnon@sable.mcgill.ca). (*)
00066    Changed the license.
00067 */
00068 
00069 import ca.mcgill.sable.util.Map.Entry;
00070 
00071 public class TypedSplayTreeMap extends SplayTreeMap
00072 {
00073     private Cast keyCast;
00074     private Cast valueCast;
00075     private Collection entries;
00076 
00077     private class EntryCollection extends AbstractCollection
00078     {
00079         private Collection collection;
00080 
00081         EntryCollection(Collection collection)
00082         {
00083             this.collection = collection;
00084         }
00085 
00086         public int size()
00087         {
00088             return collection.size();
00089         }
00090 
00091         public Iterator iterator()
00092         {
00093             return new EntryIterator(collection.iterator());
00094         }
00095     }
00096 
00097     private class EntryIterator implements Iterator
00098     {
00099         private Iterator iterator;
00100 
00101         EntryIterator(Iterator iterator)
00102         {
00103             this.iterator = iterator;
00104         }
00105 
00106         public boolean hasNext()
00107         {
00108             return iterator.hasNext();
00109         }
00110 
00111         public Object next()
00112         {
00113             return new TypedEntry((Entry) iterator.next());
00114         }
00115 
00116         public void remove()
00117         {
00118             iterator.remove();
00119         }
00120     }
00121 
00122     private class TypedEntry extends AbstractEntry
00123     {
00124         private Entry entry;
00125 
00126         TypedEntry(Entry entry)
00127         {
00128             this.entry = entry;
00129         }
00130 
00131         public Object getKey()
00132         {
00133             return entry.getKey();
00134         }
00135 
00136         public Object getValue()
00137         {
00138             return entry.getValue();
00139         }
00140 
00141         public Object setValue(Object value)
00142         {
00143             return entry.setValue(valueCast.cast(value));
00144         }
00145     }
00146     public TypedSplayTreeMap()
00147     {
00148         super();
00149 
00150         keyCast = NoCast.instance;
00151         valueCast = NoCast.instance;
00152     }
00153     public TypedSplayTreeMap(Cast keyCast, Cast valueCast)
00154     {
00155         super();
00156 
00157         this.keyCast = keyCast;
00158         this.valueCast = valueCast;
00159     }
00160     public TypedSplayTreeMap(Comparator comparator)
00161     {
00162         super(comparator);
00163 
00164         keyCast = NoCast.instance;
00165         valueCast = NoCast.instance;
00166     }
00167     public TypedSplayTreeMap(Comparator comparator, Cast keyCast, Cast valueCast)
00168     {
00169         super(comparator);
00170 
00171         this.keyCast = keyCast;
00172         this.valueCast = valueCast;
00173     }
00174     public TypedSplayTreeMap(Map map)
00175     {
00176         super(map);
00177 
00178         keyCast = NoCast.instance;
00179         valueCast = NoCast.instance;
00180     }
00181     public TypedSplayTreeMap(Map map, Cast keyCast, Cast valueCast)
00182     {
00183         super(map);
00184 
00185         this.keyCast = keyCast;
00186         this.valueCast = valueCast;
00187     }
00188     public TypedSplayTreeMap(Map map, Comparator comparator)
00189     {
00190         super(map, comparator);
00191 
00192         keyCast = NoCast.instance;
00193         valueCast = NoCast.instance;
00194     }
00195     public TypedSplayTreeMap(Map map, Comparator comparator, Cast keyCast, Cast valueCast)
00196     {
00197         super(map, comparator);
00198 
00199         this.keyCast = keyCast;
00200         this.valueCast = valueCast;
00201     }
00202     public Object clone()
00203     {
00204         return new TypedSplayTreeMap(this, getComparator(), keyCast, valueCast);
00205     }
00206     public Collection entries()
00207     {
00208         if(entries == null)
00209         {
00210             entries = new EntryCollection(super.entries());
00211         }
00212 
00213         return entries;
00214     }
00215     public Cast getKeyCast()
00216     {
00217         return keyCast;
00218     }
00219     public Cast getValueCast()
00220     {
00221         return valueCast;
00222     }
00223     public Object put(Object key, Object value)
00224     {
00225         return super.put(keyCast.cast(key), valueCast.cast(value));
00226     }
00227 }

Generated at Thu Feb 7 06:58:45 2002 for Bandera by doxygen1.2.10 written by Dimitri van Heesch, © 1997-2001