Refactor bidimap to interface based subpackage

git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/collections/trunk@131345 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Stephen Colebourne 2003-11-16 20:35:47 +00:00
parent 1b8c22a7df
commit fc74d8d13d
23 changed files with 899 additions and 179 deletions

Binary file not shown.

Binary file not shown.

View File

@ -1,5 +1,5 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/Attic/AbstractDualBidiMap.java,v 1.11 2003/11/16 00:05:44 scolebourne Exp $
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/bidimap/AbstractDualBidiMap.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
@ -55,7 +55,7 @@
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections;
package org.apache.commons.collections.bidimap;
import java.util.Collection;
import java.util.Iterator;
@ -75,7 +75,7 @@ import org.apache.commons.collections.pairs.AbstractMapEntryDecorator;
* <code>createMap</code> method.
*
* @since Commons Collections 3.0
* @version $Id: AbstractDualBidiMap.java,v 1.11 2003/11/16 00:05:44 scolebourne Exp $
* @version $Id: AbstractDualBidiMap.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
*
* @author Matthew Hawthorne
* @author Stephen Colebourne
@ -566,7 +566,7 @@ public abstract class AbstractDualBidiMap implements BidiMap {
}
public Object next() {
last = new MapEntry((Map.Entry) iterator.next(), map);
last = (Map.Entry) iterator.next();
canRemove = true;
return last.getKey();
}

View File

@ -1,5 +1,5 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/BidiMap.java,v 1.6 2003/11/08 18:40:17 scolebourne Exp $
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/bidimap/Attic/BidiMap.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
@ -55,7 +55,7 @@
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections;
package org.apache.commons.collections.bidimap;
import java.util.Map;
@ -73,9 +73,8 @@ import org.apache.commons.collections.iterators.MapIterator;
* Implementations should allow a value to be looked up from a key and
* a key to be looked up from a value with equal performance.
*
* @see org.apache.commons.collections.DualHashBidiMap
* @since Commons Collections 3.0
* @version $Revision: 1.6 $ $Date: 2003/11/08 18:40:17 $
* @version $Revision: 1.1 $ $Date: 2003/11/16 20:35:46 $
*
* @author Stephen Colebourne
*/

View File

@ -1,5 +1,5 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/Attic/DualHashBidiMap.java,v 1.3 2003/10/10 21:06:17 scolebourne Exp $
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/bidimap/DualHashBidiMap.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
@ -55,7 +55,7 @@
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections;
package org.apache.commons.collections.bidimap;
import java.io.IOException;
import java.io.ObjectInputStream;
@ -68,7 +68,7 @@ import java.util.Map;
* Implementation of <code>BidiMap</code> that uses two <code>HashMap</code> instances.
*
* @since Commons Collections 3.0
* @version $Id: DualHashBidiMap.java,v 1.3 2003/10/10 21:06:17 scolebourne Exp $
* @version $Id: DualHashBidiMap.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
*
* @author Matthew Hawthorne
* @author Stephen Colebourne

View File

@ -1,10 +1,10 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/Attic/DualTreeBidiMap.java,v 1.3 2003/11/16 00:05:44 scolebourne Exp $
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/bidimap/DualTreeBidiMap.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights
* Copyright (c) 2001-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -55,32 +55,54 @@
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections;
package org.apache.commons.collections.bidimap;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Comparator;
import java.util.Iterator;
import java.util.ListIterator;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import org.apache.commons.collections.iterators.ListIteratorWrapper;
import org.apache.commons.collections.iterators.OrderedMapIterator;
import org.apache.commons.collections.iterators.ResettableIterator;
import org.apache.commons.collections.map.AbstractSortedMapDecorator;
import org.apache.commons.collections.map.OrderedMap;
/**
* Implementation of <code>BidiMap</code> that uses two <code>TreeMap</code> instances.
* <p>
* The setValue() method on iterators will succeed only if the new value being set is
* not already in the bidimap.
* <p>
* When considering whether to use this class, the {@link TreeBidiMap} class should
* also be considered. It implements the interface using a dedicated design, and does
* not store each object twice, which can save on memory use.
*
* @since Commons Collections 3.0
* @version $Id: DualTreeBidiMap.java,v 1.3 2003/11/16 00:05:44 scolebourne Exp $
* @version $Id: DualTreeBidiMap.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
*
* @author Matthew Hawthorne
* @author Stephen Colebourne
*/
public class DualTreeBidiMap extends AbstractDualBidiMap implements SortedBidiMap {
public class DualTreeBidiMap extends AbstractDualBidiMap implements SortedBidiMap, Serializable {
/** Ensure serialization compatability */
private static final long serialVersionUID = 721969328361809L;
/** The comparator to use */
protected final Comparator comparator;
/**
* Creates an empty <code>DualTreeBidiMap</code>
*/
public DualTreeBidiMap() {
super();
this.comparator = null;
}
/**
@ -92,6 +114,17 @@ public class DualTreeBidiMap extends AbstractDualBidiMap implements SortedBidiMa
public DualTreeBidiMap(Map map) {
super();
putAll(map);
this.comparator = null;
}
/**
* Constructs a <code>DualTreeBidiMap</code> using the specified Comparator.
*
* @param map the map whose mappings are to be placed in this map
*/
public DualTreeBidiMap(Comparator comparator) {
super();
this.comparator = comparator;
}
/**
@ -103,6 +136,7 @@ public class DualTreeBidiMap extends AbstractDualBidiMap implements SortedBidiMa
*/
protected DualTreeBidiMap(Map normalMap, Map reverseMap, BidiMap inverseBidiMap) {
super(normalMap, reverseMap, inverseBidiMap);
this.comparator = ((SortedMap) normalMap).comparator();
}
/**
@ -111,7 +145,7 @@ public class DualTreeBidiMap extends AbstractDualBidiMap implements SortedBidiMa
* @return the map to be used for internal storage
*/
protected Map createMap() {
return new TreeMap();
return new TreeMap(comparator);
}
/**
@ -126,13 +160,6 @@ public class DualTreeBidiMap extends AbstractDualBidiMap implements SortedBidiMa
return new DualTreeBidiMap(normalMap, reverseMap, inverseMap);
}
// SortedBidiMap
//-----------------------------------------------------------------------
public SortedBidiMap inverseSortedBidiMap() {
return (SortedBidiMap) inverseBidiMap();
}
// SortedMap
//-----------------------------------------------------------------------
public Comparator comparator() {
return ((SortedMap) maps[0]).comparator();
@ -146,6 +173,56 @@ public class DualTreeBidiMap extends AbstractDualBidiMap implements SortedBidiMa
return ((SortedMap) maps[0]).lastKey();
}
public Object nextKey(Object key) {
if (isEmpty()) {
return null;
}
if (maps[0] instanceof OrderedMap) {
return ((OrderedMap) maps[0]).nextKey(key);
}
SortedMap sm = (SortedMap) maps[0];
Iterator it = sm.tailMap(key).keySet().iterator();
it.next();
if (it.hasNext()) {
return it.next();
}
return null;
}
public Object previousKey(Object key) {
if (isEmpty()) {
return null;
}
if (maps[0] instanceof OrderedMap) {
return ((OrderedMap) maps[0]).previousKey(key);
}
SortedMap sm = (SortedMap) maps[0];
SortedMap hm = sm.headMap(key);
if (hm.isEmpty()) {
return null;
}
return hm.lastKey();
}
//-----------------------------------------------------------------------
/**
* Obtains an ordered map iterator.
* <p>
* This implementation copies the elements to an ArrayList in order to
* provide the forward/backward behaviour.
*/
public OrderedMapIterator orderedMapIterator() {
return new BidiOrderedMapIterator(this);
}
public SortedBidiMap inverseSortedBidiMap() {
return (SortedBidiMap) inverseBidiMap();
}
public OrderedBidiMap inverseOrderedBidiMap() {
return (OrderedBidiMap) inverseBidiMap();
}
//-----------------------------------------------------------------------
public SortedMap headMap(Object toKey) {
SortedMap sub = ((SortedMap) maps[0]).headMap(toKey);
@ -162,6 +239,7 @@ public class DualTreeBidiMap extends AbstractDualBidiMap implements SortedBidiMa
return new ViewMap(this, sub);
}
//-----------------------------------------------------------------------
protected static class ViewMap extends AbstractSortedMapDecorator {
final DualTreeBidiMap bidi;
@ -199,4 +277,95 @@ public class DualTreeBidiMap extends AbstractDualBidiMap implements SortedBidiMa
}
}
//-----------------------------------------------------------------------
/**
* Inner class MapIterator.
*/
protected static class BidiOrderedMapIterator implements OrderedMapIterator, ResettableIterator {
protected final AbstractDualBidiMap map;
protected ListIterator iterator;
private Map.Entry last = null;
protected BidiOrderedMapIterator(AbstractDualBidiMap map) {
super();
this.map = map;
iterator = new ListIteratorWrapper(map.entrySet().iterator());
}
public boolean hasNext() {
return iterator.hasNext();
}
public Object next() {
last = (Map.Entry) iterator.next();
return last.getKey();
}
public boolean hasPrevious() {
return iterator.hasPrevious();
}
public Object previous() {
last = (Map.Entry) iterator.previous();
return last.getKey();
}
public void remove() {
iterator.remove();
map.remove(last.getKey());
}
public Object getKey() {
if (last == null) {
throw new IllegalStateException("Iterator getKey() can only be called after next() and before remove()");
}
return last.getKey();
}
public Object getValue() {
if (last == null) {
throw new IllegalStateException("Iterator getValue() can only be called after next() and before remove()");
}
return last.getValue();
}
public Object setValue(Object value) {
if (last == null) {
throw new IllegalStateException("Iterator setValue() can only be called after next() and before remove()");
}
if (map.maps[1].containsKey(value) &&
map.maps[1].get(value) != last.getKey()) {
throw new IllegalArgumentException("Cannot use setValue() when the object being set is already in the map");
}
return map.put(last.getKey(), value);
}
public void reset() {
iterator = new ListIteratorWrapper(map.entrySet().iterator());
last = null;
}
public String toString() {
if (last == null) {
return "MapIterator[" + getKey() + "=" + getValue() + "]";
} else {
return "MapIterator[]";
}
}
}
// Serialization
//-----------------------------------------------------------------------
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
out.writeObject(maps[0]);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
Map map = (Map) in.readObject();
putAll(map);
}
}

View File

@ -0,0 +1,107 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/bidimap/Attic/OrderedBidiMap.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowledgement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgement may appear in the software itself,
* if and wherever such third-party acknowledgements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections.bidimap;
import org.apache.commons.collections.map.OrderedMap;
/**
* Defines a map that allows bidirectional lookup between key and values
* and retains and provides access to an ordering.
* <p>
* Implementations should allow a value to be looked up from a key and
* a key to be looked up from a value with equal performance.
*
* @since Commons Collections 3.0
* @version $Revision: 1.1 $ $Date: 2003/11/16 20:35:46 $
*
* @author Stephen Colebourne
*/
public interface OrderedBidiMap extends BidiMap, OrderedMap {
/**
* Gets a view of this map where the keys and values are reversed.
* <p>
* Changes to one map will be visible in the other and vice versa.
* This enables both directions of the map to be accessed equally.
* <p>
* Implementations should seek to avoid creating a new object every time this
* method is called. See <code>AbstractMap.values()</code> etc. Calling this
* method on the inverse map should return the original.
* <p>
* Implementations must return an <code>OrderedBidiMap</code> instance,
* usually by forwarding to <code>inverseOrderedBidiMap()</code>.
*
* @return an inverted bidirectional map
*/
public BidiMap inverseBidiMap();
/**
* Gets a view of this map where the keys and values are reversed.
* <p>
* Changes to one map will be visible in the other and vice versa.
* This enables both directions of the map to be accessed equally.
* <p>
* Implementations should seek to avoid creating a new object every time this
* method is called. See <code>AbstractMap.values()</code> etc. Calling this
* method on the inverse map should return the original.
*
* @return an inverted bidirectional map
*/
public OrderedBidiMap inverseOrderedBidiMap();
}

View File

@ -1,5 +1,5 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/SortedBidiMap.java,v 1.1 2003/09/21 15:23:04 scolebourne Exp $
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/bidimap/Attic/SortedBidiMap.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
@ -55,7 +55,7 @@
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections;
package org.apache.commons.collections.bidimap;
import java.util.SortedMap;
@ -67,11 +67,28 @@ import java.util.SortedMap;
* a key to be looked up from a value with equal performance.
*
* @since Commons Collections 3.0
* @version $Revision: 1.1 $ $Date: 2003/09/21 15:23:04 $
* @version $Revision: 1.1 $ $Date: 2003/11/16 20:35:46 $
*
* @author Stephen Colebourne
*/
public interface SortedBidiMap extends SortedMap, BidiMap {
public interface SortedBidiMap extends OrderedBidiMap, SortedMap {
/**
* Gets a view of this map where the keys and values are reversed.
* <p>
* Changes to one map will be visible in the other and vice versa.
* This enables both directions of the map to be accessed equally.
* <p>
* Implementations should seek to avoid creating a new object every time this
* method is called. See <code>AbstractMap.values()</code> etc. Calling this
* method on the inverse map should return the original.
* <p>
* Implementations must return a <code>SortedBidiMap</code> instance,
* usually by forwarding to <code>inverseSortedBidiMap()</code>.
*
* @return an inverted bidirectional map
*/
public BidiMap inverseBidiMap();
/**
* Gets a view of this map where the keys and values are reversed.
@ -82,6 +99,9 @@ public interface SortedBidiMap extends SortedMap, BidiMap {
* Implementations should seek to avoid creating a new object every time this
* method is called. See <code>AbstractMap.values()</code> etc. Calling this
* method on the inverse map should return the original.
* <p>
* The inverse map returned by <code>inverseBidiMap()</code> should be the
* same object as returned by this method.
*
* @return an inverted bidirectional map
*/

View File

@ -1,10 +1,10 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/Attic/TreeBidiMap.java,v 1.1 2003/11/08 18:52:51 scolebourne Exp $
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/bidimap/TreeBidiMap.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights
* Copyright (c) 2001-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -55,7 +55,7 @@
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections;
package org.apache.commons.collections.bidimap;
import java.util.AbstractSet;
import java.util.Collection;
@ -65,7 +65,9 @@ import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
import org.apache.commons.collections.IteratorUtils;
import org.apache.commons.collections.iterators.MapIterator;
import org.apache.commons.collections.iterators.OrderedIterator;
import org.apache.commons.collections.iterators.OrderedMapIterator;
import org.apache.commons.collections.pairs.UnmodifiableMapEntry;
@ -84,21 +86,17 @@ import org.apache.commons.collections.pairs.UnmodifiableMapEntry;
* and redirecting requests to the appropriate TreeMap (e.g.,
* containsKey would be directed to the TreeMap that maps values to
* keys, containsValue would be directed to the TreeMap that maps keys
* to values), there are problems with that implementation,
* particularly when trying to keep the two TreeMaps synchronized with
* each other. And if the data contained in the TreeMaps is large, the
* cost of redundant storage becomes significant. (See also the
* {@link org.apache.commons.collections.DualTreeBidiMap DualTreeBidiMap} and
* {@link org.apache.commons.collections.DualHashBidiMap DualHashBidiMap}
* implementations.)
* to values), there are problems with that implementation.
* If the data contained in the TreeMaps is large, the cost of redundant
* storage becomes significant. The {@link DualTreeBidiMap} and
* {@link DualHashBidiMap} implementations use this approach.
* <p>
* This solution keeps the data properly synchronized and minimizes
* the data storage. The red-black algorithm is based on TreeMap's,
* but has been modified to simultaneously map a tree node by key and
* by value. This doubles the cost of put operations (but so does
* using two TreeMaps), and nearly doubles the cost of remove
* operations (there is a savings in that the lookup of the node to be
* removed only has to be performed once). And since only one node
* This solution keeps minimizes the data storage by holding data only once.
* The red-black algorithm is based on java util TreeMap, but has been modified
* to simultaneously map a tree node by key and by value. This doubles the
* cost of put operations (but so does using two TreeMaps), and nearly doubles
* the cost of remove operations (there is a savings in that the lookup of the
* node to be removed only has to be performed once). And since only one node
* contains the key and value, storage is significantly less than that
* required by two TreeMaps.
* <p>
@ -106,16 +104,13 @@ import org.apache.commons.collections.pairs.UnmodifiableMapEntry;
* not allow setValue() and will throw an
* UnsupportedOperationException on attempts to call that method.
*
* @see BidiMap
* @see DualTreeBidiMap
* @see DualHashBidiMap
* @since Commons Collections 2.0 (previously DoubleOrderedMap)
* @version $Revision: 1.1 $ $Date: 2003/11/08 18:52:51 $
* @since Commons Collections 3.0 (previously DoubleOrderedMap v2.0)
* @version $Revision: 1.1 $ $Date: 2003/11/16 20:35:46 $
*
* @author Marc Johnson
* @author Stephen Colebourne
*/
public class TreeBidiMap implements BidiMap {
public class TreeBidiMap implements OrderedBidiMap {
private static final int KEY = 0;
private static final int VALUE = 1;
@ -429,17 +424,41 @@ public class TreeBidiMap implements BidiMap {
*/
public MapIterator mapIterator() {
if (isEmpty()) {
return IteratorUtils.EMPTY_MAP_ITERATOR;
return IteratorUtils.EMPTY_ORDERED_MAP_ITERATOR;
}
return new ViewMapIterator(this, KEY);
}
/**
* Gets an ordered iterator over the map entries.
* <p>
* This iterator allows both forward and reverse iteration over the entries.
*
* @return an iterator
*/
public OrderedMapIterator orderedMapIterator() {
if (isEmpty()) {
return IteratorUtils.EMPTY_ORDERED_MAP_ITERATOR;
}
return new ViewMapIterator(this, KEY);
}
//-----------------------------------------------------------------------
/**
* Gets the inverse map for comparison.
*
* @return the inverse map
*/
public BidiMap inverseBidiMap() {
return inverseOrderedBidiMap();
}
/**
* Gets the inverse map for comparison.
*
* @return the inverse map
*/
public BidiMap inverseBidiMap() {
public OrderedBidiMap inverseOrderedBidiMap() {
if (inverse == null) {
inverse = new Inverse(this);
}
@ -1508,7 +1527,7 @@ public class TreeBidiMap implements BidiMap {
/**
* An iterator over the map.
*/
static class ViewIterator implements Iterator {
static class ViewIterator implements OrderedIterator {
protected final TreeBidiMap main;
protected final int orderType;
@ -1913,7 +1932,7 @@ public class TreeBidiMap implements BidiMap {
/**
* A node used to store the data.
*/
static class Inverse implements BidiMap {
static class Inverse implements OrderedBidiMap {
private final TreeBidiMap main;
private Set keySet;
@ -1949,6 +1968,32 @@ public class TreeBidiMap implements BidiMap {
return main.containsKey(value);
}
public Object firstKey() {
if (main.nodeCount == 0) {
throw new NoSuchElementException("Map is empty");
}
return main.leastNode(main.rootNode[VALUE], VALUE).getValue();
}
public Object lastKey() {
if (main.nodeCount == 0) {
throw new NoSuchElementException("Map is empty");
}
return main.greatestNode(main.rootNode[VALUE], VALUE).getValue();
}
public Object nextKey(Object key) {
checkKey(key);
Node node = main.nextGreater(main.lookup((Comparable) key, VALUE), VALUE);
return (node == null ? null : node.getValue());
}
public Object previousKey(Object key) {
checkKey(key);
Node node = main.nextSmaller(main.lookup((Comparable) key, VALUE), VALUE);
return (node == null ? null : node.getValue());
}
public Object put(final Object key, final Object value) {
return main.doPut((Comparable) value, (Comparable) key, VALUE);
}
@ -1996,7 +2041,14 @@ public class TreeBidiMap implements BidiMap {
public MapIterator mapIterator() {
if (isEmpty()) {
return IteratorUtils.EMPTY_MAP_ITERATOR;
return IteratorUtils.EMPTY_ORDERED_MAP_ITERATOR;
}
return new ViewMapIterator(main, VALUE);
}
public OrderedMapIterator orderedMapIterator() {
if (isEmpty()) {
return IteratorUtils.EMPTY_ORDERED_MAP_ITERATOR;
}
return new ViewMapIterator(main, VALUE);
}
@ -2005,6 +2057,10 @@ public class TreeBidiMap implements BidiMap {
return main;
}
public OrderedBidiMap inverseOrderedBidiMap() {
return main;
}
public boolean equals(Object obj) {
return main.doEquals(obj, VALUE);
}

View File

@ -0,0 +1,25 @@
<BODY>
<p>
This package contains implementations of the BidiMap, OrderedBidiMap and SortedBidiMap interfaces.
<p>
The implementations are in the form of direct implementations and decorators.
A decorator wraps another implementation of the interface to add some
specific additional functionality.
<p>
The following implementations are provided in the package:
<ul>
<li>DualHash - uses two HashMaps to implement BidiMap
<li>DualTree - uses two TreeMaps to implement SortedBidiMap
<li>Tree - red-black tree implementation of OrderedBidiMap
<!--
<li>Synchronized - synchronizes method access for multi-threaded environments
<li>Unmodifiable - ensures the collection cannot be altered
<li>Predicated - ensures that only elements that are valid according to a predicate can be added
<li>Typed - ensures that only elements that are of a specific type can be added
<li>Transformed - transforms each element added
<li>FixedSize - ensures that the size of the map cannot change
<li>Lazy - creates objects in the map on demand
<li>ListOrdered - ensures that insertion order is retained-->
</ul>
</pre>
</BODY>

View File

@ -0,0 +1,127 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/map/Attic/OrderedMap.java,v 1.1 2003/11/16 20:35:47 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowledgement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgement may appear in the software itself,
* if and wherever such third-party acknowledgements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections.map;
import java.util.Map;
import org.apache.commons.collections.iterators.OrderedMapIterator;
/**
* Defines a map that maintains order and allows both forward and backward
* iteration through that order.
*
* @since Commons Collections 3.0
* @version $Revision: 1.1 $ $Date: 2003/11/16 20:35:47 $
*
* @author Stephen Colebourne
*/
public interface OrderedMap extends Map {
/**
* Obtains an <code>OrderedMapIterator</code> over the map.
* <p>
* A ordered map iterator is an efficient way of iterating over maps
* in both directions.
* <pre>
* BidiMap map = new TreeBidiMap();
* MapIterator it = map.mapIterator();
* while (it.hasNext()) {
* Object key = it.next();
* Object value = it.getValue();
* it.setValue("newValue");
* Object previousKey = it.previous();
* }
* </pre>
*
* @return a map iterator
*/
OrderedMapIterator orderedMapIterator();
/**
* Gets the first key currently in this map.
*
* @return the first key currently in this map
* @throws NoSuchElementException if this map is empty
*/
public Object firstKey();
/**
* Gets the last key currently in this map.
*
* @return the last key currently in this map
* @throws NoSuchElementException if this map is empty
*/
public Object lastKey();
/**
* Gets the next key after the one specified.
*
* @param key the key to search for next from
* @return the next key, null if no match or at end
*/
public Object nextKey(Object key);
/**
* Gets the previous key before the one specified.
*
* @param key the key to search for previous from
* @return the previous key, null if no match or at start
*/
public Object previousKey(Object key);
}

View File

@ -1,5 +1,5 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/TestAll.java,v 1.53 2003/11/08 18:52:51 scolebourne Exp $
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/TestAll.java,v 1.54 2003/11/16 20:35:46 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
@ -64,7 +64,7 @@ import junit.framework.TestSuite;
/**
* Entry point for all Collections package tests.
*
* @version $Revision: 1.53 $ $Date: 2003/11/08 18:52:51 $
* @version $Revision: 1.54 $ $Date: 2003/11/16 20:35:46 $
*
* @author Rodney Waldhoff
* @author Stephen Colebourne
@ -96,8 +96,6 @@ public class TestAll extends TestCase {
suite.addTest(TestCommonsLinkedList.suite());
suite.addTest(TestCursorableLinkedList.suite());
suite.addTest(TestDoubleOrderedMap.suite());
suite.addTest(TestDualHashBidiMap.suite());
suite.addTest(TestDualTreeBidiMap.suite());
suite.addTest(TestExtendedProperties.suite());
suite.addTest(TestFastArrayList.suite());
suite.addTest(TestFastArrayList1.suite());
@ -115,7 +113,6 @@ public class TestAll extends TestCase {
suite.addTest(TestSequencedHashMap.suite());
suite.addTest(TestStaticBucketMap.suite());
suite.addTest(TestTreeBag.suite());
suite.addTest(TestTreeBidiMap.suite());
suite.addTest(TestUnboundedFifoBuffer.suite());
suite.addTest(TestEnumerationUtils.suite());
return suite;

View File

@ -1,5 +1,5 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/TestAllPackages.java,v 1.6 2003/11/16 00:05:47 scolebourne Exp $
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/TestAllPackages.java,v 1.7 2003/11/16 20:35:46 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
@ -64,7 +64,7 @@ import junit.framework.TestSuite;
/**
* Entry point for all Collections project tests.
*
* @version $Revision: 1.6 $ $Date: 2003/11/16 00:05:47 $
* @version $Revision: 1.7 $ $Date: 2003/11/16 20:35:46 $
*
* @author Stephen Colebourne
*/
@ -77,6 +77,7 @@ public class TestAllPackages extends TestCase {
TestSuite suite = new TestSuite();
suite.addTest(org.apache.commons.collections.TestAll.suite());
suite.addTest(org.apache.commons.collections.bag.TestAll.suite());
suite.addTest(org.apache.commons.collections.bidimap.TestAll.suite());
suite.addTest(org.apache.commons.collections.buffer.TestAll.suite());
suite.addTest(org.apache.commons.collections.comparators.TestAll.suite());
suite.addTest(org.apache.commons.collections.collection.TestAll.suite());

View File

@ -1,5 +1,5 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/Attic/AbstractTestBidiMap.java,v 1.8 2003/11/08 18:46:57 scolebourne Exp $
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/bidimap/AbstractTestBidiMap.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
@ -55,7 +55,7 @@
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections;
package org.apache.commons.collections.bidimap;
import java.util.Collection;
import java.util.HashMap;
@ -63,13 +63,15 @@ import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.apache.commons.collections.AbstractTestMap;
import org.apache.commons.collections.BulkTest;
import org.apache.commons.collections.iterators.AbstractTestMapIterator;
import org.apache.commons.collections.iterators.MapIterator;
/**
* Abstract test class for {@link BidiMap} methods and contracts.
*
* @version $Revision: 1.8 $ $Date: 2003/11/08 18:46:57 $
* @version $Revision: 1.1 $ $Date: 2003/11/16 20:35:46 $
*
* @author Matthew Hawthorne
* @author Stephen Colebourne

View File

@ -1,5 +1,5 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/Attic/TestTreeBidiMap.java,v 1.1 2003/11/08 18:52:51 scolebourne Exp $
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/bidimap/AbstractTestOrderedBidiMap.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
@ -55,109 +55,82 @@
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections;
package org.apache.commons.collections.bidimap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.TreeMap;
import junit.framework.Test;
import junit.textui.TestRunner;
import org.apache.commons.collections.iterators.MapIterator;
import org.apache.commons.collections.iterators.OrderedMapIterator;
/**
* JUnit tests.
* Abstract test class for {@link OrderedBidiMap} methods and contracts.
*
* @version $Revision: 1.1 $ $Date: 2003/11/08 18:52:51 $
* @version $Revision: 1.1 $ $Date: 2003/11/16 20:35:46 $
*
* @author Matthew Hawthorne
* @author Stephen Colebourne
*/
public class TestTreeBidiMap extends AbstractTestBidiMap {
public abstract class AbstractTestOrderedBidiMap extends AbstractTestBidiMap {
public static void main(String[] args) {
TestRunner.run(suite());
}
public static Test suite() {
return BulkTest.makeSuite(TestTreeBidiMap.class);
}
public TestTreeBidiMap(String testName) {
public AbstractTestOrderedBidiMap(String testName) {
super(testName);
}
protected BidiMap makeEmptyBidiMap() {
return new TreeBidiMap();
}
protected Map makeConfirmedMap() {
return new TreeMap();
public AbstractTestOrderedBidiMap() {
super();
}
/**
* Override to prevent infinite recursion of tests.
*/
protected String[] ignoredTests() {
return new String[] {"TestTreeBidiMap.bulkTestInverseMap.bulkTestInverseMap"};
}
protected boolean isAllowNullKey() {
return false;
}
protected boolean isAllowNullValue() {
return false;
}
protected boolean isSetValueSupported() {
return false;
}
//-----------------------------------------------------------------------
public void testFirstKey() {
TreeBidiMap bidi = (TreeBidiMap) makeEmptyMap();
resetEmpty();
OrderedBidiMap bidi = (OrderedBidiMap) map;
try {
bidi.firstKey();
fail();
} catch (NoSuchElementException ex) {}
resetFull();
bidi = (TreeBidiMap) map;
bidi = (OrderedBidiMap) map;
Object confirmedFirst = confirmed.keySet().iterator().next();
assertEquals(confirmedFirst, bidi.firstKey());
}
public void testLastKey() {
TreeBidiMap bidi = (TreeBidiMap) makeEmptyMap();
resetEmpty();
OrderedBidiMap bidi = (OrderedBidiMap) map;
try {
bidi.lastKey();
fail();
} catch (NoSuchElementException ex) {}
resetFull();
bidi = (TreeBidiMap) map;
bidi = (OrderedBidiMap) map;
Object confirmedLast = null;
for (Iterator it = confirmed.keySet().iterator(); it.hasNext();) {
confirmedLast = it.next();
}
assertEquals(confirmedLast, bidi.lastKey());
}
//-----------------------------------------------------------------------
public void testNextKey() {
TreeBidiMap bidi = (TreeBidiMap) makeEmptyMap();
try {
bidi.nextKey(null);
fail();
} catch (NullPointerException ex) {}
try {
bidi.nextKey(new Object());
fail();
} catch (ClassCastException ex) {}
resetEmpty();
OrderedBidiMap bidi = (OrderedBidiMap) map;
assertEquals(null, bidi.nextKey(getOtherKeys()[0]));
if (isAllowNullKey() == false) {
try {
assertEquals(null, bidi.nextKey(null)); // this is allowed too
} catch (NullPointerException ex) {}
} else {
assertEquals(null, bidi.nextKey(null));
}
resetFull();
bidi = (TreeBidiMap) map;
bidi = (OrderedBidiMap) map;
Iterator it = confirmed.keySet().iterator();
Object confirmedLast = it.next();
while (it.hasNext()) {
@ -167,29 +140,30 @@ public class TestTreeBidiMap extends AbstractTestBidiMap {
}
assertEquals(null, bidi.nextKey(confirmedLast));
try {
bidi.nextKey(null);
fail();
} catch (NullPointerException ex) {}
try {
bidi.nextKey(new Object());
fail();
} catch (ClassCastException ex) {}
if (isAllowNullKey() == false) {
try {
bidi.nextKey(null);
fail();
} catch (NullPointerException ex) {}
} else {
assertEquals(null, bidi.nextKey(null));
}
}
public void testPreviousKey() {
TreeBidiMap bidi = (TreeBidiMap) makeEmptyMap();
try {
bidi.previousKey(null);
fail();
} catch (NullPointerException ex) {}
try {
bidi.previousKey(new Object());
fail();
} catch (ClassCastException ex) {}
resetEmpty();
OrderedBidiMap bidi = (OrderedBidiMap) map;
assertEquals(null, bidi.previousKey(getOtherKeys()[0]));
if (isAllowNullKey() == false) {
try {
assertEquals(null, bidi.previousKey(null)); // this is allowed too
} catch (NullPointerException ex) {}
} else {
assertEquals(null, bidi.previousKey(null));
}
resetFull();
bidi = (TreeBidiMap) map;
bidi = (OrderedBidiMap) map;
List list = new ArrayList(confirmed.keySet());
Collections.reverse(list);
Iterator it = list.iterator();
@ -201,14 +175,45 @@ public class TestTreeBidiMap extends AbstractTestBidiMap {
}
assertEquals(null, bidi.previousKey(confirmedLast));
try {
bidi.previousKey(null);
fail();
} catch (NullPointerException ex) {}
try {
bidi.previousKey(new Object());
fail();
} catch (ClassCastException ex) {}
if (isAllowNullKey() == false) {
try {
bidi.previousKey(null);
fail();
} catch (NullPointerException ex) {}
} else {
assertEquals(null, bidi.previousKey(null));
}
}
//-----------------------------------------------------------------------
public void testMapIteratorOrder() {
resetFull();
OrderedBidiMap bidi = (OrderedBidiMap) map;
List ordered = new ArrayList(map.keySet());
List ordered2 = new ArrayList(map.keySet());
assertEquals("KeySet iterator is not consistent", ordered, ordered2);
int i = 0;
for (MapIterator it = bidi.mapIterator(); it.hasNext(); i++) {
Object key = (Object) it.next();
assertEquals("Inconsistent order", ordered.get(i), key);
assertEquals("Incorrect value for key", bidi.get(key), it.getValue());
}
i = 0;
OrderedMapIterator it = bidi.orderedMapIterator();
for (; it.hasNext(); i++) {
Object key = (Object) it.next();
assertEquals("Inconsistent order", ordered.get(i), key);
assertEquals("Incorrect value for key", bidi.get(key), it.getValue());
assertEquals(true, it.hasPrevious());
}
i--;
for (; it.hasPrevious(); i--) {
Object key = (Object) it.previous();
assertEquals("Inconsistent order", ordered.get(i), key);
assertEquals("Incorrect value for key", bidi.get(key), it.getValue());
assertEquals(true, it.hasNext());
}
}
}

View File

@ -1,5 +1,5 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/Attic/AbstractTestSortedBidiMap.java,v 1.2 2003/11/01 18:47:18 scolebourne Exp $
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/bidimap/AbstractTestSortedBidiMap.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
@ -55,7 +55,7 @@
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections;
package org.apache.commons.collections.bidimap;
import java.util.ArrayList;
import java.util.Arrays;
@ -69,17 +69,19 @@ import java.util.SortedSet;
import java.util.TreeMap;
import java.util.TreeSet;
import org.apache.commons.collections.AbstractTestSortedMap;
import org.apache.commons.collections.BulkTest;
import org.apache.commons.collections.pairs.DefaultMapEntry;
/**
* Abstract test class for {@link BidiMap} methods and contracts.
*
* @version $Revision: 1.2 $ $Date: 2003/11/01 18:47:18 $
* @version $Revision: 1.1 $ $Date: 2003/11/16 20:35:46 $
*
* @author Matthew Hawthorne
* @author Stephen Colebourne
*/
public abstract class AbstractTestSortedBidiMap extends AbstractTestBidiMap {
public abstract class AbstractTestSortedBidiMap extends AbstractTestOrderedBidiMap {
protected List sortedKeys = new ArrayList();
protected List sortedValues = new ArrayList();
@ -128,21 +130,6 @@ public abstract class AbstractTestSortedBidiMap extends AbstractTestBidiMap {
return new TreeMap();
}
//-----------------------------------------------------------------------
public void testFirstKey() {
SortedMap sm = (SortedMap) makeFullMap();
assertSame(sm.keySet().iterator().next(), sm.firstKey());
}
public void testLastKey() {
SortedMap sm = (SortedMap) makeFullMap();
Object obj = null;
for (Iterator it = sm.keySet().iterator(); it.hasNext();) {
obj = (Object) it.next();
}
assertSame(obj, sm.lastKey());
}
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
public void testBidiHeadMapContains() {

View File

@ -0,0 +1,93 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/bidimap/TestAll.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowledgement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgement may appear in the software itself,
* if and wherever such third-party acknowledgements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections.bidimap;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Entry point for tests.
*
* @since Commons Collections 3.0
* @version $Revision: 1.1 $ $Date: 2003/11/16 20:35:46 $
*
* @author Stephen Colebourne
*/
public class TestAll extends TestCase {
public TestAll(String testName) {
super(testName);
}
public static void main(String args[]) {
String[] testCaseName = { TestAll.class.getName() };
junit.textui.TestRunner.main(testCaseName);
}
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(TestDualHashBidiMap.suite());
suite.addTest(TestDualTreeBidiMap.suite());
suite.addTest(TestTreeBidiMap.suite());
return suite;
}
}

View File

@ -1,5 +1,5 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/Attic/TestDualHashBidiMap.java,v 1.2 2003/10/10 21:11:39 scolebourne Exp $
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/bidimap/TestDualHashBidiMap.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
@ -55,15 +55,17 @@
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections;
package org.apache.commons.collections.bidimap;
import junit.framework.Test;
import junit.textui.TestRunner;
import org.apache.commons.collections.BulkTest;
/**
* JUnit tests.
*
* @version $Revision: 1.2 $ $Date: 2003/10/10 21:11:39 $
* @version $Revision: 1.1 $ $Date: 2003/11/16 20:35:46 $
*
* @author Matthew Hawthorne
* @author Stephen Colebourne
@ -93,4 +95,10 @@ public class TestDualHashBidiMap extends AbstractTestBidiMap {
return new String[] {"TestDualHashBidiMap.bulkTestInverseMap.bulkTestInverseMap"};
}
// public void testCreate() throws Exception {
// resetEmpty();
// writeExternalFormToDisk((Serializable) map, "D:/dev/collections/data/test/DualHashBidiMap.emptyCollection.version3.obj");
// resetFull();
// writeExternalFormToDisk((Serializable) map, "D:/dev/collections/data/test/DualHashBidiMap.fullCollection.version3.obj");
// }
}

View File

@ -1,5 +1,5 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/Attic/TestDualTreeBidiMap.java,v 1.1 2003/10/31 01:26:25 scolebourne Exp $
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/bidimap/TestDualTreeBidiMap.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
@ -55,15 +55,17 @@
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections;
package org.apache.commons.collections.bidimap;
import junit.framework.Test;
import junit.textui.TestRunner;
import org.apache.commons.collections.BulkTest;
/**
* JUnit tests.
*
* @version $Revision: 1.1 $ $Date: 2003/10/31 01:26:25 $
* @version $Revision: 1.1 $ $Date: 2003/11/16 20:35:46 $
*
* @author Matthew Hawthorne
* @author Stephen Colebourne
@ -93,4 +95,10 @@ public class TestDualTreeBidiMap extends AbstractTestSortedBidiMap {
return new String[] {"TestDualTreeBidiMap.bulkTestInverseMap.bulkTestInverseMap"};
}
// public void testCreate() throws Exception {
// resetEmpty();
// writeExternalFormToDisk((Serializable) map, "D:/dev/collections/data/test/DualTreeBidiMap.emptyCollection.version3.obj");
// resetFull();
// writeExternalFormToDisk((Serializable) map, "D:/dev/collections/data/test/DualTreeBidiMap.fullCollection.version3.obj");
// }
}

View File

@ -0,0 +1,116 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/bidimap/TestTreeBidiMap.java,v 1.1 2003/11/16 20:35:46 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowledgement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgement may appear in the software itself,
* if and wherever such third-party acknowledgements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections.bidimap;
import java.util.Map;
import java.util.TreeMap;
import junit.framework.Test;
import junit.textui.TestRunner;
import org.apache.commons.collections.BulkTest;
/**
* JUnit tests.
*
* @version $Revision: 1.1 $ $Date: 2003/11/16 20:35:46 $
*
* @author Stephen Colebourne
*/
public class TestTreeBidiMap extends AbstractTestBidiMap {
public static void main(String[] args) {
TestRunner.run(suite());
}
public static Test suite() {
return BulkTest.makeSuite(TestTreeBidiMap.class);
}
public TestTreeBidiMap(String testName) {
super(testName);
}
protected BidiMap makeEmptyBidiMap() {
return new TreeBidiMap();
}
protected Map makeConfirmedMap() {
return new TreeMap();
}
/**
* Override to prevent infinite recursion of tests.
*/
protected String[] ignoredTests() {
return new String[] {"TestTreeBidiMap.bulkTestInverseMap.bulkTestInverseMap"};
}
protected boolean isAllowNullKey() {
return false;
}
protected boolean isAllowNullValue() {
return false;
}
protected boolean isSetValueSupported() {
return false;
}
}

View File

@ -1,5 +1,5 @@
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/iterators/TestUnmodifiableMapIterator.java,v 1.2 2003/11/08 18:46:57 scolebourne Exp $
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/iterators/TestUnmodifiableMapIterator.java,v 1.3 2003/11/16 20:35:47 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
@ -63,14 +63,14 @@ import java.util.Map;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.apache.commons.collections.BidiMap;
import org.apache.commons.collections.DualHashBidiMap;
import org.apache.commons.collections.Unmodifiable;
import org.apache.commons.collections.bidimap.BidiMap;
import org.apache.commons.collections.bidimap.DualHashBidiMap;
/**
* Tests the UnmodifiableMapIterator.
*
* @version $Revision: 1.2 $ $Date: 2003/11/08 18:46:57 $
* @version $Revision: 1.3 $ $Date: 2003/11/16 20:35:47 $
*
* @author Stephen Colebourne
*/