[trove] 06/28: * move the package to main * new upstream version * fix the patch for build.xml * clean up * update debian/watch and implement get-orig-source in debian/rules * fix Build-Depends
Emmanuel Bourg
ebourg-guest at moszumanska.debian.org
Wed Apr 18 16:54:16 BST 2018
This is an automated email from the git hooks/post-receive script.
ebourg-guest pushed a commit to branch master
in repository trove.
commit d8be64f13e256b58356b179d15624f603252ca62
Author: Torsten Werner <twerner at debian.org>
Date: Fri Oct 12 17:06:54 2007 +0000
* move the package to main
* new upstream version
* fix the patch for build.xml
* clean up
* update debian/watch and implement get-orig-source in debian/rules
* fix Build-Depends
---
debian/README.Debian | 16 -
debian/ant.properties | 1 -
debian/changelog | 2 +-
debian/control | 8 +-
debian/libtrove-java.dirs | 1 -
debian/orig-tar.sh | 19 +
debian/patches/01_build_target_5_0.patch | 22 +-
debian/patches/10_output_gen_src.patch | 64974 -----------------------------
debian/rules | 28 +-
debian/watch | 6 +-
10 files changed, 51 insertions(+), 65026 deletions(-)
diff --git a/debian/README.Debian b/debian/README.Debian
deleted file mode 100644
index 7ade544..0000000
--- a/debian/README.Debian
+++ /dev/null
@@ -1,16 +0,0 @@
-trove
------
-
-This package is in contrib because I've not been able to generate some
-source code. I've been obliged to generate sources from a Windows
-installation, then put the generated sources as patches.
-
-Don't forget to update the generated sources when upgrading the package
-
-The package will be able to move to main when some java sources will be
-generated by the build process. I already contacted the author but there
-is no sollution at the moment:
-
-http://sourceforge.net/tracker/index.php?func=detail&aid=1699401&group_id=39235&atid=424685
-
- -- Arnaud Vandyck <avdyk at debian.org>, Thu, 7 Jun 2007 17:04:23 +0200
diff --git a/debian/ant.properties b/debian/ant.properties
deleted file mode 100644
index 3f3d5ed..0000000
--- a/debian/ant.properties
+++ /dev/null
@@ -1 +0,0 @@
-jar_name trove-2.0a2.jar
diff --git a/debian/changelog b/debian/changelog
index 74064a1..53f76e2 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-trove (2.0~a2.dfsg.1-1) unstable; urgency=low
+trove (2.0.1.dfsg.1-1) unstable; urgency=low
* Initial Release (closes: #418678).
diff --git a/debian/control b/debian/control
index c8601e5..1233ce2 100644
--- a/debian/control
+++ b/debian/control
@@ -1,13 +1,13 @@
Source: trove
-Section: contrib/libs
+Section: libs
Priority: optional
Maintainer: Debian Java Maintainers <pkg-java-maintainers at lists.alioth.debian.org>
Uploaders: Arnaud Vandyck <avdyk at debian.org>
-Build-Depends-Indep: debhelper (>= 4.2.30), java-gcj-compat-dev (>= 1.0.69-2), ant, cdbs
+Build-Depends: debhelper (>= 4.2.30), cdbs
+Build-Depends-Indep: java-gcj-compat-dev (>= 1.0.69-2), ant
Standards-Version: 3.7.2
Package: libtrove-java
-Section: contrib/libs
Architecture: all
Depends: java-gcj-compat | java2-runtime
Description: high performance collections for java
@@ -23,7 +23,7 @@ Description: high performance collections for java
significant performance gains.
Package: libtrove-java-doc
-Section: contrib/doc
+Section: doc
Architecture: all
Suggests: libtrove-java
Description: high performance collections for java
diff --git a/debian/libtrove-java.dirs b/debian/libtrove-java.dirs
deleted file mode 100644
index 13c9f03..0000000
--- a/debian/libtrove-java.dirs
+++ /dev/null
@@ -1 +0,0 @@
-usr/share/java
diff --git a/debian/orig-tar.sh b/debian/orig-tar.sh
new file mode 100755
index 0000000..40800c4
--- /dev/null
+++ b/debian/orig-tar.sh
@@ -0,0 +1,19 @@
+#!/bin/sh -e
+
+# called by uscan with '--upstream-version' <version> <file>
+
+VERSION=$(dpkg-parsechangelog | sed -ne 's/^Version: \(.*\)-.*/\1/p')
+TAR=../trove_$VERSION.orig.tar.gz
+
+# clean up the upstream tarball
+tar -x -z -f $3
+tar -c -z -f $TAR --exclude '*.jar' --exclude '*/javadocs/*' trove-*/
+rm -rf $3 trove-*/
+
+# move to directory 'tarballs'
+if [ -r .svn/deb-layout ]; then
+ . .svn/deb-layout
+ mv $TAR $origDir
+ echo "moved $TAR to $origDir"
+fi
+
diff --git a/debian/patches/01_build_target_5_0.patch b/debian/patches/01_build_target_5_0.patch
index d97ab2d..f08a097 100644
--- a/debian/patches/01_build_target_5_0.patch
+++ b/debian/patches/01_build_target_5_0.patch
@@ -1,26 +1,28 @@
---- build.xml~ 2006-12-07 19:08:24.000000000 +0000
-+++ build.xml 2007-04-12 16:09:41.500000000 +0000
-@@ -78,6 +78,7 @@
+diff -Nur trove-2.0.1.dfsg.1/build.xml trove-2.0.1.dfsg.1.new/build.xml
+--- trove-2.0.1.dfsg.1/build.xml 2007-10-03 18:24:20.000000000 +0200
++++ trove-2.0.1.dfsg.1.new/build.xml 2007-10-12 15:19:42.000000000 +0200
+@@ -79,7 +79,7 @@
<target name="compile" depends="generate">
<javac destdir="${output.dest}"
classpath="${lib}/junit.jar"
-+ source="1.5"
- debug="on">
+- debug="${debug}" target="1.5">
++ debug="${debug}" source="1.5" target="1.5">
<src path="${src}"/>
<src path="${output.generated}"/>
-@@ -182,7 +183,7 @@
+ </javac>
+@@ -206,7 +206,7 @@
<echo message="output.dest = ${output.dest}"/>
-- <javac destdir="${output.tests}" debug="on">
-+ <javac destdir="${output.tests}" debug="on" source="1.5">
+- <javac destdir="${output.tests}" debug="${debug}" target="1.5">
++ <javac destdir="${output.tests}" debug="${debug}" source="1.5" target="1.5">
<src path="${test_src}"/>
<classpath>
<pathelement location="${lib}/junit.jar"/>
-@@ -244,4 +245,4 @@
+@@ -268,4 +268,4 @@
<echo message="----------- ${Name} ${version} [${year}] ------------"/>
</target>
-</project>
-\ No newline at end of file
+\ Kein Zeilenumbruch am Dateiende.
+</project>
diff --git a/debian/patches/10_output_gen_src.patch b/debian/patches/10_output_gen_src.patch
deleted file mode 100644
index 829a41e..0000000
--- a/debian/patches/10_output_gen_src.patch
+++ /dev/null
@@ -1,64974 +0,0 @@
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TByteByteHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TByteByteHashMap;
-+import gnu.trove.TByteByteIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TByteByteHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TByteByteHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TByteByteHashMapDecorator extends AbstractMap<Byte, Byte>
-+ implements Map<Byte, Byte>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TByteByteHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TByteByteHashMapDecorator(TByteByteHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TByteByteHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TByteByteHashMapDecorator clone() {
-+ try {
-+ TByteByteHashMapDecorator copy = (TByteByteHashMapDecorator) super.clone();
-+ copy._map = (TByteByteHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Byte(0) if none was found.
-+ */
-+ public Byte put(Byte key, Byte value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Byte && val instanceof Byte) {
-+ byte k = unwrapKey(key);
-+ byte v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Byte get(Byte key) {
-+ byte k = unwrapKey(key);
-+ byte v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Byte(0) if it was not found in the map
-+ */
-+ public Byte remove(Byte key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Byte,Byte>> entrySet() {
-+ return new AbstractSet<Map.Entry<Byte,Byte>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TByteByteHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TByteByteHashMapDecorator.this.containsKey(k)
-+ && TByteByteHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Byte,Byte>> iterator() {
-+ return new Iterator<Map.Entry<Byte,Byte>>() {
-+ private final TByteByteIterator it = _map.iterator();
-+
-+ public Map.Entry<Byte,Byte> next() {
-+ it.advance();
-+ final Byte key = wrapKey(it.key());
-+ final Byte v = wrapValue(it.value());
-+ return new Map.Entry<Byte,Byte>() {
-+ private Byte val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Byte getKey() {
-+ return key;
-+ }
-+
-+ public Byte getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Byte setValue(Byte value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Byte o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Byte, Byte>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TByteByteHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Byte, ? extends Byte> map) {
-+ Iterator<? extends Entry<? extends Byte,? extends Byte>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Byte,? extends Byte> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Byte wrapKey(byte k) {
-+ return new Byte(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected byte unwrapKey(Object key) {
-+ return ((Byte)key).byteValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Byte wrapValue(byte k) {
-+ return new Byte(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected byte unwrapValue(Object value) {
-+ return ((Byte)value).byteValue();
-+ }
-+
-+} // TByteByteHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TByteDoubleHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TByteDoubleHashMap;
-+import gnu.trove.TByteDoubleIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TByteDoubleHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TByteDoubleHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TByteDoubleHashMapDecorator extends AbstractMap<Byte, Double>
-+ implements Map<Byte, Double>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TByteDoubleHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TByteDoubleHashMapDecorator(TByteDoubleHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TByteDoubleHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TByteDoubleHashMapDecorator clone() {
-+ try {
-+ TByteDoubleHashMapDecorator copy = (TByteDoubleHashMapDecorator) super.clone();
-+ copy._map = (TByteDoubleHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Double(0) if none was found.
-+ */
-+ public Double put(Byte key, Double value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Byte && val instanceof Double) {
-+ byte k = unwrapKey(key);
-+ double v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Double get(Byte key) {
-+ byte k = unwrapKey(key);
-+ double v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Double(0) if it was not found in the map
-+ */
-+ public Double remove(Byte key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Byte,Double>> entrySet() {
-+ return new AbstractSet<Map.Entry<Byte,Double>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TByteDoubleHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TByteDoubleHashMapDecorator.this.containsKey(k)
-+ && TByteDoubleHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Byte,Double>> iterator() {
-+ return new Iterator<Map.Entry<Byte,Double>>() {
-+ private final TByteDoubleIterator it = _map.iterator();
-+
-+ public Map.Entry<Byte,Double> next() {
-+ it.advance();
-+ final Byte key = wrapKey(it.key());
-+ final Double v = wrapValue(it.value());
-+ return new Map.Entry<Byte,Double>() {
-+ private Double val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Byte getKey() {
-+ return key;
-+ }
-+
-+ public Double getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Double setValue(Double value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Double o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Byte, Double>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TByteDoubleHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Byte, ? extends Double> map) {
-+ Iterator<? extends Entry<? extends Byte,? extends Double>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Byte,? extends Double> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Byte wrapKey(byte k) {
-+ return new Byte(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected byte unwrapKey(Object key) {
-+ return ((Byte)key).byteValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Double wrapValue(double k) {
-+ return new Double(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected double unwrapValue(Object value) {
-+ return ((Double)value).doubleValue();
-+ }
-+
-+} // TByteDoubleHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TByteFloatHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TByteFloatHashMap;
-+import gnu.trove.TByteFloatIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TByteFloatHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TByteFloatHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TByteFloatHashMapDecorator extends AbstractMap<Byte, Float>
-+ implements Map<Byte, Float>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TByteFloatHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TByteFloatHashMapDecorator(TByteFloatHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TByteFloatHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TByteFloatHashMapDecorator clone() {
-+ try {
-+ TByteFloatHashMapDecorator copy = (TByteFloatHashMapDecorator) super.clone();
-+ copy._map = (TByteFloatHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Float(0) if none was found.
-+ */
-+ public Float put(Byte key, Float value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Byte && val instanceof Float) {
-+ byte k = unwrapKey(key);
-+ float v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Float get(Byte key) {
-+ byte k = unwrapKey(key);
-+ float v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Float(0) if it was not found in the map
-+ */
-+ public Float remove(Byte key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Byte,Float>> entrySet() {
-+ return new AbstractSet<Map.Entry<Byte,Float>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TByteFloatHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TByteFloatHashMapDecorator.this.containsKey(k)
-+ && TByteFloatHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Byte,Float>> iterator() {
-+ return new Iterator<Map.Entry<Byte,Float>>() {
-+ private final TByteFloatIterator it = _map.iterator();
-+
-+ public Map.Entry<Byte,Float> next() {
-+ it.advance();
-+ final Byte key = wrapKey(it.key());
-+ final Float v = wrapValue(it.value());
-+ return new Map.Entry<Byte,Float>() {
-+ private Float val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Byte getKey() {
-+ return key;
-+ }
-+
-+ public Float getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Float setValue(Float value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Float o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Byte, Float>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TByteFloatHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Byte, ? extends Float> map) {
-+ Iterator<? extends Entry<? extends Byte,? extends Float>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Byte,? extends Float> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Byte wrapKey(byte k) {
-+ return new Byte(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected byte unwrapKey(Object key) {
-+ return ((Byte)key).byteValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Float wrapValue(float k) {
-+ return new Float(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected float unwrapValue(Object value) {
-+ return ((Float)value).floatValue();
-+ }
-+
-+} // TByteFloatHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TByteHashSetDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,209 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TByteHashSet;
-+import gnu.trove.TByteIterator;
-+
-+import java.util.AbstractSet;
-+import java.util.Iterator;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TByteHashSet conform to the <tt>java.util.Set</tt> API.
-+ * This class simply decorates an underlying TByteHashSet and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Tue Sep 24 22:08:17 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TByteHashSetDecorator extends AbstractSet<Byte> implements Set<Byte> {
-+ /** the wrapped primitive set */
-+ protected TByteHashSet _set;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive set.
-+ */
-+ public TByteHashSetDecorator(TByteHashSet set) {
-+ super();
-+ this._set = set;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the set wrapped by this decorator.
-+ */
-+ public TByteHashSet getSet() {
-+ return _set;
-+ }
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TByteHashSetDecorator clone() {
-+ try {
-+ TByteHashSetDecorator copy = (TByteHashSetDecorator) super.clone();
-+ copy._set = (TByteHashSet) _set.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable
-+ }
-+ }
-+
-+ /**
-+ * Inserts a value into the set.
-+ *
-+ * @param value true if the set was modified by the insertion
-+ */
-+ public boolean add(Byte value) {
-+ return _set.add(unwrap(value));
-+ }
-+
-+ /**
-+ * Compares this set with another set for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the sets are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_set.equals(other)) {
-+ return true; // comparing two trove sets
-+ } else if (other instanceof Set) {
-+ Set that = (Set) other;
-+ if (that.size() != _set.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Object val = it.next();
-+ if (val instanceof Byte) {
-+ byte v = unwrap(val);
-+ if (_set.contains(v)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other set
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Empties the set.
-+ */
-+ public void clear() {
-+ this._set.clear();
-+ }
-+
-+ /**
-+ * Deletes a value from the set.
-+ *
-+ * @param value an <code>Object</code> value
-+ * @return true if the set was modified
-+ */
-+ public boolean remove(Object value) {
-+ return _set.remove(unwrap(value));
-+ }
-+
-+ /**
-+ * Creates an iterator over the values of the set.
-+ *
-+ * @return an iterator with support for removals in the underlying set
-+ */
-+ public Iterator<Byte> iterator() {
-+ return new Iterator<Byte>() {
-+ private final TByteIterator it = _set.iterator();
-+
-+ public Byte next() {
-+ return wrap(it.next());
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Returns the number of entries in the set.
-+ *
-+ * @return the set's size.
-+ */
-+ public int size() {
-+ return this._set.size();
-+ }
-+
-+ /**
-+ * Indicates whether set has any entries.
-+ *
-+ * @return true if the set is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying set
-+ * @return an Object representation of the value
-+ */
-+ protected Byte wrap(byte k) {
-+ return new Byte(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected byte unwrap(Object value) {
-+ return ((Byte) value).byteValue();
-+ }
-+} // TByteHashSetDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TByteIntHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TByteIntHashMap;
-+import gnu.trove.TByteIntIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TByteIntHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TByteIntHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TByteIntHashMapDecorator extends AbstractMap<Byte, Integer>
-+ implements Map<Byte, Integer>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TByteIntHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TByteIntHashMapDecorator(TByteIntHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TByteIntHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TByteIntHashMapDecorator clone() {
-+ try {
-+ TByteIntHashMapDecorator copy = (TByteIntHashMapDecorator) super.clone();
-+ copy._map = (TByteIntHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public Integer put(Byte key, Integer value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Byte && val instanceof Integer) {
-+ byte k = unwrapKey(key);
-+ int v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Integer get(Byte key) {
-+ byte k = unwrapKey(key);
-+ int v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public Integer remove(Byte key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Byte,Integer>> entrySet() {
-+ return new AbstractSet<Map.Entry<Byte,Integer>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TByteIntHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TByteIntHashMapDecorator.this.containsKey(k)
-+ && TByteIntHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Byte,Integer>> iterator() {
-+ return new Iterator<Map.Entry<Byte,Integer>>() {
-+ private final TByteIntIterator it = _map.iterator();
-+
-+ public Map.Entry<Byte,Integer> next() {
-+ it.advance();
-+ final Byte key = wrapKey(it.key());
-+ final Integer v = wrapValue(it.value());
-+ return new Map.Entry<Byte,Integer>() {
-+ private Integer val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Byte getKey() {
-+ return key;
-+ }
-+
-+ public Integer getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Integer setValue(Integer value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Integer o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Byte, Integer>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TByteIntHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Byte, ? extends Integer> map) {
-+ Iterator<? extends Entry<? extends Byte,? extends Integer>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Byte,? extends Integer> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Byte wrapKey(byte k) {
-+ return new Byte(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected byte unwrapKey(Object key) {
-+ return ((Byte)key).byteValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Integer wrapValue(int k) {
-+ return new Integer(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected int unwrapValue(Object value) {
-+ return ((Integer)value).intValue();
-+ }
-+
-+} // TByteIntHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TByteLongHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TByteLongHashMap;
-+import gnu.trove.TByteLongIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TByteLongHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TByteLongHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TByteLongHashMapDecorator extends AbstractMap<Byte, Long>
-+ implements Map<Byte, Long>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TByteLongHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TByteLongHashMapDecorator(TByteLongHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TByteLongHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TByteLongHashMapDecorator clone() {
-+ try {
-+ TByteLongHashMapDecorator copy = (TByteLongHashMapDecorator) super.clone();
-+ copy._map = (TByteLongHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Long(0) if none was found.
-+ */
-+ public Long put(Byte key, Long value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Byte && val instanceof Long) {
-+ byte k = unwrapKey(key);
-+ long v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Long get(Byte key) {
-+ byte k = unwrapKey(key);
-+ long v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Long(0) if it was not found in the map
-+ */
-+ public Long remove(Byte key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Byte,Long>> entrySet() {
-+ return new AbstractSet<Map.Entry<Byte,Long>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TByteLongHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TByteLongHashMapDecorator.this.containsKey(k)
-+ && TByteLongHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Byte,Long>> iterator() {
-+ return new Iterator<Map.Entry<Byte,Long>>() {
-+ private final TByteLongIterator it = _map.iterator();
-+
-+ public Map.Entry<Byte,Long> next() {
-+ it.advance();
-+ final Byte key = wrapKey(it.key());
-+ final Long v = wrapValue(it.value());
-+ return new Map.Entry<Byte,Long>() {
-+ private Long val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Byte getKey() {
-+ return key;
-+ }
-+
-+ public Long getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Long setValue(Long value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Long o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Byte, Long>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TByteLongHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Byte, ? extends Long> map) {
-+ Iterator<? extends Entry<? extends Byte,? extends Long>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Byte,? extends Long> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Byte wrapKey(byte k) {
-+ return new Byte(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected byte unwrapKey(Object key) {
-+ return ((Byte)key).byteValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Long wrapValue(long k) {
-+ return new Long(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected long unwrapValue(Object value) {
-+ return ((Long)value).longValue();
-+ }
-+
-+} // TByteLongHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TByteObjectHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,365 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TByteObjectHashMap;
-+import gnu.trove.TByteObjectIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TByteObjectHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TByteObjectHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TByteObjectHashMapDecorator<V> extends AbstractMap<Byte, V>
-+ implements Map<Byte, V>, Cloneable {
-+
-+ /**
-+ * the wrapped primitive map
-+ */
-+ protected TByteObjectHashMap<V> _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TByteObjectHashMapDecorator(TByteObjectHashMap<V> map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TByteObjectHashMap<V> getMap() {
-+ return _map;
-+ }
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TByteObjectHashMapDecorator clone() {
-+ try {
-+ TByteObjectHashMapDecorator copy = (TByteObjectHashMapDecorator) super.clone();
-+ copy._map = (TByteObjectHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public V put(Byte key, V value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Byte) {
-+ byte k = unwrapKey(key);
-+ Object v = unwrapValue((V) val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public V get(Object key) {
-+ return _map.get(unwrapKey(key));
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public V remove(Object key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Byte,V>> entrySet() {
-+ return new AbstractSet<Map.Entry<Byte,V>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TByteObjectHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TByteObjectHashMapDecorator.this.containsKey(k) &&
-+ TByteObjectHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Byte,V>> iterator() {
-+ return new Iterator<Map.Entry<Byte,V>>() {
-+ private final TByteObjectIterator<V> it = _map.iterator();
-+
-+ public Map.Entry<Byte,V> next() {
-+ it.advance();
-+ final Byte key = wrapKey(it.key());
-+ final V v = wrapValue(it.value());
-+ return new Map.Entry<Byte,V>() {
-+ private V val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Byte getKey() {
-+ return key;
-+ }
-+
-+ public V getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public V setValue(V value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Map.Entry<Byte,V> o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Byte,V>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TByteObjectHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue((V) val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Byte, ? extends V> map) {
-+ Iterator<? extends Entry<? extends Byte,? extends V>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Byte,? extends V> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Byte wrapKey(byte k) {
-+ return new Byte(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected byte unwrapKey(Object key) {
-+ return ((Byte)key).byteValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param o value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected final V wrapValue(V o) {
-+ return o;
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected final V unwrapValue(V value) {
-+ return value;
-+ }
-+
-+} // TByteObjectHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TByteShortHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TByteShortHashMap;
-+import gnu.trove.TByteShortIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TByteShortHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TByteShortHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TByteShortHashMapDecorator extends AbstractMap<Byte, Short>
-+ implements Map<Byte, Short>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TByteShortHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TByteShortHashMapDecorator(TByteShortHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TByteShortHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TByteShortHashMapDecorator clone() {
-+ try {
-+ TByteShortHashMapDecorator copy = (TByteShortHashMapDecorator) super.clone();
-+ copy._map = (TByteShortHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Short(0) if none was found.
-+ */
-+ public Short put(Byte key, Short value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Byte && val instanceof Short) {
-+ byte k = unwrapKey(key);
-+ short v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Short get(Byte key) {
-+ byte k = unwrapKey(key);
-+ short v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Short(0) if it was not found in the map
-+ */
-+ public Short remove(Byte key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Byte,Short>> entrySet() {
-+ return new AbstractSet<Map.Entry<Byte,Short>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TByteShortHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TByteShortHashMapDecorator.this.containsKey(k)
-+ && TByteShortHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Byte,Short>> iterator() {
-+ return new Iterator<Map.Entry<Byte,Short>>() {
-+ private final TByteShortIterator it = _map.iterator();
-+
-+ public Map.Entry<Byte,Short> next() {
-+ it.advance();
-+ final Byte key = wrapKey(it.key());
-+ final Short v = wrapValue(it.value());
-+ return new Map.Entry<Byte,Short>() {
-+ private Short val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Byte getKey() {
-+ return key;
-+ }
-+
-+ public Short getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Short setValue(Short value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Short o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Byte, Short>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TByteShortHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Byte, ? extends Short> map) {
-+ Iterator<? extends Entry<? extends Byte,? extends Short>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Byte,? extends Short> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Byte wrapKey(byte k) {
-+ return new Byte(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected byte unwrapKey(Object key) {
-+ return ((Byte)key).byteValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Short wrapValue(short k) {
-+ return new Short(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected short unwrapValue(Object value) {
-+ return ((Short)value).shortValue();
-+ }
-+
-+} // TByteShortHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TDoubleByteHashMapDecorator.java 2007-04-18 06:49:34.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TDoubleByteHashMap;
-+import gnu.trove.TDoubleByteIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TDoubleByteHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TDoubleByteHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TDoubleByteHashMapDecorator extends AbstractMap<Double, Byte>
-+ implements Map<Double, Byte>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TDoubleByteHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TDoubleByteHashMapDecorator(TDoubleByteHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TDoubleByteHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TDoubleByteHashMapDecorator clone() {
-+ try {
-+ TDoubleByteHashMapDecorator copy = (TDoubleByteHashMapDecorator) super.clone();
-+ copy._map = (TDoubleByteHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Byte(0) if none was found.
-+ */
-+ public Byte put(Double key, Byte value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Double && val instanceof Byte) {
-+ double k = unwrapKey(key);
-+ byte v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Byte get(Double key) {
-+ double k = unwrapKey(key);
-+ byte v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Byte(0) if it was not found in the map
-+ */
-+ public Byte remove(Double key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Double,Byte>> entrySet() {
-+ return new AbstractSet<Map.Entry<Double,Byte>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TDoubleByteHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TDoubleByteHashMapDecorator.this.containsKey(k)
-+ && TDoubleByteHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Double,Byte>> iterator() {
-+ return new Iterator<Map.Entry<Double,Byte>>() {
-+ private final TDoubleByteIterator it = _map.iterator();
-+
-+ public Map.Entry<Double,Byte> next() {
-+ it.advance();
-+ final Double key = wrapKey(it.key());
-+ final Byte v = wrapValue(it.value());
-+ return new Map.Entry<Double,Byte>() {
-+ private Byte val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Double getKey() {
-+ return key;
-+ }
-+
-+ public Byte getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Byte setValue(Byte value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Byte o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Double, Byte>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TDoubleByteHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Double, ? extends Byte> map) {
-+ Iterator<? extends Entry<? extends Double,? extends Byte>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Double,? extends Byte> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Double wrapKey(double k) {
-+ return new Double(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected double unwrapKey(Object key) {
-+ return ((Double)key).doubleValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Byte wrapValue(byte k) {
-+ return new Byte(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected byte unwrapValue(Object value) {
-+ return ((Byte)value).byteValue();
-+ }
-+
-+} // TDoubleByteHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TDoubleDoubleHashMapDecorator.java 2007-04-18 06:49:34.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TDoubleDoubleHashMap;
-+import gnu.trove.TDoubleDoubleIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TDoubleDoubleHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TDoubleDoubleHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TDoubleDoubleHashMapDecorator extends AbstractMap<Double, Double>
-+ implements Map<Double, Double>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TDoubleDoubleHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TDoubleDoubleHashMapDecorator(TDoubleDoubleHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TDoubleDoubleHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TDoubleDoubleHashMapDecorator clone() {
-+ try {
-+ TDoubleDoubleHashMapDecorator copy = (TDoubleDoubleHashMapDecorator) super.clone();
-+ copy._map = (TDoubleDoubleHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Double(0) if none was found.
-+ */
-+ public Double put(Double key, Double value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Double && val instanceof Double) {
-+ double k = unwrapKey(key);
-+ double v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Double get(Double key) {
-+ double k = unwrapKey(key);
-+ double v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Double(0) if it was not found in the map
-+ */
-+ public Double remove(Double key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Double,Double>> entrySet() {
-+ return new AbstractSet<Map.Entry<Double,Double>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TDoubleDoubleHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TDoubleDoubleHashMapDecorator.this.containsKey(k)
-+ && TDoubleDoubleHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Double,Double>> iterator() {
-+ return new Iterator<Map.Entry<Double,Double>>() {
-+ private final TDoubleDoubleIterator it = _map.iterator();
-+
-+ public Map.Entry<Double,Double> next() {
-+ it.advance();
-+ final Double key = wrapKey(it.key());
-+ final Double v = wrapValue(it.value());
-+ return new Map.Entry<Double,Double>() {
-+ private Double val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Double getKey() {
-+ return key;
-+ }
-+
-+ public Double getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Double setValue(Double value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Double o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Double, Double>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TDoubleDoubleHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Double, ? extends Double> map) {
-+ Iterator<? extends Entry<? extends Double,? extends Double>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Double,? extends Double> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Double wrapKey(double k) {
-+ return new Double(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected double unwrapKey(Object key) {
-+ return ((Double)key).doubleValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Double wrapValue(double k) {
-+ return new Double(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected double unwrapValue(Object value) {
-+ return ((Double)value).doubleValue();
-+ }
-+
-+} // TDoubleDoubleHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TDoubleFloatHashMapDecorator.java 2007-04-18 06:49:34.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TDoubleFloatHashMap;
-+import gnu.trove.TDoubleFloatIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TDoubleFloatHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TDoubleFloatHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TDoubleFloatHashMapDecorator extends AbstractMap<Double, Float>
-+ implements Map<Double, Float>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TDoubleFloatHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TDoubleFloatHashMapDecorator(TDoubleFloatHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TDoubleFloatHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TDoubleFloatHashMapDecorator clone() {
-+ try {
-+ TDoubleFloatHashMapDecorator copy = (TDoubleFloatHashMapDecorator) super.clone();
-+ copy._map = (TDoubleFloatHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Float(0) if none was found.
-+ */
-+ public Float put(Double key, Float value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Double && val instanceof Float) {
-+ double k = unwrapKey(key);
-+ float v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Float get(Double key) {
-+ double k = unwrapKey(key);
-+ float v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Float(0) if it was not found in the map
-+ */
-+ public Float remove(Double key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Double,Float>> entrySet() {
-+ return new AbstractSet<Map.Entry<Double,Float>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TDoubleFloatHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TDoubleFloatHashMapDecorator.this.containsKey(k)
-+ && TDoubleFloatHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Double,Float>> iterator() {
-+ return new Iterator<Map.Entry<Double,Float>>() {
-+ private final TDoubleFloatIterator it = _map.iterator();
-+
-+ public Map.Entry<Double,Float> next() {
-+ it.advance();
-+ final Double key = wrapKey(it.key());
-+ final Float v = wrapValue(it.value());
-+ return new Map.Entry<Double,Float>() {
-+ private Float val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Double getKey() {
-+ return key;
-+ }
-+
-+ public Float getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Float setValue(Float value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Float o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Double, Float>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TDoubleFloatHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Double, ? extends Float> map) {
-+ Iterator<? extends Entry<? extends Double,? extends Float>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Double,? extends Float> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Double wrapKey(double k) {
-+ return new Double(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected double unwrapKey(Object key) {
-+ return ((Double)key).doubleValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Float wrapValue(float k) {
-+ return new Float(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected float unwrapValue(Object value) {
-+ return ((Float)value).floatValue();
-+ }
-+
-+} // TDoubleFloatHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TDoubleHashSetDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,209 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TDoubleHashSet;
-+import gnu.trove.TDoubleIterator;
-+
-+import java.util.AbstractSet;
-+import java.util.Iterator;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TDoubleHashSet conform to the <tt>java.util.Set</tt> API.
-+ * This class simply decorates an underlying TDoubleHashSet and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Tue Sep 24 22:08:17 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TDoubleHashSetDecorator extends AbstractSet<Double> implements Set<Double> {
-+ /** the wrapped primitive set */
-+ protected TDoubleHashSet _set;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive set.
-+ */
-+ public TDoubleHashSetDecorator(TDoubleHashSet set) {
-+ super();
-+ this._set = set;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the set wrapped by this decorator.
-+ */
-+ public TDoubleHashSet getSet() {
-+ return _set;
-+ }
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TDoubleHashSetDecorator clone() {
-+ try {
-+ TDoubleHashSetDecorator copy = (TDoubleHashSetDecorator) super.clone();
-+ copy._set = (TDoubleHashSet) _set.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable
-+ }
-+ }
-+
-+ /**
-+ * Inserts a value into the set.
-+ *
-+ * @param value true if the set was modified by the insertion
-+ */
-+ public boolean add(Double value) {
-+ return _set.add(unwrap(value));
-+ }
-+
-+ /**
-+ * Compares this set with another set for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the sets are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_set.equals(other)) {
-+ return true; // comparing two trove sets
-+ } else if (other instanceof Set) {
-+ Set that = (Set) other;
-+ if (that.size() != _set.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Object val = it.next();
-+ if (val instanceof Double) {
-+ double v = unwrap(val);
-+ if (_set.contains(v)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other set
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Empties the set.
-+ */
-+ public void clear() {
-+ this._set.clear();
-+ }
-+
-+ /**
-+ * Deletes a value from the set.
-+ *
-+ * @param value an <code>Object</code> value
-+ * @return true if the set was modified
-+ */
-+ public boolean remove(Object value) {
-+ return _set.remove(unwrap(value));
-+ }
-+
-+ /**
-+ * Creates an iterator over the values of the set.
-+ *
-+ * @return an iterator with support for removals in the underlying set
-+ */
-+ public Iterator<Double> iterator() {
-+ return new Iterator<Double>() {
-+ private final TDoubleIterator it = _set.iterator();
-+
-+ public Double next() {
-+ return wrap(it.next());
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Returns the number of entries in the set.
-+ *
-+ * @return the set's size.
-+ */
-+ public int size() {
-+ return this._set.size();
-+ }
-+
-+ /**
-+ * Indicates whether set has any entries.
-+ *
-+ * @return true if the set is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying set
-+ * @return an Object representation of the value
-+ */
-+ protected Double wrap(double k) {
-+ return new Double(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected double unwrap(Object value) {
-+ return ((Double) value).doubleValue();
-+ }
-+} // TDoubleHashSetDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TDoubleIntHashMapDecorator.java 2007-04-18 06:49:34.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TDoubleIntHashMap;
-+import gnu.trove.TDoubleIntIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TDoubleIntHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TDoubleIntHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TDoubleIntHashMapDecorator extends AbstractMap<Double, Integer>
-+ implements Map<Double, Integer>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TDoubleIntHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TDoubleIntHashMapDecorator(TDoubleIntHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TDoubleIntHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TDoubleIntHashMapDecorator clone() {
-+ try {
-+ TDoubleIntHashMapDecorator copy = (TDoubleIntHashMapDecorator) super.clone();
-+ copy._map = (TDoubleIntHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public Integer put(Double key, Integer value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Double && val instanceof Integer) {
-+ double k = unwrapKey(key);
-+ int v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Integer get(Double key) {
-+ double k = unwrapKey(key);
-+ int v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public Integer remove(Double key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Double,Integer>> entrySet() {
-+ return new AbstractSet<Map.Entry<Double,Integer>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TDoubleIntHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TDoubleIntHashMapDecorator.this.containsKey(k)
-+ && TDoubleIntHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Double,Integer>> iterator() {
-+ return new Iterator<Map.Entry<Double,Integer>>() {
-+ private final TDoubleIntIterator it = _map.iterator();
-+
-+ public Map.Entry<Double,Integer> next() {
-+ it.advance();
-+ final Double key = wrapKey(it.key());
-+ final Integer v = wrapValue(it.value());
-+ return new Map.Entry<Double,Integer>() {
-+ private Integer val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Double getKey() {
-+ return key;
-+ }
-+
-+ public Integer getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Integer setValue(Integer value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Integer o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Double, Integer>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TDoubleIntHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Double, ? extends Integer> map) {
-+ Iterator<? extends Entry<? extends Double,? extends Integer>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Double,? extends Integer> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Double wrapKey(double k) {
-+ return new Double(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected double unwrapKey(Object key) {
-+ return ((Double)key).doubleValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Integer wrapValue(int k) {
-+ return new Integer(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected int unwrapValue(Object value) {
-+ return ((Integer)value).intValue();
-+ }
-+
-+} // TDoubleIntHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TDoubleLongHashMapDecorator.java 2007-04-18 06:49:34.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TDoubleLongHashMap;
-+import gnu.trove.TDoubleLongIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TDoubleLongHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TDoubleLongHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TDoubleLongHashMapDecorator extends AbstractMap<Double, Long>
-+ implements Map<Double, Long>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TDoubleLongHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TDoubleLongHashMapDecorator(TDoubleLongHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TDoubleLongHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TDoubleLongHashMapDecorator clone() {
-+ try {
-+ TDoubleLongHashMapDecorator copy = (TDoubleLongHashMapDecorator) super.clone();
-+ copy._map = (TDoubleLongHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Long(0) if none was found.
-+ */
-+ public Long put(Double key, Long value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Double && val instanceof Long) {
-+ double k = unwrapKey(key);
-+ long v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Long get(Double key) {
-+ double k = unwrapKey(key);
-+ long v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Long(0) if it was not found in the map
-+ */
-+ public Long remove(Double key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Double,Long>> entrySet() {
-+ return new AbstractSet<Map.Entry<Double,Long>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TDoubleLongHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TDoubleLongHashMapDecorator.this.containsKey(k)
-+ && TDoubleLongHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Double,Long>> iterator() {
-+ return new Iterator<Map.Entry<Double,Long>>() {
-+ private final TDoubleLongIterator it = _map.iterator();
-+
-+ public Map.Entry<Double,Long> next() {
-+ it.advance();
-+ final Double key = wrapKey(it.key());
-+ final Long v = wrapValue(it.value());
-+ return new Map.Entry<Double,Long>() {
-+ private Long val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Double getKey() {
-+ return key;
-+ }
-+
-+ public Long getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Long setValue(Long value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Long o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Double, Long>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TDoubleLongHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Double, ? extends Long> map) {
-+ Iterator<? extends Entry<? extends Double,? extends Long>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Double,? extends Long> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Double wrapKey(double k) {
-+ return new Double(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected double unwrapKey(Object key) {
-+ return ((Double)key).doubleValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Long wrapValue(long k) {
-+ return new Long(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected long unwrapValue(Object value) {
-+ return ((Long)value).longValue();
-+ }
-+
-+} // TDoubleLongHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TDoubleObjectHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,365 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TDoubleObjectHashMap;
-+import gnu.trove.TDoubleObjectIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TDoubleObjectHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TDoubleObjectHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TDoubleObjectHashMapDecorator<V> extends AbstractMap<Double, V>
-+ implements Map<Double, V>, Cloneable {
-+
-+ /**
-+ * the wrapped primitive map
-+ */
-+ protected TDoubleObjectHashMap<V> _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TDoubleObjectHashMapDecorator(TDoubleObjectHashMap<V> map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TDoubleObjectHashMap<V> getMap() {
-+ return _map;
-+ }
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TDoubleObjectHashMapDecorator clone() {
-+ try {
-+ TDoubleObjectHashMapDecorator copy = (TDoubleObjectHashMapDecorator) super.clone();
-+ copy._map = (TDoubleObjectHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public V put(Double key, V value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Double) {
-+ double k = unwrapKey(key);
-+ Object v = unwrapValue((V) val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public V get(Object key) {
-+ return _map.get(unwrapKey(key));
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public V remove(Object key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Double,V>> entrySet() {
-+ return new AbstractSet<Map.Entry<Double,V>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TDoubleObjectHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TDoubleObjectHashMapDecorator.this.containsKey(k) &&
-+ TDoubleObjectHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Double,V>> iterator() {
-+ return new Iterator<Map.Entry<Double,V>>() {
-+ private final TDoubleObjectIterator<V> it = _map.iterator();
-+
-+ public Map.Entry<Double,V> next() {
-+ it.advance();
-+ final Double key = wrapKey(it.key());
-+ final V v = wrapValue(it.value());
-+ return new Map.Entry<Double,V>() {
-+ private V val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Double getKey() {
-+ return key;
-+ }
-+
-+ public V getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public V setValue(V value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Map.Entry<Double,V> o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Double,V>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TDoubleObjectHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue((V) val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Double, ? extends V> map) {
-+ Iterator<? extends Entry<? extends Double,? extends V>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Double,? extends V> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Double wrapKey(double k) {
-+ return new Double(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected double unwrapKey(Object key) {
-+ return ((Double)key).doubleValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param o value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected final V wrapValue(V o) {
-+ return o;
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected final V unwrapValue(V value) {
-+ return value;
-+ }
-+
-+} // TDoubleObjectHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TDoubleShortHashMapDecorator.java 2007-04-18 06:49:34.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TDoubleShortHashMap;
-+import gnu.trove.TDoubleShortIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TDoubleShortHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TDoubleShortHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TDoubleShortHashMapDecorator extends AbstractMap<Double, Short>
-+ implements Map<Double, Short>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TDoubleShortHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TDoubleShortHashMapDecorator(TDoubleShortHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TDoubleShortHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TDoubleShortHashMapDecorator clone() {
-+ try {
-+ TDoubleShortHashMapDecorator copy = (TDoubleShortHashMapDecorator) super.clone();
-+ copy._map = (TDoubleShortHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Short(0) if none was found.
-+ */
-+ public Short put(Double key, Short value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Double && val instanceof Short) {
-+ double k = unwrapKey(key);
-+ short v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Short get(Double key) {
-+ double k = unwrapKey(key);
-+ short v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Short(0) if it was not found in the map
-+ */
-+ public Short remove(Double key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Double,Short>> entrySet() {
-+ return new AbstractSet<Map.Entry<Double,Short>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TDoubleShortHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TDoubleShortHashMapDecorator.this.containsKey(k)
-+ && TDoubleShortHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Double,Short>> iterator() {
-+ return new Iterator<Map.Entry<Double,Short>>() {
-+ private final TDoubleShortIterator it = _map.iterator();
-+
-+ public Map.Entry<Double,Short> next() {
-+ it.advance();
-+ final Double key = wrapKey(it.key());
-+ final Short v = wrapValue(it.value());
-+ return new Map.Entry<Double,Short>() {
-+ private Short val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Double getKey() {
-+ return key;
-+ }
-+
-+ public Short getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Short setValue(Short value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Short o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Double, Short>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TDoubleShortHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Double, ? extends Short> map) {
-+ Iterator<? extends Entry<? extends Double,? extends Short>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Double,? extends Short> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Double wrapKey(double k) {
-+ return new Double(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected double unwrapKey(Object key) {
-+ return ((Double)key).doubleValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Short wrapValue(short k) {
-+ return new Short(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected short unwrapValue(Object value) {
-+ return ((Short)value).shortValue();
-+ }
-+
-+} // TDoubleShortHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TFloatByteHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TFloatByteHashMap;
-+import gnu.trove.TFloatByteIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TFloatByteHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TFloatByteHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TFloatByteHashMapDecorator extends AbstractMap<Float, Byte>
-+ implements Map<Float, Byte>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TFloatByteHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TFloatByteHashMapDecorator(TFloatByteHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TFloatByteHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TFloatByteHashMapDecorator clone() {
-+ try {
-+ TFloatByteHashMapDecorator copy = (TFloatByteHashMapDecorator) super.clone();
-+ copy._map = (TFloatByteHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Byte(0) if none was found.
-+ */
-+ public Byte put(Float key, Byte value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Float && val instanceof Byte) {
-+ float k = unwrapKey(key);
-+ byte v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Byte get(Float key) {
-+ float k = unwrapKey(key);
-+ byte v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Byte(0) if it was not found in the map
-+ */
-+ public Byte remove(Float key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Float,Byte>> entrySet() {
-+ return new AbstractSet<Map.Entry<Float,Byte>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TFloatByteHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TFloatByteHashMapDecorator.this.containsKey(k)
-+ && TFloatByteHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Float,Byte>> iterator() {
-+ return new Iterator<Map.Entry<Float,Byte>>() {
-+ private final TFloatByteIterator it = _map.iterator();
-+
-+ public Map.Entry<Float,Byte> next() {
-+ it.advance();
-+ final Float key = wrapKey(it.key());
-+ final Byte v = wrapValue(it.value());
-+ return new Map.Entry<Float,Byte>() {
-+ private Byte val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Float getKey() {
-+ return key;
-+ }
-+
-+ public Byte getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Byte setValue(Byte value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Byte o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Float, Byte>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TFloatByteHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Float, ? extends Byte> map) {
-+ Iterator<? extends Entry<? extends Float,? extends Byte>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Float,? extends Byte> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Float wrapKey(float k) {
-+ return new Float(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected float unwrapKey(Object key) {
-+ return ((Float)key).floatValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Byte wrapValue(byte k) {
-+ return new Byte(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected byte unwrapValue(Object value) {
-+ return ((Byte)value).byteValue();
-+ }
-+
-+} // TFloatByteHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TFloatDoubleHashMapDecorator.java 2007-04-18 06:49:34.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TFloatDoubleHashMap;
-+import gnu.trove.TFloatDoubleIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TFloatDoubleHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TFloatDoubleHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TFloatDoubleHashMapDecorator extends AbstractMap<Float, Double>
-+ implements Map<Float, Double>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TFloatDoubleHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TFloatDoubleHashMapDecorator(TFloatDoubleHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TFloatDoubleHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TFloatDoubleHashMapDecorator clone() {
-+ try {
-+ TFloatDoubleHashMapDecorator copy = (TFloatDoubleHashMapDecorator) super.clone();
-+ copy._map = (TFloatDoubleHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Double(0) if none was found.
-+ */
-+ public Double put(Float key, Double value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Float && val instanceof Double) {
-+ float k = unwrapKey(key);
-+ double v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Double get(Float key) {
-+ float k = unwrapKey(key);
-+ double v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Double(0) if it was not found in the map
-+ */
-+ public Double remove(Float key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Float,Double>> entrySet() {
-+ return new AbstractSet<Map.Entry<Float,Double>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TFloatDoubleHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TFloatDoubleHashMapDecorator.this.containsKey(k)
-+ && TFloatDoubleHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Float,Double>> iterator() {
-+ return new Iterator<Map.Entry<Float,Double>>() {
-+ private final TFloatDoubleIterator it = _map.iterator();
-+
-+ public Map.Entry<Float,Double> next() {
-+ it.advance();
-+ final Float key = wrapKey(it.key());
-+ final Double v = wrapValue(it.value());
-+ return new Map.Entry<Float,Double>() {
-+ private Double val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Float getKey() {
-+ return key;
-+ }
-+
-+ public Double getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Double setValue(Double value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Double o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Float, Double>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TFloatDoubleHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Float, ? extends Double> map) {
-+ Iterator<? extends Entry<? extends Float,? extends Double>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Float,? extends Double> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Float wrapKey(float k) {
-+ return new Float(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected float unwrapKey(Object key) {
-+ return ((Float)key).floatValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Double wrapValue(double k) {
-+ return new Double(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected double unwrapValue(Object value) {
-+ return ((Double)value).doubleValue();
-+ }
-+
-+} // TFloatDoubleHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TFloatFloatHashMapDecorator.java 2007-04-18 06:49:34.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TFloatFloatHashMap;
-+import gnu.trove.TFloatFloatIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TFloatFloatHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TFloatFloatHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TFloatFloatHashMapDecorator extends AbstractMap<Float, Float>
-+ implements Map<Float, Float>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TFloatFloatHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TFloatFloatHashMapDecorator(TFloatFloatHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TFloatFloatHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TFloatFloatHashMapDecorator clone() {
-+ try {
-+ TFloatFloatHashMapDecorator copy = (TFloatFloatHashMapDecorator) super.clone();
-+ copy._map = (TFloatFloatHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Float(0) if none was found.
-+ */
-+ public Float put(Float key, Float value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Float && val instanceof Float) {
-+ float k = unwrapKey(key);
-+ float v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Float get(Float key) {
-+ float k = unwrapKey(key);
-+ float v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Float(0) if it was not found in the map
-+ */
-+ public Float remove(Float key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Float,Float>> entrySet() {
-+ return new AbstractSet<Map.Entry<Float,Float>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TFloatFloatHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TFloatFloatHashMapDecorator.this.containsKey(k)
-+ && TFloatFloatHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Float,Float>> iterator() {
-+ return new Iterator<Map.Entry<Float,Float>>() {
-+ private final TFloatFloatIterator it = _map.iterator();
-+
-+ public Map.Entry<Float,Float> next() {
-+ it.advance();
-+ final Float key = wrapKey(it.key());
-+ final Float v = wrapValue(it.value());
-+ return new Map.Entry<Float,Float>() {
-+ private Float val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Float getKey() {
-+ return key;
-+ }
-+
-+ public Float getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Float setValue(Float value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Float o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Float, Float>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TFloatFloatHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Float, ? extends Float> map) {
-+ Iterator<? extends Entry<? extends Float,? extends Float>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Float,? extends Float> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Float wrapKey(float k) {
-+ return new Float(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected float unwrapKey(Object key) {
-+ return ((Float)key).floatValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Float wrapValue(float k) {
-+ return new Float(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected float unwrapValue(Object value) {
-+ return ((Float)value).floatValue();
-+ }
-+
-+} // TFloatFloatHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TFloatHashSetDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,209 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TFloatHashSet;
-+import gnu.trove.TFloatIterator;
-+
-+import java.util.AbstractSet;
-+import java.util.Iterator;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TFloatHashSet conform to the <tt>java.util.Set</tt> API.
-+ * This class simply decorates an underlying TFloatHashSet and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Tue Sep 24 22:08:17 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TFloatHashSetDecorator extends AbstractSet<Float> implements Set<Float> {
-+ /** the wrapped primitive set */
-+ protected TFloatHashSet _set;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive set.
-+ */
-+ public TFloatHashSetDecorator(TFloatHashSet set) {
-+ super();
-+ this._set = set;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the set wrapped by this decorator.
-+ */
-+ public TFloatHashSet getSet() {
-+ return _set;
-+ }
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TFloatHashSetDecorator clone() {
-+ try {
-+ TFloatHashSetDecorator copy = (TFloatHashSetDecorator) super.clone();
-+ copy._set = (TFloatHashSet) _set.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable
-+ }
-+ }
-+
-+ /**
-+ * Inserts a value into the set.
-+ *
-+ * @param value true if the set was modified by the insertion
-+ */
-+ public boolean add(Float value) {
-+ return _set.add(unwrap(value));
-+ }
-+
-+ /**
-+ * Compares this set with another set for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the sets are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_set.equals(other)) {
-+ return true; // comparing two trove sets
-+ } else if (other instanceof Set) {
-+ Set that = (Set) other;
-+ if (that.size() != _set.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Object val = it.next();
-+ if (val instanceof Float) {
-+ float v = unwrap(val);
-+ if (_set.contains(v)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other set
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Empties the set.
-+ */
-+ public void clear() {
-+ this._set.clear();
-+ }
-+
-+ /**
-+ * Deletes a value from the set.
-+ *
-+ * @param value an <code>Object</code> value
-+ * @return true if the set was modified
-+ */
-+ public boolean remove(Object value) {
-+ return _set.remove(unwrap(value));
-+ }
-+
-+ /**
-+ * Creates an iterator over the values of the set.
-+ *
-+ * @return an iterator with support for removals in the underlying set
-+ */
-+ public Iterator<Float> iterator() {
-+ return new Iterator<Float>() {
-+ private final TFloatIterator it = _set.iterator();
-+
-+ public Float next() {
-+ return wrap(it.next());
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Returns the number of entries in the set.
-+ *
-+ * @return the set's size.
-+ */
-+ public int size() {
-+ return this._set.size();
-+ }
-+
-+ /**
-+ * Indicates whether set has any entries.
-+ *
-+ * @return true if the set is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying set
-+ * @return an Object representation of the value
-+ */
-+ protected Float wrap(float k) {
-+ return new Float(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected float unwrap(Object value) {
-+ return ((Float) value).floatValue();
-+ }
-+} // TFloatHashSetDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TFloatIntHashMapDecorator.java 2007-04-18 06:49:34.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TFloatIntHashMap;
-+import gnu.trove.TFloatIntIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TFloatIntHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TFloatIntHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TFloatIntHashMapDecorator extends AbstractMap<Float, Integer>
-+ implements Map<Float, Integer>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TFloatIntHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TFloatIntHashMapDecorator(TFloatIntHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TFloatIntHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TFloatIntHashMapDecorator clone() {
-+ try {
-+ TFloatIntHashMapDecorator copy = (TFloatIntHashMapDecorator) super.clone();
-+ copy._map = (TFloatIntHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public Integer put(Float key, Integer value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Float && val instanceof Integer) {
-+ float k = unwrapKey(key);
-+ int v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Integer get(Float key) {
-+ float k = unwrapKey(key);
-+ int v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public Integer remove(Float key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Float,Integer>> entrySet() {
-+ return new AbstractSet<Map.Entry<Float,Integer>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TFloatIntHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TFloatIntHashMapDecorator.this.containsKey(k)
-+ && TFloatIntHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Float,Integer>> iterator() {
-+ return new Iterator<Map.Entry<Float,Integer>>() {
-+ private final TFloatIntIterator it = _map.iterator();
-+
-+ public Map.Entry<Float,Integer> next() {
-+ it.advance();
-+ final Float key = wrapKey(it.key());
-+ final Integer v = wrapValue(it.value());
-+ return new Map.Entry<Float,Integer>() {
-+ private Integer val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Float getKey() {
-+ return key;
-+ }
-+
-+ public Integer getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Integer setValue(Integer value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Integer o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Float, Integer>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TFloatIntHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Float, ? extends Integer> map) {
-+ Iterator<? extends Entry<? extends Float,? extends Integer>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Float,? extends Integer> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Float wrapKey(float k) {
-+ return new Float(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected float unwrapKey(Object key) {
-+ return ((Float)key).floatValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Integer wrapValue(int k) {
-+ return new Integer(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected int unwrapValue(Object value) {
-+ return ((Integer)value).intValue();
-+ }
-+
-+} // TFloatIntHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TFloatLongHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TFloatLongHashMap;
-+import gnu.trove.TFloatLongIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TFloatLongHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TFloatLongHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TFloatLongHashMapDecorator extends AbstractMap<Float, Long>
-+ implements Map<Float, Long>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TFloatLongHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TFloatLongHashMapDecorator(TFloatLongHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TFloatLongHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TFloatLongHashMapDecorator clone() {
-+ try {
-+ TFloatLongHashMapDecorator copy = (TFloatLongHashMapDecorator) super.clone();
-+ copy._map = (TFloatLongHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Long(0) if none was found.
-+ */
-+ public Long put(Float key, Long value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Float && val instanceof Long) {
-+ float k = unwrapKey(key);
-+ long v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Long get(Float key) {
-+ float k = unwrapKey(key);
-+ long v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Long(0) if it was not found in the map
-+ */
-+ public Long remove(Float key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Float,Long>> entrySet() {
-+ return new AbstractSet<Map.Entry<Float,Long>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TFloatLongHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TFloatLongHashMapDecorator.this.containsKey(k)
-+ && TFloatLongHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Float,Long>> iterator() {
-+ return new Iterator<Map.Entry<Float,Long>>() {
-+ private final TFloatLongIterator it = _map.iterator();
-+
-+ public Map.Entry<Float,Long> next() {
-+ it.advance();
-+ final Float key = wrapKey(it.key());
-+ final Long v = wrapValue(it.value());
-+ return new Map.Entry<Float,Long>() {
-+ private Long val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Float getKey() {
-+ return key;
-+ }
-+
-+ public Long getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Long setValue(Long value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Long o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Float, Long>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TFloatLongHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Float, ? extends Long> map) {
-+ Iterator<? extends Entry<? extends Float,? extends Long>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Float,? extends Long> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Float wrapKey(float k) {
-+ return new Float(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected float unwrapKey(Object key) {
-+ return ((Float)key).floatValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Long wrapValue(long k) {
-+ return new Long(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected long unwrapValue(Object value) {
-+ return ((Long)value).longValue();
-+ }
-+
-+} // TFloatLongHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TFloatObjectHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,365 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TFloatObjectHashMap;
-+import gnu.trove.TFloatObjectIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TFloatObjectHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TFloatObjectHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TFloatObjectHashMapDecorator<V> extends AbstractMap<Float, V>
-+ implements Map<Float, V>, Cloneable {
-+
-+ /**
-+ * the wrapped primitive map
-+ */
-+ protected TFloatObjectHashMap<V> _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TFloatObjectHashMapDecorator(TFloatObjectHashMap<V> map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TFloatObjectHashMap<V> getMap() {
-+ return _map;
-+ }
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TFloatObjectHashMapDecorator clone() {
-+ try {
-+ TFloatObjectHashMapDecorator copy = (TFloatObjectHashMapDecorator) super.clone();
-+ copy._map = (TFloatObjectHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public V put(Float key, V value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Float) {
-+ float k = unwrapKey(key);
-+ Object v = unwrapValue((V) val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public V get(Object key) {
-+ return _map.get(unwrapKey(key));
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public V remove(Object key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Float,V>> entrySet() {
-+ return new AbstractSet<Map.Entry<Float,V>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TFloatObjectHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TFloatObjectHashMapDecorator.this.containsKey(k) &&
-+ TFloatObjectHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Float,V>> iterator() {
-+ return new Iterator<Map.Entry<Float,V>>() {
-+ private final TFloatObjectIterator<V> it = _map.iterator();
-+
-+ public Map.Entry<Float,V> next() {
-+ it.advance();
-+ final Float key = wrapKey(it.key());
-+ final V v = wrapValue(it.value());
-+ return new Map.Entry<Float,V>() {
-+ private V val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Float getKey() {
-+ return key;
-+ }
-+
-+ public V getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public V setValue(V value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Map.Entry<Float,V> o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Float,V>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TFloatObjectHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue((V) val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Float, ? extends V> map) {
-+ Iterator<? extends Entry<? extends Float,? extends V>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Float,? extends V> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Float wrapKey(float k) {
-+ return new Float(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected float unwrapKey(Object key) {
-+ return ((Float)key).floatValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param o value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected final V wrapValue(V o) {
-+ return o;
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected final V unwrapValue(V value) {
-+ return value;
-+ }
-+
-+} // TFloatObjectHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TFloatShortHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TFloatShortHashMap;
-+import gnu.trove.TFloatShortIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TFloatShortHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TFloatShortHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TFloatShortHashMapDecorator extends AbstractMap<Float, Short>
-+ implements Map<Float, Short>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TFloatShortHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TFloatShortHashMapDecorator(TFloatShortHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TFloatShortHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TFloatShortHashMapDecorator clone() {
-+ try {
-+ TFloatShortHashMapDecorator copy = (TFloatShortHashMapDecorator) super.clone();
-+ copy._map = (TFloatShortHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Short(0) if none was found.
-+ */
-+ public Short put(Float key, Short value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Float && val instanceof Short) {
-+ float k = unwrapKey(key);
-+ short v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Short get(Float key) {
-+ float k = unwrapKey(key);
-+ short v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Short(0) if it was not found in the map
-+ */
-+ public Short remove(Float key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Float,Short>> entrySet() {
-+ return new AbstractSet<Map.Entry<Float,Short>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TFloatShortHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TFloatShortHashMapDecorator.this.containsKey(k)
-+ && TFloatShortHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Float,Short>> iterator() {
-+ return new Iterator<Map.Entry<Float,Short>>() {
-+ private final TFloatShortIterator it = _map.iterator();
-+
-+ public Map.Entry<Float,Short> next() {
-+ it.advance();
-+ final Float key = wrapKey(it.key());
-+ final Short v = wrapValue(it.value());
-+ return new Map.Entry<Float,Short>() {
-+ private Short val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Float getKey() {
-+ return key;
-+ }
-+
-+ public Short getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Short setValue(Short value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Short o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Float, Short>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TFloatShortHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Float, ? extends Short> map) {
-+ Iterator<? extends Entry<? extends Float,? extends Short>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Float,? extends Short> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Float wrapKey(float k) {
-+ return new Float(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected float unwrapKey(Object key) {
-+ return ((Float)key).floatValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Short wrapValue(short k) {
-+ return new Short(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected short unwrapValue(Object value) {
-+ return ((Short)value).shortValue();
-+ }
-+
-+} // TFloatShortHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TIntByteHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TIntByteHashMap;
-+import gnu.trove.TIntByteIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TIntByteHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TIntByteHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TIntByteHashMapDecorator extends AbstractMap<Integer, Byte>
-+ implements Map<Integer, Byte>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TIntByteHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TIntByteHashMapDecorator(TIntByteHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TIntByteHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TIntByteHashMapDecorator clone() {
-+ try {
-+ TIntByteHashMapDecorator copy = (TIntByteHashMapDecorator) super.clone();
-+ copy._map = (TIntByteHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Byte(0) if none was found.
-+ */
-+ public Byte put(Integer key, Byte value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Integer && val instanceof Byte) {
-+ int k = unwrapKey(key);
-+ byte v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Byte get(Integer key) {
-+ int k = unwrapKey(key);
-+ byte v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Byte(0) if it was not found in the map
-+ */
-+ public Byte remove(Integer key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Integer,Byte>> entrySet() {
-+ return new AbstractSet<Map.Entry<Integer,Byte>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TIntByteHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TIntByteHashMapDecorator.this.containsKey(k)
-+ && TIntByteHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Integer,Byte>> iterator() {
-+ return new Iterator<Map.Entry<Integer,Byte>>() {
-+ private final TIntByteIterator it = _map.iterator();
-+
-+ public Map.Entry<Integer,Byte> next() {
-+ it.advance();
-+ final Integer key = wrapKey(it.key());
-+ final Byte v = wrapValue(it.value());
-+ return new Map.Entry<Integer,Byte>() {
-+ private Byte val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Integer getKey() {
-+ return key;
-+ }
-+
-+ public Byte getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Byte setValue(Byte value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Byte o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Integer, Byte>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TIntByteHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Integer, ? extends Byte> map) {
-+ Iterator<? extends Entry<? extends Integer,? extends Byte>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Integer,? extends Byte> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Integer wrapKey(int k) {
-+ return new Integer(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected int unwrapKey(Object key) {
-+ return ((Integer)key).intValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Byte wrapValue(byte k) {
-+ return new Byte(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected byte unwrapValue(Object value) {
-+ return ((Byte)value).byteValue();
-+ }
-+
-+} // TIntByteHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TIntDoubleHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TIntDoubleHashMap;
-+import gnu.trove.TIntDoubleIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TIntDoubleHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TIntDoubleHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TIntDoubleHashMapDecorator extends AbstractMap<Integer, Double>
-+ implements Map<Integer, Double>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TIntDoubleHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TIntDoubleHashMapDecorator(TIntDoubleHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TIntDoubleHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TIntDoubleHashMapDecorator clone() {
-+ try {
-+ TIntDoubleHashMapDecorator copy = (TIntDoubleHashMapDecorator) super.clone();
-+ copy._map = (TIntDoubleHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Double(0) if none was found.
-+ */
-+ public Double put(Integer key, Double value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Integer && val instanceof Double) {
-+ int k = unwrapKey(key);
-+ double v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Double get(Integer key) {
-+ int k = unwrapKey(key);
-+ double v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Double(0) if it was not found in the map
-+ */
-+ public Double remove(Integer key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Integer,Double>> entrySet() {
-+ return new AbstractSet<Map.Entry<Integer,Double>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TIntDoubleHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TIntDoubleHashMapDecorator.this.containsKey(k)
-+ && TIntDoubleHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Integer,Double>> iterator() {
-+ return new Iterator<Map.Entry<Integer,Double>>() {
-+ private final TIntDoubleIterator it = _map.iterator();
-+
-+ public Map.Entry<Integer,Double> next() {
-+ it.advance();
-+ final Integer key = wrapKey(it.key());
-+ final Double v = wrapValue(it.value());
-+ return new Map.Entry<Integer,Double>() {
-+ private Double val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Integer getKey() {
-+ return key;
-+ }
-+
-+ public Double getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Double setValue(Double value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Double o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Integer, Double>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TIntDoubleHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Integer, ? extends Double> map) {
-+ Iterator<? extends Entry<? extends Integer,? extends Double>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Integer,? extends Double> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Integer wrapKey(int k) {
-+ return new Integer(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected int unwrapKey(Object key) {
-+ return ((Integer)key).intValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Double wrapValue(double k) {
-+ return new Double(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected double unwrapValue(Object value) {
-+ return ((Double)value).doubleValue();
-+ }
-+
-+} // TIntDoubleHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TIntFloatHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TIntFloatHashMap;
-+import gnu.trove.TIntFloatIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TIntFloatHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TIntFloatHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TIntFloatHashMapDecorator extends AbstractMap<Integer, Float>
-+ implements Map<Integer, Float>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TIntFloatHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TIntFloatHashMapDecorator(TIntFloatHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TIntFloatHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TIntFloatHashMapDecorator clone() {
-+ try {
-+ TIntFloatHashMapDecorator copy = (TIntFloatHashMapDecorator) super.clone();
-+ copy._map = (TIntFloatHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Float(0) if none was found.
-+ */
-+ public Float put(Integer key, Float value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Integer && val instanceof Float) {
-+ int k = unwrapKey(key);
-+ float v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Float get(Integer key) {
-+ int k = unwrapKey(key);
-+ float v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Float(0) if it was not found in the map
-+ */
-+ public Float remove(Integer key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Integer,Float>> entrySet() {
-+ return new AbstractSet<Map.Entry<Integer,Float>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TIntFloatHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TIntFloatHashMapDecorator.this.containsKey(k)
-+ && TIntFloatHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Integer,Float>> iterator() {
-+ return new Iterator<Map.Entry<Integer,Float>>() {
-+ private final TIntFloatIterator it = _map.iterator();
-+
-+ public Map.Entry<Integer,Float> next() {
-+ it.advance();
-+ final Integer key = wrapKey(it.key());
-+ final Float v = wrapValue(it.value());
-+ return new Map.Entry<Integer,Float>() {
-+ private Float val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Integer getKey() {
-+ return key;
-+ }
-+
-+ public Float getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Float setValue(Float value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Float o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Integer, Float>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TIntFloatHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Integer, ? extends Float> map) {
-+ Iterator<? extends Entry<? extends Integer,? extends Float>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Integer,? extends Float> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Integer wrapKey(int k) {
-+ return new Integer(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected int unwrapKey(Object key) {
-+ return ((Integer)key).intValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Float wrapValue(float k) {
-+ return new Float(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected float unwrapValue(Object value) {
-+ return ((Float)value).floatValue();
-+ }
-+
-+} // TIntFloatHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TIntHashSetDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,209 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TIntHashSet;
-+import gnu.trove.TIntIterator;
-+
-+import java.util.AbstractSet;
-+import java.util.Iterator;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TIntHashSet conform to the <tt>java.util.Set</tt> API.
-+ * This class simply decorates an underlying TIntHashSet and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Tue Sep 24 22:08:17 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TIntHashSetDecorator extends AbstractSet<Integer> implements Set<Integer> {
-+ /** the wrapped primitive set */
-+ protected TIntHashSet _set;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive set.
-+ */
-+ public TIntHashSetDecorator(TIntHashSet set) {
-+ super();
-+ this._set = set;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the set wrapped by this decorator.
-+ */
-+ public TIntHashSet getSet() {
-+ return _set;
-+ }
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TIntHashSetDecorator clone() {
-+ try {
-+ TIntHashSetDecorator copy = (TIntHashSetDecorator) super.clone();
-+ copy._set = (TIntHashSet) _set.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable
-+ }
-+ }
-+
-+ /**
-+ * Inserts a value into the set.
-+ *
-+ * @param value true if the set was modified by the insertion
-+ */
-+ public boolean add(Integer value) {
-+ return _set.add(unwrap(value));
-+ }
-+
-+ /**
-+ * Compares this set with another set for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the sets are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_set.equals(other)) {
-+ return true; // comparing two trove sets
-+ } else if (other instanceof Set) {
-+ Set that = (Set) other;
-+ if (that.size() != _set.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Object val = it.next();
-+ if (val instanceof Integer) {
-+ int v = unwrap(val);
-+ if (_set.contains(v)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other set
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Empties the set.
-+ */
-+ public void clear() {
-+ this._set.clear();
-+ }
-+
-+ /**
-+ * Deletes a value from the set.
-+ *
-+ * @param value an <code>Object</code> value
-+ * @return true if the set was modified
-+ */
-+ public boolean remove(Object value) {
-+ return _set.remove(unwrap(value));
-+ }
-+
-+ /**
-+ * Creates an iterator over the values of the set.
-+ *
-+ * @return an iterator with support for removals in the underlying set
-+ */
-+ public Iterator<Integer> iterator() {
-+ return new Iterator<Integer>() {
-+ private final TIntIterator it = _set.iterator();
-+
-+ public Integer next() {
-+ return wrap(it.next());
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Returns the number of entries in the set.
-+ *
-+ * @return the set's size.
-+ */
-+ public int size() {
-+ return this._set.size();
-+ }
-+
-+ /**
-+ * Indicates whether set has any entries.
-+ *
-+ * @return true if the set is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying set
-+ * @return an Object representation of the value
-+ */
-+ protected Integer wrap(int k) {
-+ return new Integer(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected int unwrap(Object value) {
-+ return ((Integer) value).intValue();
-+ }
-+} // TIntHashSetDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TIntIntHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TIntIntHashMap;
-+import gnu.trove.TIntIntIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TIntIntHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TIntIntHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TIntIntHashMapDecorator extends AbstractMap<Integer, Integer>
-+ implements Map<Integer, Integer>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TIntIntHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TIntIntHashMapDecorator(TIntIntHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TIntIntHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TIntIntHashMapDecorator clone() {
-+ try {
-+ TIntIntHashMapDecorator copy = (TIntIntHashMapDecorator) super.clone();
-+ copy._map = (TIntIntHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public Integer put(Integer key, Integer value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Integer && val instanceof Integer) {
-+ int k = unwrapKey(key);
-+ int v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Integer get(Integer key) {
-+ int k = unwrapKey(key);
-+ int v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public Integer remove(Integer key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Integer,Integer>> entrySet() {
-+ return new AbstractSet<Map.Entry<Integer,Integer>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TIntIntHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TIntIntHashMapDecorator.this.containsKey(k)
-+ && TIntIntHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Integer,Integer>> iterator() {
-+ return new Iterator<Map.Entry<Integer,Integer>>() {
-+ private final TIntIntIterator it = _map.iterator();
-+
-+ public Map.Entry<Integer,Integer> next() {
-+ it.advance();
-+ final Integer key = wrapKey(it.key());
-+ final Integer v = wrapValue(it.value());
-+ return new Map.Entry<Integer,Integer>() {
-+ private Integer val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Integer getKey() {
-+ return key;
-+ }
-+
-+ public Integer getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Integer setValue(Integer value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Integer o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Integer, Integer>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TIntIntHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Integer, ? extends Integer> map) {
-+ Iterator<? extends Entry<? extends Integer,? extends Integer>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Integer,? extends Integer> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Integer wrapKey(int k) {
-+ return new Integer(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected int unwrapKey(Object key) {
-+ return ((Integer)key).intValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Integer wrapValue(int k) {
-+ return new Integer(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected int unwrapValue(Object value) {
-+ return ((Integer)value).intValue();
-+ }
-+
-+} // TIntIntHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TIntLongHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TIntLongHashMap;
-+import gnu.trove.TIntLongIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TIntLongHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TIntLongHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TIntLongHashMapDecorator extends AbstractMap<Integer, Long>
-+ implements Map<Integer, Long>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TIntLongHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TIntLongHashMapDecorator(TIntLongHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TIntLongHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TIntLongHashMapDecorator clone() {
-+ try {
-+ TIntLongHashMapDecorator copy = (TIntLongHashMapDecorator) super.clone();
-+ copy._map = (TIntLongHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Long(0) if none was found.
-+ */
-+ public Long put(Integer key, Long value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Integer && val instanceof Long) {
-+ int k = unwrapKey(key);
-+ long v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Long get(Integer key) {
-+ int k = unwrapKey(key);
-+ long v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Long(0) if it was not found in the map
-+ */
-+ public Long remove(Integer key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Integer,Long>> entrySet() {
-+ return new AbstractSet<Map.Entry<Integer,Long>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TIntLongHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TIntLongHashMapDecorator.this.containsKey(k)
-+ && TIntLongHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Integer,Long>> iterator() {
-+ return new Iterator<Map.Entry<Integer,Long>>() {
-+ private final TIntLongIterator it = _map.iterator();
-+
-+ public Map.Entry<Integer,Long> next() {
-+ it.advance();
-+ final Integer key = wrapKey(it.key());
-+ final Long v = wrapValue(it.value());
-+ return new Map.Entry<Integer,Long>() {
-+ private Long val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Integer getKey() {
-+ return key;
-+ }
-+
-+ public Long getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Long setValue(Long value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Long o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Integer, Long>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TIntLongHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Integer, ? extends Long> map) {
-+ Iterator<? extends Entry<? extends Integer,? extends Long>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Integer,? extends Long> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Integer wrapKey(int k) {
-+ return new Integer(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected int unwrapKey(Object key) {
-+ return ((Integer)key).intValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Long wrapValue(long k) {
-+ return new Long(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected long unwrapValue(Object value) {
-+ return ((Long)value).longValue();
-+ }
-+
-+} // TIntLongHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TIntObjectHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,365 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TIntObjectHashMap;
-+import gnu.trove.TIntObjectIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TIntObjectHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TIntObjectHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TIntObjectHashMapDecorator<V> extends AbstractMap<Integer, V>
-+ implements Map<Integer, V>, Cloneable {
-+
-+ /**
-+ * the wrapped primitive map
-+ */
-+ protected TIntObjectHashMap<V> _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TIntObjectHashMapDecorator(TIntObjectHashMap<V> map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TIntObjectHashMap<V> getMap() {
-+ return _map;
-+ }
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TIntObjectHashMapDecorator clone() {
-+ try {
-+ TIntObjectHashMapDecorator copy = (TIntObjectHashMapDecorator) super.clone();
-+ copy._map = (TIntObjectHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public V put(Integer key, V value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Integer) {
-+ int k = unwrapKey(key);
-+ Object v = unwrapValue((V) val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public V get(Object key) {
-+ return _map.get(unwrapKey(key));
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public V remove(Object key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Integer,V>> entrySet() {
-+ return new AbstractSet<Map.Entry<Integer,V>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TIntObjectHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TIntObjectHashMapDecorator.this.containsKey(k) &&
-+ TIntObjectHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Integer,V>> iterator() {
-+ return new Iterator<Map.Entry<Integer,V>>() {
-+ private final TIntObjectIterator<V> it = _map.iterator();
-+
-+ public Map.Entry<Integer,V> next() {
-+ it.advance();
-+ final Integer key = wrapKey(it.key());
-+ final V v = wrapValue(it.value());
-+ return new Map.Entry<Integer,V>() {
-+ private V val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Integer getKey() {
-+ return key;
-+ }
-+
-+ public V getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public V setValue(V value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Map.Entry<Integer,V> o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Integer,V>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TIntObjectHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue((V) val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Integer, ? extends V> map) {
-+ Iterator<? extends Entry<? extends Integer,? extends V>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Integer,? extends V> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Integer wrapKey(int k) {
-+ return new Integer(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected int unwrapKey(Object key) {
-+ return ((Integer)key).intValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param o value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected final V wrapValue(V o) {
-+ return o;
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected final V unwrapValue(V value) {
-+ return value;
-+ }
-+
-+} // TIntObjectHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TIntShortHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TIntShortHashMap;
-+import gnu.trove.TIntShortIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TIntShortHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TIntShortHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TIntShortHashMapDecorator extends AbstractMap<Integer, Short>
-+ implements Map<Integer, Short>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TIntShortHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TIntShortHashMapDecorator(TIntShortHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TIntShortHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TIntShortHashMapDecorator clone() {
-+ try {
-+ TIntShortHashMapDecorator copy = (TIntShortHashMapDecorator) super.clone();
-+ copy._map = (TIntShortHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Short(0) if none was found.
-+ */
-+ public Short put(Integer key, Short value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Integer && val instanceof Short) {
-+ int k = unwrapKey(key);
-+ short v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Short get(Integer key) {
-+ int k = unwrapKey(key);
-+ short v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Short(0) if it was not found in the map
-+ */
-+ public Short remove(Integer key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Integer,Short>> entrySet() {
-+ return new AbstractSet<Map.Entry<Integer,Short>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TIntShortHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TIntShortHashMapDecorator.this.containsKey(k)
-+ && TIntShortHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Integer,Short>> iterator() {
-+ return new Iterator<Map.Entry<Integer,Short>>() {
-+ private final TIntShortIterator it = _map.iterator();
-+
-+ public Map.Entry<Integer,Short> next() {
-+ it.advance();
-+ final Integer key = wrapKey(it.key());
-+ final Short v = wrapValue(it.value());
-+ return new Map.Entry<Integer,Short>() {
-+ private Short val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Integer getKey() {
-+ return key;
-+ }
-+
-+ public Short getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Short setValue(Short value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Short o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Integer, Short>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TIntShortHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Integer, ? extends Short> map) {
-+ Iterator<? extends Entry<? extends Integer,? extends Short>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Integer,? extends Short> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Integer wrapKey(int k) {
-+ return new Integer(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected int unwrapKey(Object key) {
-+ return ((Integer)key).intValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Short wrapValue(short k) {
-+ return new Short(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected short unwrapValue(Object value) {
-+ return ((Short)value).shortValue();
-+ }
-+
-+} // TIntShortHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TLongByteHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TLongByteHashMap;
-+import gnu.trove.TLongByteIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TLongByteHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TLongByteHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TLongByteHashMapDecorator extends AbstractMap<Long, Byte>
-+ implements Map<Long, Byte>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TLongByteHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TLongByteHashMapDecorator(TLongByteHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TLongByteHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TLongByteHashMapDecorator clone() {
-+ try {
-+ TLongByteHashMapDecorator copy = (TLongByteHashMapDecorator) super.clone();
-+ copy._map = (TLongByteHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Byte(0) if none was found.
-+ */
-+ public Byte put(Long key, Byte value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Long && val instanceof Byte) {
-+ long k = unwrapKey(key);
-+ byte v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Byte get(Long key) {
-+ long k = unwrapKey(key);
-+ byte v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Byte(0) if it was not found in the map
-+ */
-+ public Byte remove(Long key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Long,Byte>> entrySet() {
-+ return new AbstractSet<Map.Entry<Long,Byte>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TLongByteHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TLongByteHashMapDecorator.this.containsKey(k)
-+ && TLongByteHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Long,Byte>> iterator() {
-+ return new Iterator<Map.Entry<Long,Byte>>() {
-+ private final TLongByteIterator it = _map.iterator();
-+
-+ public Map.Entry<Long,Byte> next() {
-+ it.advance();
-+ final Long key = wrapKey(it.key());
-+ final Byte v = wrapValue(it.value());
-+ return new Map.Entry<Long,Byte>() {
-+ private Byte val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Long getKey() {
-+ return key;
-+ }
-+
-+ public Byte getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Byte setValue(Byte value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Byte o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Long, Byte>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TLongByteHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Long, ? extends Byte> map) {
-+ Iterator<? extends Entry<? extends Long,? extends Byte>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Long,? extends Byte> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Long wrapKey(long k) {
-+ return new Long(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected long unwrapKey(Object key) {
-+ return ((Long)key).longValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Byte wrapValue(byte k) {
-+ return new Byte(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected byte unwrapValue(Object value) {
-+ return ((Byte)value).byteValue();
-+ }
-+
-+} // TLongByteHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TLongDoubleHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TLongDoubleHashMap;
-+import gnu.trove.TLongDoubleIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TLongDoubleHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TLongDoubleHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TLongDoubleHashMapDecorator extends AbstractMap<Long, Double>
-+ implements Map<Long, Double>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TLongDoubleHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TLongDoubleHashMapDecorator(TLongDoubleHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TLongDoubleHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TLongDoubleHashMapDecorator clone() {
-+ try {
-+ TLongDoubleHashMapDecorator copy = (TLongDoubleHashMapDecorator) super.clone();
-+ copy._map = (TLongDoubleHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Double(0) if none was found.
-+ */
-+ public Double put(Long key, Double value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Long && val instanceof Double) {
-+ long k = unwrapKey(key);
-+ double v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Double get(Long key) {
-+ long k = unwrapKey(key);
-+ double v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Double(0) if it was not found in the map
-+ */
-+ public Double remove(Long key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Long,Double>> entrySet() {
-+ return new AbstractSet<Map.Entry<Long,Double>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TLongDoubleHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TLongDoubleHashMapDecorator.this.containsKey(k)
-+ && TLongDoubleHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Long,Double>> iterator() {
-+ return new Iterator<Map.Entry<Long,Double>>() {
-+ private final TLongDoubleIterator it = _map.iterator();
-+
-+ public Map.Entry<Long,Double> next() {
-+ it.advance();
-+ final Long key = wrapKey(it.key());
-+ final Double v = wrapValue(it.value());
-+ return new Map.Entry<Long,Double>() {
-+ private Double val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Long getKey() {
-+ return key;
-+ }
-+
-+ public Double getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Double setValue(Double value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Double o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Long, Double>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TLongDoubleHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Long, ? extends Double> map) {
-+ Iterator<? extends Entry<? extends Long,? extends Double>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Long,? extends Double> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Long wrapKey(long k) {
-+ return new Long(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected long unwrapKey(Object key) {
-+ return ((Long)key).longValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Double wrapValue(double k) {
-+ return new Double(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected double unwrapValue(Object value) {
-+ return ((Double)value).doubleValue();
-+ }
-+
-+} // TLongDoubleHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TLongFloatHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TLongFloatHashMap;
-+import gnu.trove.TLongFloatIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TLongFloatHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TLongFloatHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TLongFloatHashMapDecorator extends AbstractMap<Long, Float>
-+ implements Map<Long, Float>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TLongFloatHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TLongFloatHashMapDecorator(TLongFloatHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TLongFloatHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TLongFloatHashMapDecorator clone() {
-+ try {
-+ TLongFloatHashMapDecorator copy = (TLongFloatHashMapDecorator) super.clone();
-+ copy._map = (TLongFloatHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Float(0) if none was found.
-+ */
-+ public Float put(Long key, Float value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Long && val instanceof Float) {
-+ long k = unwrapKey(key);
-+ float v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Float get(Long key) {
-+ long k = unwrapKey(key);
-+ float v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Float(0) if it was not found in the map
-+ */
-+ public Float remove(Long key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Long,Float>> entrySet() {
-+ return new AbstractSet<Map.Entry<Long,Float>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TLongFloatHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TLongFloatHashMapDecorator.this.containsKey(k)
-+ && TLongFloatHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Long,Float>> iterator() {
-+ return new Iterator<Map.Entry<Long,Float>>() {
-+ private final TLongFloatIterator it = _map.iterator();
-+
-+ public Map.Entry<Long,Float> next() {
-+ it.advance();
-+ final Long key = wrapKey(it.key());
-+ final Float v = wrapValue(it.value());
-+ return new Map.Entry<Long,Float>() {
-+ private Float val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Long getKey() {
-+ return key;
-+ }
-+
-+ public Float getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Float setValue(Float value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Float o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Long, Float>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TLongFloatHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Long, ? extends Float> map) {
-+ Iterator<? extends Entry<? extends Long,? extends Float>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Long,? extends Float> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Long wrapKey(long k) {
-+ return new Long(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected long unwrapKey(Object key) {
-+ return ((Long)key).longValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Float wrapValue(float k) {
-+ return new Float(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected float unwrapValue(Object value) {
-+ return ((Float)value).floatValue();
-+ }
-+
-+} // TLongFloatHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TLongHashSetDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,209 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TLongHashSet;
-+import gnu.trove.TLongIterator;
-+
-+import java.util.AbstractSet;
-+import java.util.Iterator;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TLongHashSet conform to the <tt>java.util.Set</tt> API.
-+ * This class simply decorates an underlying TLongHashSet and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Tue Sep 24 22:08:17 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TLongHashSetDecorator extends AbstractSet<Long> implements Set<Long> {
-+ /** the wrapped primitive set */
-+ protected TLongHashSet _set;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive set.
-+ */
-+ public TLongHashSetDecorator(TLongHashSet set) {
-+ super();
-+ this._set = set;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the set wrapped by this decorator.
-+ */
-+ public TLongHashSet getSet() {
-+ return _set;
-+ }
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TLongHashSetDecorator clone() {
-+ try {
-+ TLongHashSetDecorator copy = (TLongHashSetDecorator) super.clone();
-+ copy._set = (TLongHashSet) _set.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable
-+ }
-+ }
-+
-+ /**
-+ * Inserts a value into the set.
-+ *
-+ * @param value true if the set was modified by the insertion
-+ */
-+ public boolean add(Long value) {
-+ return _set.add(unwrap(value));
-+ }
-+
-+ /**
-+ * Compares this set with another set for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the sets are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_set.equals(other)) {
-+ return true; // comparing two trove sets
-+ } else if (other instanceof Set) {
-+ Set that = (Set) other;
-+ if (that.size() != _set.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Object val = it.next();
-+ if (val instanceof Long) {
-+ long v = unwrap(val);
-+ if (_set.contains(v)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other set
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Empties the set.
-+ */
-+ public void clear() {
-+ this._set.clear();
-+ }
-+
-+ /**
-+ * Deletes a value from the set.
-+ *
-+ * @param value an <code>Object</code> value
-+ * @return true if the set was modified
-+ */
-+ public boolean remove(Object value) {
-+ return _set.remove(unwrap(value));
-+ }
-+
-+ /**
-+ * Creates an iterator over the values of the set.
-+ *
-+ * @return an iterator with support for removals in the underlying set
-+ */
-+ public Iterator<Long> iterator() {
-+ return new Iterator<Long>() {
-+ private final TLongIterator it = _set.iterator();
-+
-+ public Long next() {
-+ return wrap(it.next());
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Returns the number of entries in the set.
-+ *
-+ * @return the set's size.
-+ */
-+ public int size() {
-+ return this._set.size();
-+ }
-+
-+ /**
-+ * Indicates whether set has any entries.
-+ *
-+ * @return true if the set is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying set
-+ * @return an Object representation of the value
-+ */
-+ protected Long wrap(long k) {
-+ return new Long(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected long unwrap(Object value) {
-+ return ((Long) value).longValue();
-+ }
-+} // TLongHashSetDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TLongIntHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TLongIntHashMap;
-+import gnu.trove.TLongIntIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TLongIntHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TLongIntHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TLongIntHashMapDecorator extends AbstractMap<Long, Integer>
-+ implements Map<Long, Integer>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TLongIntHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TLongIntHashMapDecorator(TLongIntHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TLongIntHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TLongIntHashMapDecorator clone() {
-+ try {
-+ TLongIntHashMapDecorator copy = (TLongIntHashMapDecorator) super.clone();
-+ copy._map = (TLongIntHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public Integer put(Long key, Integer value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Long && val instanceof Integer) {
-+ long k = unwrapKey(key);
-+ int v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Integer get(Long key) {
-+ long k = unwrapKey(key);
-+ int v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public Integer remove(Long key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Long,Integer>> entrySet() {
-+ return new AbstractSet<Map.Entry<Long,Integer>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TLongIntHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TLongIntHashMapDecorator.this.containsKey(k)
-+ && TLongIntHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Long,Integer>> iterator() {
-+ return new Iterator<Map.Entry<Long,Integer>>() {
-+ private final TLongIntIterator it = _map.iterator();
-+
-+ public Map.Entry<Long,Integer> next() {
-+ it.advance();
-+ final Long key = wrapKey(it.key());
-+ final Integer v = wrapValue(it.value());
-+ return new Map.Entry<Long,Integer>() {
-+ private Integer val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Long getKey() {
-+ return key;
-+ }
-+
-+ public Integer getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Integer setValue(Integer value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Integer o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Long, Integer>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TLongIntHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Long, ? extends Integer> map) {
-+ Iterator<? extends Entry<? extends Long,? extends Integer>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Long,? extends Integer> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Long wrapKey(long k) {
-+ return new Long(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected long unwrapKey(Object key) {
-+ return ((Long)key).longValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Integer wrapValue(int k) {
-+ return new Integer(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected int unwrapValue(Object value) {
-+ return ((Integer)value).intValue();
-+ }
-+
-+} // TLongIntHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TLongLongHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TLongLongHashMap;
-+import gnu.trove.TLongLongIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TLongLongHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TLongLongHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TLongLongHashMapDecorator extends AbstractMap<Long, Long>
-+ implements Map<Long, Long>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TLongLongHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TLongLongHashMapDecorator(TLongLongHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TLongLongHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TLongLongHashMapDecorator clone() {
-+ try {
-+ TLongLongHashMapDecorator copy = (TLongLongHashMapDecorator) super.clone();
-+ copy._map = (TLongLongHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Long(0) if none was found.
-+ */
-+ public Long put(Long key, Long value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Long && val instanceof Long) {
-+ long k = unwrapKey(key);
-+ long v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Long get(Long key) {
-+ long k = unwrapKey(key);
-+ long v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Long(0) if it was not found in the map
-+ */
-+ public Long remove(Long key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Long,Long>> entrySet() {
-+ return new AbstractSet<Map.Entry<Long,Long>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TLongLongHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TLongLongHashMapDecorator.this.containsKey(k)
-+ && TLongLongHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Long,Long>> iterator() {
-+ return new Iterator<Map.Entry<Long,Long>>() {
-+ private final TLongLongIterator it = _map.iterator();
-+
-+ public Map.Entry<Long,Long> next() {
-+ it.advance();
-+ final Long key = wrapKey(it.key());
-+ final Long v = wrapValue(it.value());
-+ return new Map.Entry<Long,Long>() {
-+ private Long val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Long getKey() {
-+ return key;
-+ }
-+
-+ public Long getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Long setValue(Long value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Long o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Long, Long>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TLongLongHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Long, ? extends Long> map) {
-+ Iterator<? extends Entry<? extends Long,? extends Long>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Long,? extends Long> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Long wrapKey(long k) {
-+ return new Long(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected long unwrapKey(Object key) {
-+ return ((Long)key).longValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Long wrapValue(long k) {
-+ return new Long(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected long unwrapValue(Object value) {
-+ return ((Long)value).longValue();
-+ }
-+
-+} // TLongLongHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TLongObjectHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,365 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TLongObjectHashMap;
-+import gnu.trove.TLongObjectIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TLongObjectHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TLongObjectHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TLongObjectHashMapDecorator<V> extends AbstractMap<Long, V>
-+ implements Map<Long, V>, Cloneable {
-+
-+ /**
-+ * the wrapped primitive map
-+ */
-+ protected TLongObjectHashMap<V> _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TLongObjectHashMapDecorator(TLongObjectHashMap<V> map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TLongObjectHashMap<V> getMap() {
-+ return _map;
-+ }
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TLongObjectHashMapDecorator clone() {
-+ try {
-+ TLongObjectHashMapDecorator copy = (TLongObjectHashMapDecorator) super.clone();
-+ copy._map = (TLongObjectHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public V put(Long key, V value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Long) {
-+ long k = unwrapKey(key);
-+ Object v = unwrapValue((V) val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public V get(Object key) {
-+ return _map.get(unwrapKey(key));
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public V remove(Object key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Long,V>> entrySet() {
-+ return new AbstractSet<Map.Entry<Long,V>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TLongObjectHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TLongObjectHashMapDecorator.this.containsKey(k) &&
-+ TLongObjectHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Long,V>> iterator() {
-+ return new Iterator<Map.Entry<Long,V>>() {
-+ private final TLongObjectIterator<V> it = _map.iterator();
-+
-+ public Map.Entry<Long,V> next() {
-+ it.advance();
-+ final Long key = wrapKey(it.key());
-+ final V v = wrapValue(it.value());
-+ return new Map.Entry<Long,V>() {
-+ private V val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Long getKey() {
-+ return key;
-+ }
-+
-+ public V getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public V setValue(V value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Map.Entry<Long,V> o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Long,V>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TLongObjectHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue((V) val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Long, ? extends V> map) {
-+ Iterator<? extends Entry<? extends Long,? extends V>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Long,? extends V> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Long wrapKey(long k) {
-+ return new Long(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected long unwrapKey(Object key) {
-+ return ((Long)key).longValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param o value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected final V wrapValue(V o) {
-+ return o;
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected final V unwrapValue(V value) {
-+ return value;
-+ }
-+
-+} // TLongObjectHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TLongShortHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TLongShortHashMap;
-+import gnu.trove.TLongShortIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TLongShortHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TLongShortHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TLongShortHashMapDecorator extends AbstractMap<Long, Short>
-+ implements Map<Long, Short>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TLongShortHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TLongShortHashMapDecorator(TLongShortHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TLongShortHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TLongShortHashMapDecorator clone() {
-+ try {
-+ TLongShortHashMapDecorator copy = (TLongShortHashMapDecorator) super.clone();
-+ copy._map = (TLongShortHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Short(0) if none was found.
-+ */
-+ public Short put(Long key, Short value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Long && val instanceof Short) {
-+ long k = unwrapKey(key);
-+ short v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Short get(Long key) {
-+ long k = unwrapKey(key);
-+ short v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Short(0) if it was not found in the map
-+ */
-+ public Short remove(Long key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Long,Short>> entrySet() {
-+ return new AbstractSet<Map.Entry<Long,Short>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TLongShortHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TLongShortHashMapDecorator.this.containsKey(k)
-+ && TLongShortHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Long,Short>> iterator() {
-+ return new Iterator<Map.Entry<Long,Short>>() {
-+ private final TLongShortIterator it = _map.iterator();
-+
-+ public Map.Entry<Long,Short> next() {
-+ it.advance();
-+ final Long key = wrapKey(it.key());
-+ final Short v = wrapValue(it.value());
-+ return new Map.Entry<Long,Short>() {
-+ private Short val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Long getKey() {
-+ return key;
-+ }
-+
-+ public Short getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Short setValue(Short value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Short o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Long, Short>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TLongShortHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Long, ? extends Short> map) {
-+ Iterator<? extends Entry<? extends Long,? extends Short>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Long,? extends Short> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Long wrapKey(long k) {
-+ return new Long(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected long unwrapKey(Object key) {
-+ return ((Long)key).longValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Short wrapValue(short k) {
-+ return new Short(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected short unwrapValue(Object value) {
-+ return ((Short)value).shortValue();
-+ }
-+
-+} // TLongShortHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TObjectByteHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,373 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TObjectByteHashMap;
-+import gnu.trove.TObjectByteIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TObjectByteHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TObjectByteHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TObjectByteHashMapDecorator<V> extends AbstractMap<V, Byte> implements Map<V, Byte> {
-+ /**
-+ * the wrapped primitive map
-+ */
-+ protected TObjectByteHashMap<V> _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TObjectByteHashMapDecorator(TObjectByteHashMap<V> map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TObjectByteHashMap<V> getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TObjectByteHashMapDecorator clone() {
-+ try {
-+ TObjectByteHashMapDecorator copy = (TObjectByteHashMapDecorator) super.clone();
-+ copy._map = (TObjectByteHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public Byte put(V key, Byte value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (val instanceof Byte) {
-+ V k = unwrapKey(key);
-+ byte v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Byte get(Object key) {
-+ V k = unwrapKey(key);
-+ byte v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public Byte remove(Object key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<V,Byte>> entrySet() {
-+ return new AbstractSet<Map.Entry<V,Byte>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TObjectByteHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TObjectByteHashMapDecorator.this.containsKey(k) &&
-+ TObjectByteHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<V,Byte>> iterator() {
-+ return new Iterator<Map.Entry<V,Byte>>() {
-+ private final TObjectByteIterator<V> it = _map.iterator();
-+
-+ public Map.Entry<V,Byte> next() {
-+ it.advance();
-+ final V key = wrapKey(it.key());
-+ final Byte v = wrapValue(it.value());
-+ return new Map.Entry<V,Byte>() {
-+ private Byte val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry &&
-+ ((Map.Entry) o).getKey().equals(key) &&
-+ ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public V getKey() {
-+ return key;
-+ }
-+
-+ public Byte getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Byte setValue(Byte value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Byte o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<V,Byte>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TObjectByteHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends V, ? extends Byte> map) {
-+ Iterator<? extends Entry<? extends V,? extends Byte>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends V,? extends Byte> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param o key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected final V wrapKey(Object o) {
-+ return (V) o;
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected final V unwrapKey(Object key) {
-+ return (V) key;
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Byte wrapValue(byte k) {
-+ return new Byte(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected byte unwrapValue(Object value) {
-+ return ((Byte) value).byteValue();
-+ }
-+
-+} // TObjectByteHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TObjectDoubleHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,373 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TObjectDoubleHashMap;
-+import gnu.trove.TObjectDoubleIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TObjectDoubleHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TObjectDoubleHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TObjectDoubleHashMapDecorator<V> extends AbstractMap<V, Double> implements Map<V, Double> {
-+ /**
-+ * the wrapped primitive map
-+ */
-+ protected TObjectDoubleHashMap<V> _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TObjectDoubleHashMapDecorator(TObjectDoubleHashMap<V> map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TObjectDoubleHashMap<V> getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TObjectDoubleHashMapDecorator clone() {
-+ try {
-+ TObjectDoubleHashMapDecorator copy = (TObjectDoubleHashMapDecorator) super.clone();
-+ copy._map = (TObjectDoubleHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public Double put(V key, Double value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (val instanceof Double) {
-+ V k = unwrapKey(key);
-+ double v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Double get(Object key) {
-+ V k = unwrapKey(key);
-+ double v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public Double remove(Object key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<V,Double>> entrySet() {
-+ return new AbstractSet<Map.Entry<V,Double>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TObjectDoubleHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TObjectDoubleHashMapDecorator.this.containsKey(k) &&
-+ TObjectDoubleHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<V,Double>> iterator() {
-+ return new Iterator<Map.Entry<V,Double>>() {
-+ private final TObjectDoubleIterator<V> it = _map.iterator();
-+
-+ public Map.Entry<V,Double> next() {
-+ it.advance();
-+ final V key = wrapKey(it.key());
-+ final Double v = wrapValue(it.value());
-+ return new Map.Entry<V,Double>() {
-+ private Double val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry &&
-+ ((Map.Entry) o).getKey().equals(key) &&
-+ ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public V getKey() {
-+ return key;
-+ }
-+
-+ public Double getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Double setValue(Double value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Double o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<V,Double>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TObjectDoubleHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends V, ? extends Double> map) {
-+ Iterator<? extends Entry<? extends V,? extends Double>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends V,? extends Double> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param o key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected final V wrapKey(Object o) {
-+ return (V) o;
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected final V unwrapKey(Object key) {
-+ return (V) key;
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Double wrapValue(double k) {
-+ return new Double(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected double unwrapValue(Object value) {
-+ return ((Double) value).doubleValue();
-+ }
-+
-+} // TObjectDoubleHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TObjectFloatHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,373 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TObjectFloatHashMap;
-+import gnu.trove.TObjectFloatIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TObjectFloatHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TObjectFloatHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TObjectFloatHashMapDecorator<V> extends AbstractMap<V, Float> implements Map<V, Float> {
-+ /**
-+ * the wrapped primitive map
-+ */
-+ protected TObjectFloatHashMap<V> _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TObjectFloatHashMapDecorator(TObjectFloatHashMap<V> map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TObjectFloatHashMap<V> getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TObjectFloatHashMapDecorator clone() {
-+ try {
-+ TObjectFloatHashMapDecorator copy = (TObjectFloatHashMapDecorator) super.clone();
-+ copy._map = (TObjectFloatHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public Float put(V key, Float value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (val instanceof Float) {
-+ V k = unwrapKey(key);
-+ float v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Float get(Object key) {
-+ V k = unwrapKey(key);
-+ float v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public Float remove(Object key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<V,Float>> entrySet() {
-+ return new AbstractSet<Map.Entry<V,Float>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TObjectFloatHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TObjectFloatHashMapDecorator.this.containsKey(k) &&
-+ TObjectFloatHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<V,Float>> iterator() {
-+ return new Iterator<Map.Entry<V,Float>>() {
-+ private final TObjectFloatIterator<V> it = _map.iterator();
-+
-+ public Map.Entry<V,Float> next() {
-+ it.advance();
-+ final V key = wrapKey(it.key());
-+ final Float v = wrapValue(it.value());
-+ return new Map.Entry<V,Float>() {
-+ private Float val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry &&
-+ ((Map.Entry) o).getKey().equals(key) &&
-+ ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public V getKey() {
-+ return key;
-+ }
-+
-+ public Float getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Float setValue(Float value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Float o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<V,Float>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TObjectFloatHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends V, ? extends Float> map) {
-+ Iterator<? extends Entry<? extends V,? extends Float>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends V,? extends Float> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param o key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected final V wrapKey(Object o) {
-+ return (V) o;
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected final V unwrapKey(Object key) {
-+ return (V) key;
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Float wrapValue(float k) {
-+ return new Float(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected float unwrapValue(Object value) {
-+ return ((Float) value).floatValue();
-+ }
-+
-+} // TObjectFloatHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TObjectIntHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,373 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TObjectIntHashMap;
-+import gnu.trove.TObjectIntIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TObjectIntHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TObjectIntHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TObjectIntHashMapDecorator<V> extends AbstractMap<V, Integer> implements Map<V, Integer> {
-+ /**
-+ * the wrapped primitive map
-+ */
-+ protected TObjectIntHashMap<V> _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TObjectIntHashMapDecorator(TObjectIntHashMap<V> map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TObjectIntHashMap<V> getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TObjectIntHashMapDecorator clone() {
-+ try {
-+ TObjectIntHashMapDecorator copy = (TObjectIntHashMapDecorator) super.clone();
-+ copy._map = (TObjectIntHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public Integer put(V key, Integer value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (val instanceof Integer) {
-+ V k = unwrapKey(key);
-+ int v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Integer get(Object key) {
-+ V k = unwrapKey(key);
-+ int v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public Integer remove(Object key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<V,Integer>> entrySet() {
-+ return new AbstractSet<Map.Entry<V,Integer>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TObjectIntHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TObjectIntHashMapDecorator.this.containsKey(k) &&
-+ TObjectIntHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<V,Integer>> iterator() {
-+ return new Iterator<Map.Entry<V,Integer>>() {
-+ private final TObjectIntIterator<V> it = _map.iterator();
-+
-+ public Map.Entry<V,Integer> next() {
-+ it.advance();
-+ final V key = wrapKey(it.key());
-+ final Integer v = wrapValue(it.value());
-+ return new Map.Entry<V,Integer>() {
-+ private Integer val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry &&
-+ ((Map.Entry) o).getKey().equals(key) &&
-+ ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public V getKey() {
-+ return key;
-+ }
-+
-+ public Integer getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Integer setValue(Integer value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Integer o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<V,Integer>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TObjectIntHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends V, ? extends Integer> map) {
-+ Iterator<? extends Entry<? extends V,? extends Integer>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends V,? extends Integer> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param o key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected final V wrapKey(Object o) {
-+ return (V) o;
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected final V unwrapKey(Object key) {
-+ return (V) key;
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Integer wrapValue(int k) {
-+ return new Integer(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected int unwrapValue(Object value) {
-+ return ((Integer) value).intValue();
-+ }
-+
-+} // TObjectIntHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TObjectLongHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,373 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TObjectLongHashMap;
-+import gnu.trove.TObjectLongIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TObjectLongHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TObjectLongHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TObjectLongHashMapDecorator<V> extends AbstractMap<V, Long> implements Map<V, Long> {
-+ /**
-+ * the wrapped primitive map
-+ */
-+ protected TObjectLongHashMap<V> _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TObjectLongHashMapDecorator(TObjectLongHashMap<V> map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TObjectLongHashMap<V> getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TObjectLongHashMapDecorator clone() {
-+ try {
-+ TObjectLongHashMapDecorator copy = (TObjectLongHashMapDecorator) super.clone();
-+ copy._map = (TObjectLongHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public Long put(V key, Long value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (val instanceof Long) {
-+ V k = unwrapKey(key);
-+ long v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Long get(Object key) {
-+ V k = unwrapKey(key);
-+ long v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public Long remove(Object key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<V,Long>> entrySet() {
-+ return new AbstractSet<Map.Entry<V,Long>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TObjectLongHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TObjectLongHashMapDecorator.this.containsKey(k) &&
-+ TObjectLongHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<V,Long>> iterator() {
-+ return new Iterator<Map.Entry<V,Long>>() {
-+ private final TObjectLongIterator<V> it = _map.iterator();
-+
-+ public Map.Entry<V,Long> next() {
-+ it.advance();
-+ final V key = wrapKey(it.key());
-+ final Long v = wrapValue(it.value());
-+ return new Map.Entry<V,Long>() {
-+ private Long val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry &&
-+ ((Map.Entry) o).getKey().equals(key) &&
-+ ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public V getKey() {
-+ return key;
-+ }
-+
-+ public Long getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Long setValue(Long value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Long o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<V,Long>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TObjectLongHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends V, ? extends Long> map) {
-+ Iterator<? extends Entry<? extends V,? extends Long>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends V,? extends Long> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param o key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected final V wrapKey(Object o) {
-+ return (V) o;
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected final V unwrapKey(Object key) {
-+ return (V) key;
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Long wrapValue(long k) {
-+ return new Long(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected long unwrapValue(Object value) {
-+ return ((Long) value).longValue();
-+ }
-+
-+} // TObjectLongHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TObjectShortHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,373 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TObjectShortHashMap;
-+import gnu.trove.TObjectShortIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TObjectShortHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TObjectShortHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TObjectShortHashMapDecorator<V> extends AbstractMap<V, Short> implements Map<V, Short> {
-+ /**
-+ * the wrapped primitive map
-+ */
-+ protected TObjectShortHashMap<V> _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TObjectShortHashMapDecorator(TObjectShortHashMap<V> map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TObjectShortHashMap<V> getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TObjectShortHashMapDecorator clone() {
-+ try {
-+ TObjectShortHashMapDecorator copy = (TObjectShortHashMapDecorator) super.clone();
-+ copy._map = (TObjectShortHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public Short put(V key, Short value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (val instanceof Short) {
-+ V k = unwrapKey(key);
-+ short v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Short get(Object key) {
-+ V k = unwrapKey(key);
-+ short v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public Short remove(Object key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<V,Short>> entrySet() {
-+ return new AbstractSet<Map.Entry<V,Short>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TObjectShortHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TObjectShortHashMapDecorator.this.containsKey(k) &&
-+ TObjectShortHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<V,Short>> iterator() {
-+ return new Iterator<Map.Entry<V,Short>>() {
-+ private final TObjectShortIterator<V> it = _map.iterator();
-+
-+ public Map.Entry<V,Short> next() {
-+ it.advance();
-+ final V key = wrapKey(it.key());
-+ final Short v = wrapValue(it.value());
-+ return new Map.Entry<V,Short>() {
-+ private Short val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry &&
-+ ((Map.Entry) o).getKey().equals(key) &&
-+ ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public V getKey() {
-+ return key;
-+ }
-+
-+ public Short getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Short setValue(Short value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Short o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<V,Short>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TObjectShortHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends V, ? extends Short> map) {
-+ Iterator<? extends Entry<? extends V,? extends Short>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends V,? extends Short> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param o key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected final V wrapKey(Object o) {
-+ return (V) o;
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected final V unwrapKey(Object key) {
-+ return (V) key;
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Short wrapValue(short k) {
-+ return new Short(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected short unwrapValue(Object value) {
-+ return ((Short) value).shortValue();
-+ }
-+
-+} // TObjectShortHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TShortByteHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TShortByteHashMap;
-+import gnu.trove.TShortByteIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TShortByteHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TShortByteHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TShortByteHashMapDecorator extends AbstractMap<Short, Byte>
-+ implements Map<Short, Byte>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TShortByteHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TShortByteHashMapDecorator(TShortByteHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TShortByteHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TShortByteHashMapDecorator clone() {
-+ try {
-+ TShortByteHashMapDecorator copy = (TShortByteHashMapDecorator) super.clone();
-+ copy._map = (TShortByteHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Byte(0) if none was found.
-+ */
-+ public Byte put(Short key, Byte value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Short && val instanceof Byte) {
-+ short k = unwrapKey(key);
-+ byte v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Byte get(Short key) {
-+ short k = unwrapKey(key);
-+ byte v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Byte(0) if it was not found in the map
-+ */
-+ public Byte remove(Short key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Short,Byte>> entrySet() {
-+ return new AbstractSet<Map.Entry<Short,Byte>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TShortByteHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TShortByteHashMapDecorator.this.containsKey(k)
-+ && TShortByteHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Short,Byte>> iterator() {
-+ return new Iterator<Map.Entry<Short,Byte>>() {
-+ private final TShortByteIterator it = _map.iterator();
-+
-+ public Map.Entry<Short,Byte> next() {
-+ it.advance();
-+ final Short key = wrapKey(it.key());
-+ final Byte v = wrapValue(it.value());
-+ return new Map.Entry<Short,Byte>() {
-+ private Byte val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Short getKey() {
-+ return key;
-+ }
-+
-+ public Byte getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Byte setValue(Byte value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Byte o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Short, Byte>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TShortByteHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Short, ? extends Byte> map) {
-+ Iterator<? extends Entry<? extends Short,? extends Byte>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Short,? extends Byte> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Short wrapKey(short k) {
-+ return new Short(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected short unwrapKey(Object key) {
-+ return ((Short)key).shortValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Byte wrapValue(byte k) {
-+ return new Byte(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected byte unwrapValue(Object value) {
-+ return ((Byte)value).byteValue();
-+ }
-+
-+} // TShortByteHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TShortDoubleHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TShortDoubleHashMap;
-+import gnu.trove.TShortDoubleIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TShortDoubleHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TShortDoubleHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TShortDoubleHashMapDecorator extends AbstractMap<Short, Double>
-+ implements Map<Short, Double>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TShortDoubleHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TShortDoubleHashMapDecorator(TShortDoubleHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TShortDoubleHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TShortDoubleHashMapDecorator clone() {
-+ try {
-+ TShortDoubleHashMapDecorator copy = (TShortDoubleHashMapDecorator) super.clone();
-+ copy._map = (TShortDoubleHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Double(0) if none was found.
-+ */
-+ public Double put(Short key, Double value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Short && val instanceof Double) {
-+ short k = unwrapKey(key);
-+ double v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Double get(Short key) {
-+ short k = unwrapKey(key);
-+ double v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Double(0) if it was not found in the map
-+ */
-+ public Double remove(Short key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Short,Double>> entrySet() {
-+ return new AbstractSet<Map.Entry<Short,Double>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TShortDoubleHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TShortDoubleHashMapDecorator.this.containsKey(k)
-+ && TShortDoubleHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Short,Double>> iterator() {
-+ return new Iterator<Map.Entry<Short,Double>>() {
-+ private final TShortDoubleIterator it = _map.iterator();
-+
-+ public Map.Entry<Short,Double> next() {
-+ it.advance();
-+ final Short key = wrapKey(it.key());
-+ final Double v = wrapValue(it.value());
-+ return new Map.Entry<Short,Double>() {
-+ private Double val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Short getKey() {
-+ return key;
-+ }
-+
-+ public Double getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Double setValue(Double value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Double o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Short, Double>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TShortDoubleHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Short, ? extends Double> map) {
-+ Iterator<? extends Entry<? extends Short,? extends Double>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Short,? extends Double> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Short wrapKey(short k) {
-+ return new Short(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected short unwrapKey(Object key) {
-+ return ((Short)key).shortValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Double wrapValue(double k) {
-+ return new Double(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected double unwrapValue(Object value) {
-+ return ((Double)value).doubleValue();
-+ }
-+
-+} // TShortDoubleHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TShortFloatHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TShortFloatHashMap;
-+import gnu.trove.TShortFloatIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TShortFloatHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TShortFloatHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TShortFloatHashMapDecorator extends AbstractMap<Short, Float>
-+ implements Map<Short, Float>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TShortFloatHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TShortFloatHashMapDecorator(TShortFloatHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TShortFloatHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TShortFloatHashMapDecorator clone() {
-+ try {
-+ TShortFloatHashMapDecorator copy = (TShortFloatHashMapDecorator) super.clone();
-+ copy._map = (TShortFloatHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Float(0) if none was found.
-+ */
-+ public Float put(Short key, Float value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Short && val instanceof Float) {
-+ short k = unwrapKey(key);
-+ float v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Float get(Short key) {
-+ short k = unwrapKey(key);
-+ float v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Float(0) if it was not found in the map
-+ */
-+ public Float remove(Short key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Short,Float>> entrySet() {
-+ return new AbstractSet<Map.Entry<Short,Float>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TShortFloatHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TShortFloatHashMapDecorator.this.containsKey(k)
-+ && TShortFloatHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Short,Float>> iterator() {
-+ return new Iterator<Map.Entry<Short,Float>>() {
-+ private final TShortFloatIterator it = _map.iterator();
-+
-+ public Map.Entry<Short,Float> next() {
-+ it.advance();
-+ final Short key = wrapKey(it.key());
-+ final Float v = wrapValue(it.value());
-+ return new Map.Entry<Short,Float>() {
-+ private Float val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Short getKey() {
-+ return key;
-+ }
-+
-+ public Float getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Float setValue(Float value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Float o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Short, Float>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TShortFloatHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Short, ? extends Float> map) {
-+ Iterator<? extends Entry<? extends Short,? extends Float>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Short,? extends Float> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Short wrapKey(short k) {
-+ return new Short(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected short unwrapKey(Object key) {
-+ return ((Short)key).shortValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Float wrapValue(float k) {
-+ return new Float(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected float unwrapValue(Object value) {
-+ return ((Float)value).floatValue();
-+ }
-+
-+} // TShortFloatHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TShortHashSetDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,209 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TShortHashSet;
-+import gnu.trove.TShortIterator;
-+
-+import java.util.AbstractSet;
-+import java.util.Iterator;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TShortHashSet conform to the <tt>java.util.Set</tt> API.
-+ * This class simply decorates an underlying TShortHashSet and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Tue Sep 24 22:08:17 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TShortHashSetDecorator extends AbstractSet<Short> implements Set<Short> {
-+ /** the wrapped primitive set */
-+ protected TShortHashSet _set;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive set.
-+ */
-+ public TShortHashSetDecorator(TShortHashSet set) {
-+ super();
-+ this._set = set;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the set wrapped by this decorator.
-+ */
-+ public TShortHashSet getSet() {
-+ return _set;
-+ }
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TShortHashSetDecorator clone() {
-+ try {
-+ TShortHashSetDecorator copy = (TShortHashSetDecorator) super.clone();
-+ copy._set = (TShortHashSet) _set.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable
-+ }
-+ }
-+
-+ /**
-+ * Inserts a value into the set.
-+ *
-+ * @param value true if the set was modified by the insertion
-+ */
-+ public boolean add(Short value) {
-+ return _set.add(unwrap(value));
-+ }
-+
-+ /**
-+ * Compares this set with another set for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the sets are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_set.equals(other)) {
-+ return true; // comparing two trove sets
-+ } else if (other instanceof Set) {
-+ Set that = (Set) other;
-+ if (that.size() != _set.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Object val = it.next();
-+ if (val instanceof Short) {
-+ short v = unwrap(val);
-+ if (_set.contains(v)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other set
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Empties the set.
-+ */
-+ public void clear() {
-+ this._set.clear();
-+ }
-+
-+ /**
-+ * Deletes a value from the set.
-+ *
-+ * @param value an <code>Object</code> value
-+ * @return true if the set was modified
-+ */
-+ public boolean remove(Object value) {
-+ return _set.remove(unwrap(value));
-+ }
-+
-+ /**
-+ * Creates an iterator over the values of the set.
-+ *
-+ * @return an iterator with support for removals in the underlying set
-+ */
-+ public Iterator<Short> iterator() {
-+ return new Iterator<Short>() {
-+ private final TShortIterator it = _set.iterator();
-+
-+ public Short next() {
-+ return wrap(it.next());
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Returns the number of entries in the set.
-+ *
-+ * @return the set's size.
-+ */
-+ public int size() {
-+ return this._set.size();
-+ }
-+
-+ /**
-+ * Indicates whether set has any entries.
-+ *
-+ * @return true if the set is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying set
-+ * @return an Object representation of the value
-+ */
-+ protected Short wrap(short k) {
-+ return new Short(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected short unwrap(Object value) {
-+ return ((Short) value).shortValue();
-+ }
-+} // TShortHashSetDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TShortIntHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TShortIntHashMap;
-+import gnu.trove.TShortIntIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TShortIntHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TShortIntHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TShortIntHashMapDecorator extends AbstractMap<Short, Integer>
-+ implements Map<Short, Integer>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TShortIntHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TShortIntHashMapDecorator(TShortIntHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TShortIntHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TShortIntHashMapDecorator clone() {
-+ try {
-+ TShortIntHashMapDecorator copy = (TShortIntHashMapDecorator) super.clone();
-+ copy._map = (TShortIntHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public Integer put(Short key, Integer value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Short && val instanceof Integer) {
-+ short k = unwrapKey(key);
-+ int v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Integer get(Short key) {
-+ short k = unwrapKey(key);
-+ int v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public Integer remove(Short key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Short,Integer>> entrySet() {
-+ return new AbstractSet<Map.Entry<Short,Integer>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TShortIntHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TShortIntHashMapDecorator.this.containsKey(k)
-+ && TShortIntHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Short,Integer>> iterator() {
-+ return new Iterator<Map.Entry<Short,Integer>>() {
-+ private final TShortIntIterator it = _map.iterator();
-+
-+ public Map.Entry<Short,Integer> next() {
-+ it.advance();
-+ final Short key = wrapKey(it.key());
-+ final Integer v = wrapValue(it.value());
-+ return new Map.Entry<Short,Integer>() {
-+ private Integer val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Short getKey() {
-+ return key;
-+ }
-+
-+ public Integer getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Integer setValue(Integer value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Integer o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Short, Integer>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TShortIntHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Short, ? extends Integer> map) {
-+ Iterator<? extends Entry<? extends Short,? extends Integer>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Short,? extends Integer> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Short wrapKey(short k) {
-+ return new Short(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected short unwrapKey(Object key) {
-+ return ((Short)key).shortValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Integer wrapValue(int k) {
-+ return new Integer(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected int unwrapValue(Object value) {
-+ return ((Integer)value).intValue();
-+ }
-+
-+} // TShortIntHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TShortLongHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TShortLongHashMap;
-+import gnu.trove.TShortLongIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TShortLongHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TShortLongHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TShortLongHashMapDecorator extends AbstractMap<Short, Long>
-+ implements Map<Short, Long>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TShortLongHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TShortLongHashMapDecorator(TShortLongHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TShortLongHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TShortLongHashMapDecorator clone() {
-+ try {
-+ TShortLongHashMapDecorator copy = (TShortLongHashMapDecorator) super.clone();
-+ copy._map = (TShortLongHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Long(0) if none was found.
-+ */
-+ public Long put(Short key, Long value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Short && val instanceof Long) {
-+ short k = unwrapKey(key);
-+ long v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Long get(Short key) {
-+ short k = unwrapKey(key);
-+ long v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Long(0) if it was not found in the map
-+ */
-+ public Long remove(Short key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Short,Long>> entrySet() {
-+ return new AbstractSet<Map.Entry<Short,Long>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TShortLongHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TShortLongHashMapDecorator.this.containsKey(k)
-+ && TShortLongHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Short,Long>> iterator() {
-+ return new Iterator<Map.Entry<Short,Long>>() {
-+ private final TShortLongIterator it = _map.iterator();
-+
-+ public Map.Entry<Short,Long> next() {
-+ it.advance();
-+ final Short key = wrapKey(it.key());
-+ final Long v = wrapValue(it.value());
-+ return new Map.Entry<Short,Long>() {
-+ private Long val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Short getKey() {
-+ return key;
-+ }
-+
-+ public Long getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Long setValue(Long value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Long o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Short, Long>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TShortLongHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Short, ? extends Long> map) {
-+ Iterator<? extends Entry<? extends Short,? extends Long>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Short,? extends Long> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Short wrapKey(short k) {
-+ return new Short(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected short unwrapKey(Object key) {
-+ return ((Short)key).shortValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Long wrapValue(long k) {
-+ return new Long(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected long unwrapValue(Object value) {
-+ return ((Long)value).longValue();
-+ }
-+
-+} // TShortLongHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TShortObjectHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,365 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TShortObjectHashMap;
-+import gnu.trove.TShortObjectIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TShortObjectHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TShortObjectHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TShortObjectHashMapDecorator<V> extends AbstractMap<Short, V>
-+ implements Map<Short, V>, Cloneable {
-+
-+ /**
-+ * the wrapped primitive map
-+ */
-+ protected TShortObjectHashMap<V> _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TShortObjectHashMapDecorator(TShortObjectHashMap<V> map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TShortObjectHashMap<V> getMap() {
-+ return _map;
-+ }
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TShortObjectHashMapDecorator clone() {
-+ try {
-+ TShortObjectHashMapDecorator copy = (TShortObjectHashMapDecorator) super.clone();
-+ copy._map = (TShortObjectHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Integer(0) if none was found.
-+ */
-+ public V put(Short key, V value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Short) {
-+ short k = unwrapKey(key);
-+ Object v = unwrapValue((V) val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public V get(Object key) {
-+ return _map.get(unwrapKey(key));
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Integer(0) if it was not found in the map
-+ */
-+ public V remove(Object key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Short,V>> entrySet() {
-+ return new AbstractSet<Map.Entry<Short,V>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TShortObjectHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TShortObjectHashMapDecorator.this.containsKey(k) &&
-+ TShortObjectHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Short,V>> iterator() {
-+ return new Iterator<Map.Entry<Short,V>>() {
-+ private final TShortObjectIterator<V> it = _map.iterator();
-+
-+ public Map.Entry<Short,V> next() {
-+ it.advance();
-+ final Short key = wrapKey(it.key());
-+ final V v = wrapValue(it.value());
-+ return new Map.Entry<Short,V>() {
-+ private V val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Short getKey() {
-+ return key;
-+ }
-+
-+ public V getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public V setValue(V value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Map.Entry<Short,V> o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Short,V>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TShortObjectHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue((V) val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Short, ? extends V> map) {
-+ Iterator<? extends Entry<? extends Short,? extends V>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Short,? extends V> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Short wrapKey(short k) {
-+ return new Short(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected short unwrapKey(Object key) {
-+ return ((Short)key).shortValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param o value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected final V wrapValue(V o) {
-+ return o;
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected final V unwrapValue(V value) {
-+ return value;
-+ }
-+
-+} // TShortObjectHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/decorator/TShortShortHashMapDecorator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,374 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove.decorator;
-+
-+import gnu.trove.TShortShortHashMap;
-+import gnu.trove.TShortShortIterator;
-+
-+import java.util.AbstractMap;
-+import java.util.AbstractSet;
-+import java.util.Collection;
-+import java.util.Iterator;
-+import java.util.Map.Entry;
-+import java.util.Map;
-+import java.util.Set;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Wrapper class to make a TShortShortHashMap conform to the <tt>java.util.Map</tt> API.
-+ * This class simply decorates an underlying TShortShortHashMap and translates the Object-based
-+ * APIs into their Trove primitive analogs.
-+ * <p/>
-+ * <p/>
-+ * Note that wrapping and unwrapping primitive values is extremely inefficient. If
-+ * possible, users of this class should override the appropriate methods in this class
-+ * and use a table of canonical values.
-+ * </p>
-+ * <p/>
-+ * Created: Mon Sep 23 22:07:40 PDT 2002
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+public class TShortShortHashMapDecorator extends AbstractMap<Short, Short>
-+ implements Map<Short, Short>, Cloneable {
-+
-+ /** the wrapped primitive map */
-+ protected TShortShortHashMap _map;
-+
-+ /**
-+ * Creates a wrapper that decorates the specified primitive map.
-+ */
-+ public TShortShortHashMapDecorator(TShortShortHashMap map) {
-+ super();
-+ this._map = map;
-+ }
-+
-+
-+ /**
-+ * Returns a reference to the map wrapped by this decorator.
-+ */
-+ public TShortShortHashMap getMap() {
-+ return _map;
-+ }
-+
-+
-+ /**
-+ * Clones the underlying trove collection and returns the clone wrapped in a new
-+ * decorator instance. This is a shallow clone except where primitives are
-+ * concerned.
-+ *
-+ * @return a copy of the receiver
-+ */
-+ public TShortShortHashMapDecorator clone() {
-+ try {
-+ TShortShortHashMapDecorator copy = (TShortShortHashMapDecorator) super.clone();
-+ copy._map = (TShortShortHashMap)_map.clone();
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // assert(false);
-+ throw new InternalError(); // we are cloneable, so this does not happen
-+ }
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or Short(0) if none was found.
-+ */
-+ public Short put(Short key, Short value) {
-+ return wrapValue(_map.put(unwrapKey(key), unwrapValue(value)));
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return true if the maps are identical
-+ */
-+ public boolean equals(Object other) {
-+ if (_map.equals(other)) {
-+ return true; // comparing two trove maps
-+ } else if (other instanceof Map) {
-+ Map that = (Map) other;
-+ if (that.size() != _map.size()) {
-+ return false; // different sizes, no need to compare
-+ } else { // now we have to do it the hard way
-+ Iterator it = that.entrySet().iterator();
-+ for (int i = that.size(); i-- > 0;) {
-+ Map.Entry e = (Map.Entry) it.next();
-+ Object key = e.getKey();
-+ Object val = e.getValue();
-+ if (key instanceof Short && val instanceof Short) {
-+ short k = unwrapKey(key);
-+ short v = unwrapValue(val);
-+ if (_map.containsKey(k) && v == _map.get(k)) {
-+ // match, ok to continue
-+ } else {
-+ return false; // no match: we're done
-+ }
-+ } else {
-+ return false; // different type in other map
-+ }
-+ }
-+ return true; // all entries match
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ /**
-+ * Retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or null if no such mapping exists.
-+ */
-+ public Short get(Short key) {
-+ short k = unwrapKey(key);
-+ short v = _map.get(k);
-+ // 0 may be a false positive since primitive maps
-+ // cannot return null, so we have to do an extra
-+ // check here.
-+ if (v == 0) {
-+ return _map.containsKey(k) ? wrapValue(v) : null;
-+ } else {
-+ return wrapValue(v);
-+ }
-+ }
-+
-+
-+ /**
-+ * Empties the map.
-+ */
-+ public void clear() {
-+ this._map.clear();
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the removed value, or Short(0) if it was not found in the map
-+ */
-+ public Short remove(Short key) {
-+ return wrapValue(_map.remove(unwrapKey(key)));
-+ }
-+
-+ /**
-+ * Returns a Set view on the entries of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Set<Map.Entry<Short,Short>> entrySet() {
-+ return new AbstractSet<Map.Entry<Short,Short>>() {
-+ public int size() {
-+ return _map.size();
-+ }
-+
-+ public boolean isEmpty() {
-+ return TShortShortHashMapDecorator.this.isEmpty();
-+ }
-+
-+ public boolean contains(Object o) {
-+ if (o instanceof Map.Entry) {
-+ Object k = ((Map.Entry) o).getKey();
-+ Object v = ((Map.Entry) o).getValue();
-+ return TShortShortHashMapDecorator.this.containsKey(k)
-+ && TShortShortHashMapDecorator.this.get(k).equals(v);
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public Iterator<Map.Entry<Short,Short>> iterator() {
-+ return new Iterator<Map.Entry<Short,Short>>() {
-+ private final TShortShortIterator it = _map.iterator();
-+
-+ public Map.Entry<Short,Short> next() {
-+ it.advance();
-+ final Short key = wrapKey(it.key());
-+ final Short v = wrapValue(it.value());
-+ return new Map.Entry<Short,Short>() {
-+ private Short val = v;
-+
-+ public boolean equals(Object o) {
-+ return o instanceof Map.Entry
-+ && ((Map.Entry) o).getKey().equals(key)
-+ && ((Map.Entry) o).getValue().equals(val);
-+ }
-+
-+ public Short getKey() {
-+ return key;
-+ }
-+
-+ public Short getValue() {
-+ return val;
-+ }
-+
-+ public int hashCode() {
-+ return key.hashCode() + val.hashCode();
-+ }
-+
-+ public Short setValue(Short value) {
-+ val = value;
-+ return put(key, value);
-+ }
-+ };
-+ }
-+
-+ public boolean hasNext() {
-+ return it.hasNext();
-+ }
-+
-+ public void remove() {
-+ it.remove();
-+ }
-+ };
-+ }
-+
-+ public boolean add(Short o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean remove(Object o) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean addAll(Collection<? extends Map.Entry<Short, Short>> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean retainAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public boolean removeAll(Collection<?> c) {
-+ throw new UnsupportedOperationException();
-+ }
-+
-+ public void clear() {
-+ TShortShortHashMapDecorator.this.clear();
-+ }
-+ };
-+ }
-+
-+ /**
-+ * Checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(Object val) {
-+ return _map.containsValue(unwrapValue(val));
-+ }
-+
-+ /**
-+ * Checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(Object key) {
-+ return _map.containsKey(unwrapKey(key));
-+ }
-+
-+ /**
-+ * Returns the number of entries in the map.
-+ *
-+ * @return the map's size.
-+ */
-+ public int size() {
-+ return this._map.size();
-+ }
-+
-+ /**
-+ * Indicates whether map has any entries.
-+ *
-+ * @return true if the map is empty
-+ */
-+ public boolean isEmpty() {
-+ return size() == 0;
-+ }
-+
-+ /**
-+ * Copies the key/value mappings in <tt>map</tt> into this map.
-+ * Note that this will be a <b>deep</b> copy, as storage is by
-+ * primitive value.
-+ *
-+ * @param map a <code>Map</code> value
-+ */
-+ public void putAll(Map<? extends Short, ? extends Short> map) {
-+ Iterator<? extends Entry<? extends Short,? extends Short>> it = map.entrySet().iterator();
-+ for (int i = map.size(); i-- > 0;) {
-+ Entry<? extends Short,? extends Short> e = it.next();
-+ this.put(e.getKey(), e.getValue());
-+ }
-+ }
-+
-+ /**
-+ * Wraps a key
-+ *
-+ * @param k key in the underlying map
-+ * @return an Object representation of the key
-+ */
-+ protected Short wrapKey(short k) {
-+ return new Short(k);
-+ }
-+
-+ /**
-+ * Unwraps a key
-+ *
-+ * @param key wrapped key
-+ * @return an unwrapped representation of the key
-+ */
-+ protected short unwrapKey(Object key) {
-+ return ((Short)key).shortValue();
-+ }
-+
-+ /**
-+ * Wraps a value
-+ *
-+ * @param k value in the underlying map
-+ * @return an Object representation of the value
-+ */
-+ protected Short wrapValue(short k) {
-+ return new Short(k);
-+ }
-+
-+ /**
-+ * Unwraps a value
-+ *
-+ * @param value wrapped value
-+ * @return an unwrapped representation of the value
-+ */
-+ protected short unwrapValue(Object value) {
-+ return ((Short)value).shortValue();
-+ }
-+
-+} // TShortShortHashMapDecorator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteArrayList.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,905 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.Externalizable;
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.util.Arrays;
-+import java.util.Random;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * A resizable, array-backed list of byte primitives.
-+ *
-+ * Created: Sat Dec 29 14:21:12 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+
-+public class TByteArrayList implements Externalizable, Cloneable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the data of the list */
-+ protected byte[] _data;
-+
-+ /** the index after the last entry in the list */
-+ protected int _pos;
-+
-+ /** the default capacity for new lists */
-+ protected static final int DEFAULT_CAPACITY = 10;
-+
-+ /**
-+ * Creates a new <code>TByteArrayList</code> instance with the
-+ * default capacity.
-+ */
-+ public TByteArrayList() {
-+ this(DEFAULT_CAPACITY);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteArrayList</code> instance with the
-+ * specified capacity.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public TByteArrayList(int capacity) {
-+ _data = new byte[capacity];
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteArrayList</code> instance whose
-+ * capacity is the greater of the length of <tt>values</tt> and
-+ * DEFAULT_CAPACITY and whose initial contents are the specified
-+ * values.
-+ *
-+ * @param values an <code>byte[]</code> value
-+ */
-+ public TByteArrayList(byte[] values) {
-+ this(Math.max(values.length, DEFAULT_CAPACITY));
-+ add(values);
-+ }
-+
-+ // sizing
-+
-+ /**
-+ * Grow the internal array as needed to accomodate the specified
-+ * number of elements. The size of the array bytes on each
-+ * resize unless <tt>capacity</tt> requires more than twice the
-+ * current capacity.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public void ensureCapacity(int capacity) {
-+ if (capacity > _data.length) {
-+ int newCap = Math.max(_data.length << 1, capacity);
-+ byte[] tmp = new byte[newCap];
-+ System.arraycopy(_data, 0, tmp, 0, _data.length);
-+ _data = tmp;
-+ }
-+ }
-+
-+ /**
-+ * Returns the number of values in the list.
-+ *
-+ * @return the number of values in the list.
-+ */
-+ public int size() {
-+ return _pos;
-+ }
-+
-+ /**
-+ * Tests whether this list contains any values.
-+ *
-+ * @return true if the list is empty.
-+ */
-+ public boolean isEmpty() {
-+ return _pos == 0;
-+ }
-+
-+ /**
-+ * Sheds any excess capacity above and beyond the current size of
-+ * the list.
-+ */
-+ public void trimToSize() {
-+ if (_data.length > size()) {
-+ byte[] tmp = new byte[size()];
-+ toNativeArray(tmp, 0, tmp.length);
-+ _data = tmp;
-+ }
-+ }
-+
-+ // modifying
-+
-+ /**
-+ * Adds <tt>val</tt> to the end of the list, growing as needed.
-+ *
-+ * @param val an <code>byte</code> value
-+ */
-+ public void add(byte val) {
-+ ensureCapacity(_pos + 1);
-+ _data[_pos++] = val;
-+ }
-+
-+ /**
-+ * Adds the values in the array <tt>vals</tt> to the end of the
-+ * list, in order.
-+ *
-+ * @param vals an <code>byte[]</code> value
-+ */
-+ public void add(byte[] vals) {
-+ add(vals, 0, vals.length);
-+ }
-+
-+ /**
-+ * Adds a subset of the values in the array <tt>vals</tt> to the
-+ * end of the list, in order.
-+ *
-+ * @param vals an <code>byte[]</code> value
-+ * @param offset the offset at which to start copying
-+ * @param length the number of values to copy.
-+ */
-+ public void add(byte[] vals, int offset, int length) {
-+ ensureCapacity(_pos + length);
-+ System.arraycopy(vals, offset, _data, _pos, length);
-+ _pos += length;
-+ }
-+
-+ /**
-+ * Inserts <tt>value</tt> into the list at <tt>offset</tt>. All
-+ * values including and to the right of <tt>offset</tt> are shifted
-+ * to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param value an <code>byte</code> value
-+ */
-+ public void insert(int offset, byte value) {
-+ if (offset == _pos) {
-+ add(value);
-+ return;
-+ }
-+ ensureCapacity(_pos + 1);
-+ // shift right
-+ System.arraycopy(_data, offset, _data, offset + 1, _pos - offset);
-+ // insert
-+ _data[offset] = value;
-+ _pos++;
-+ }
-+
-+ /**
-+ * Inserts the array of <tt>values</tt> into the list at
-+ * <tt>offset</tt>. All values including and to the right of
-+ * <tt>offset</tt> are shifted to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param values an <code>byte[]</code> value
-+ */
-+ public void insert(int offset, byte[] values) {
-+ insert(offset, values, 0, values.length);
-+ }
-+
-+ /**
-+ * Inserts a slice of the array of <tt>values</tt> into the list
-+ * at <tt>offset</tt>. All values including and to the right of
-+ * <tt>offset</tt> are shifted to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param values an <code>byte[]</code> value
-+ * @param valOffset the offset in the values array at which to
-+ * start copying.
-+ * @param len the number of values to copy from the values array
-+ */
-+ public void insert(int offset, byte[] values, int valOffset, int len) {
-+ if (offset == _pos) {
-+ add(values, valOffset, len);
-+ return;
-+ }
-+
-+ ensureCapacity(_pos + len);
-+ // shift right
-+ System.arraycopy(_data, offset, _data, offset + len, _pos - offset);
-+ // insert
-+ System.arraycopy(values, valOffset, _data, offset, len);
-+ _pos += len;
-+ }
-+
-+ /**
-+ * Returns the value at the specified offset.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return an <code>byte</code> value
-+ */
-+ public byte get(int offset) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ return _data[offset];
-+ }
-+
-+ /**
-+ * Returns the value at the specified offset without doing any
-+ * bounds checking.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return an <code>byte</code> value
-+ */
-+ public byte getQuick(int offset) {
-+ return _data[offset];
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>byte</code> value
-+ */
-+ public void set(int offset, byte val) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ _data[offset] = val;
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset and returns the
-+ * previously stored value.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>byte</code> value
-+ * @return the value previously stored at offset.
-+ */
-+ public byte getSet(int offset, byte val) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ byte old = _data[offset];
-+ _data[offset] = val;
-+ return old;
-+ }
-+
-+ /**
-+ * Replace the values in the list starting at <tt>offset</tt> with
-+ * the contents of the <tt>values</tt> array.
-+ *
-+ * @param offset the first offset to replace
-+ * @param values the source of the new values
-+ */
-+ public void set(int offset, byte[] values) {
-+ set(offset, values, 0, values.length);
-+ }
-+
-+ /**
-+ * Replace the values in the list starting at <tt>offset</tt> with
-+ * <tt>length</tt> values from the <tt>values</tt> array, starting
-+ * at valOffset.
-+ *
-+ * @param offset the first offset to replace
-+ * @param values the source of the new values
-+ * @param valOffset the first value to copy from the values array
-+ * @param length the number of values to copy
-+ */
-+ public void set(int offset, byte[] values, int valOffset, int length) {
-+ if (offset < 0 || offset + length > _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ System.arraycopy(values, valOffset, _data, offset, length);
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset without doing any bounds
-+ * checking.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>byte</code> value
-+ */
-+ public void setQuick(int offset, byte val) {
-+ _data[offset] = val;
-+ }
-+
-+ /**
-+ * Flushes the internal state of the list, resetting the capacity
-+ * to the default.
-+ */
-+ public void clear() {
-+ clear(DEFAULT_CAPACITY);
-+ }
-+
-+ /**
-+ * Flushes the internal state of the list, setting the capacity of
-+ * the empty list to <tt>capacity</tt>.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public void clear(int capacity) {
-+ _data = new byte[capacity];
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Sets the size of the list to 0, but does not change its
-+ * capacity. This method can be used as an alternative to the
-+ * {@link #clear clear} method if you want to recyle a list without
-+ * allocating new backing arrays.
-+ *
-+ * @see #clear
-+ */
-+ public void reset() {
-+ _pos = 0;
-+ fill((byte)0);
-+ }
-+
-+ /**
-+ * Sets the size of the list to 0, but does not change its
-+ * capacity. This method can be used as an alternative to the
-+ * {@link #clear clear} method if you want to recyle a list
-+ * without allocating new backing arrays. This method differs
-+ * from {@link #reset reset} in that it does not clear the old
-+ * values in the backing array. Thus, it is possible for {@link
-+ * #getQuick getQuick} to return stale data if this method is used
-+ * and the caller is careless about bounds checking.
-+ *
-+ * @see #reset
-+ * @see #clear
-+ * @see #getQuick
-+ */
-+ public void resetQuick() {
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Removes the value at <tt>offset</tt> from the list.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return the value previously stored at offset.
-+ */
-+ public byte remove(int offset) {
-+ byte old = get(offset);
-+ remove(offset, 1);
-+ return old;
-+ }
-+
-+ /**
-+ * Removes <tt>length</tt> values from the list, starting at
-+ * <tt>offset</tt>
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param length an <code>int</code> value
-+ */
-+ public void remove(int offset, int length) {
-+ if (offset < 0 || offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+
-+ if (offset == 0) {
-+ // data at the front
-+ System.arraycopy(_data, length, _data, 0, _pos - length);
-+ } else if (_pos - length == offset) {
-+ // no copy to make, decrementing pos "deletes" values at
-+ // the end
-+ } else {
-+ // data in the middle
-+ System.arraycopy(_data, offset + length,
-+ _data, offset, _pos - (offset + length));
-+ }
-+ _pos -= length;
-+ // no need to clear old values beyond _pos, because this is a
-+ // primitive collection and 0 takes as much room as any other
-+ // value
-+ }
-+
-+ /**
-+ * Transform each value in the list using the specified function.
-+ *
-+ * @param function a <code>TByteFunction</code> value
-+ */
-+ public void transformValues(TByteFunction function) {
-+ for (int i = _pos; i-- > 0;) {
-+ _data[i] = function.execute(_data[i]);
-+ }
-+ }
-+
-+ /**
-+ * Reverse the order of the elements in the list.
-+ */
-+ public void reverse() {
-+ reverse(0, _pos);
-+ }
-+
-+ /**
-+ * Reverse the order of the elements in the range of the list.
-+ *
-+ * @param from the inclusive index at which to start reversing
-+ * @param to the exclusive index at which to stop reversing
-+ */
-+ public void reverse(int from, int to) {
-+ if (from == to) {
-+ return; // nothing to do
-+ }
-+ if (from > to) {
-+ throw new IllegalArgumentException("from cannot be greater than to");
-+ }
-+ for (int i = from, j = to - 1; i < j; i++, j--) {
-+ swap(i, j);
-+ }
-+ }
-+
-+ /**
-+ * Shuffle the elements of the list using the specified random
-+ * number generator.
-+ *
-+ * @param rand a <code>Random</code> value
-+ */
-+ public void shuffle(Random rand) {
-+ for (int i = _pos; i-- > 1;) {
-+ swap(i, rand.nextInt(i));
-+ }
-+ }
-+
-+ /**
-+ * Swap the values at offsets <tt>i</tt> and <tt>j</tt>.
-+ *
-+ * @param i an offset into the data array
-+ * @param j an offset into the data array
-+ */
-+ private final void swap(int i, int j) {
-+ byte tmp = _data[i];
-+ _data[i] = _data[j];
-+ _data[j] = tmp;
-+ }
-+
-+ // copying
-+
-+ /**
-+ * Returns a clone of this list. Since this is a primitive
-+ * collection, this will be a deep clone.
-+ *
-+ * @return a deep clone of the list.
-+ */
-+ public Object clone() {
-+ TByteArrayList list = null;
-+ try {
-+ list = (TByteArrayList) super.clone();
-+ list._data = toNativeArray();
-+ } catch (CloneNotSupportedException e) {
-+ // it's supported
-+ } // end of try-catch
-+ return list;
-+ }
-+
-+ /**
-+ * Copies the contents of the list into a native array.
-+ *
-+ * @return an <code>byte[]</code> value
-+ */
-+ public byte[] toNativeArray() {
-+ return toNativeArray(0, _pos);
-+ }
-+
-+ /**
-+ * Copies a slice of the list into a native array.
-+ *
-+ * @param offset the offset at which to start copying
-+ * @param len the number of values to copy.
-+ * @return an <code>byte[]</code> value
-+ */
-+ public byte[] toNativeArray(int offset, int len) {
-+ byte[] rv = new byte[len];
-+ toNativeArray(rv, offset, len);
-+ return rv;
-+ }
-+
-+ /**
-+ * Copies a slice of the list into a native array.
-+ *
-+ * @param dest the array to copy into.
-+ * @param offset the offset of the first value to copy
-+ * @param len the number of values to copy.
-+ */
-+ public void toNativeArray(byte[] dest, int offset, int len) {
-+ if (len == 0) {
-+ return; // nothing to copy
-+ }
-+ if (offset < 0 || offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ System.arraycopy(_data, offset, dest, 0, len);
-+ }
-+
-+ // comparing
-+
-+ /**
-+ * Compares this list to another list, value by value.
-+ *
-+ * @param other the object to compare against
-+ * @return true if other is a TByteArrayList and has exactly the
-+ * same values.
-+ */
-+ public boolean equals(Object other) {
-+ if (other == this) {
-+ return true;
-+ } else if (other instanceof TByteArrayList) {
-+ TByteArrayList that = (TByteArrayList)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ } else {
-+ for (int i = _pos; i-- > 0;) {
-+ if (this._data[i] != that._data[i]) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public int hashCode() {
-+ int h = 0;
-+ for (int i = _pos; i-- > 0;) {
-+ h += HashFunctions.hash(_data[i]);
-+ }
-+ return h;
-+ }
-+
-+ // procedures
-+
-+ /**
-+ * Applies the procedure to each value in the list in ascending
-+ * (front to back) order.
-+ *
-+ * @param procedure a <code>TByteProcedure</code> value
-+ * @return true if the procedure did not terminate prematurely.
-+ */
-+ public boolean forEach(TByteProcedure procedure) {
-+ for (int i = 0; i < _pos; i++) {
-+ if (! procedure.execute(_data[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Applies the procedure to each value in the list in descending
-+ * (back to front) order.
-+ *
-+ * @param procedure a <code>TByteProcedure</code> value
-+ * @return true if the procedure did not terminate prematurely.
-+ */
-+ public boolean forEachDescending(TByteProcedure procedure) {
-+ for (int i = _pos; i-- > 0;) {
-+ if (! procedure.execute(_data[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ // sorting
-+
-+ /**
-+ * Sort the values in the list (ascending) using the Sun quicksort
-+ * implementation.
-+ *
-+ * @see java.util.Arrays#sort
-+ */
-+ public void sort() {
-+ Arrays.sort(_data, 0, _pos);
-+ }
-+
-+ /**
-+ * Sort a slice of the list (ascending) using the Sun quicksort
-+ * implementation.
-+ *
-+ * @param fromIndex the index at which to start sorting (inclusive)
-+ * @param toIndex the index at which to stop sorting (exclusive)
-+ * @see java.util.Arrays#sort
-+ */
-+ public void sort(int fromIndex, int toIndex) {
-+ Arrays.sort(_data, fromIndex, toIndex);
-+ }
-+
-+ // filling
-+
-+ /**
-+ * Fills every slot in the list with the specified value.
-+ *
-+ * @param val the value to use when filling
-+ */
-+ public void fill(byte val) {
-+ Arrays.fill(_data, 0, _pos, val);
-+ }
-+
-+ /**
-+ * Fills a range in the list with the specified value.
-+ *
-+ * @param fromIndex the offset at which to start filling (inclusive)
-+ * @param toIndex the offset at which to stop filling (exclusive)
-+ * @param val the value to use when filling
-+ */
-+ public void fill(int fromIndex, int toIndex, byte val) {
-+ if (toIndex > _pos) {
-+ ensureCapacity(toIndex);
-+ _pos = toIndex;
-+ }
-+ Arrays.fill(_data, fromIndex, toIndex, val);
-+ }
-+
-+ // searching
-+
-+ /**
-+ * Performs a binary search for <tt>value</tt> in the entire list.
-+ * Note that you <b>must</b> @{link #sort sort} the list before
-+ * doing a search.
-+ *
-+ * @param value the value to search for
-+ * @return the absolute offset in the list of the value, or its
-+ * negative insertion point into the sorted list.
-+ */
-+ public int binarySearch(byte value) {
-+ return binarySearch(value, 0, _pos);
-+ }
-+
-+ /**
-+ * Performs a binary search for <tt>value</tt> in the specified
-+ * range. Note that you <b>must</b> @{link #sort sort} the list
-+ * or the range before doing a search.
-+ *
-+ * @param value the value to search for
-+ * @param fromIndex the lower boundary of the range (inclusive)
-+ * @param toIndex the upper boundary of the range (exclusive)
-+ * @return the absolute offset in the list of the value, or its
-+ * negative insertion point into the sorted list.
-+ */
-+ public int binarySearch(byte value, int fromIndex, int toIndex) {
-+ if (fromIndex < 0) {
-+ throw new ArrayIndexOutOfBoundsException(fromIndex);
-+ }
-+ if (toIndex > _pos) {
-+ throw new ArrayIndexOutOfBoundsException(toIndex);
-+ }
-+
-+ int low = fromIndex;
-+ int high = toIndex - 1;
-+
-+ while (low <= high) {
-+ int mid = (low + high) >> 1;
-+ byte midVal = _data[mid];
-+
-+ if (midVal < value) {
-+ low = mid + 1;
-+ } else if (midVal > value) {
-+ high = mid - 1;
-+ } else {
-+ return mid; // value found
-+ }
-+ }
-+ return -(low + 1); // value not found.
-+ }
-+
-+ /**
-+ * Searches the list front to back for the index of
-+ * <tt>value</tt>.
-+ *
-+ * @param value an <code>byte</code> value
-+ * @return the first offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int indexOf(byte value) {
-+ return indexOf(0, value);
-+ }
-+
-+ /**
-+ * Searches the list front to back for the index of
-+ * <tt>value</tt>, starting at <tt>offset</tt>.
-+ *
-+ * @param offset the offset at which to start the linear search
-+ * (inclusive)
-+ * @param value an <code>byte</code> value
-+ * @return the first offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int indexOf(int offset, byte value) {
-+ for (int i = offset; i < _pos; i++) {
-+ if (_data[i] == value) {
-+ return i;
-+ }
-+ }
-+ return -1;
-+ }
-+
-+ /**
-+ * Searches the list back to front for the last index of
-+ * <tt>value</tt>.
-+ *
-+ * @param value an <code>byte</code> value
-+ * @return the last offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int lastIndexOf(byte value) {
-+ return lastIndexOf(_pos, value);
-+ }
-+
-+ /**
-+ * Searches the list back to front for the last index of
-+ * <tt>value</tt>, starting at <tt>offset</tt>.
-+ *
-+ * @param offset the offset at which to start the linear search
-+ * (exclusive)
-+ * @param value an <code>byte</code> value
-+ * @return the last offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int lastIndexOf(int offset, byte value) {
-+ for (int i = offset; i-- > 0;) {
-+ if (_data[i] == value) {
-+ return i;
-+ }
-+ }
-+ return -1;
-+ }
-+
-+ /**
-+ * Searches the list for <tt>value</tt>
-+ *
-+ * @param value an <code>byte</code> value
-+ * @return true if value is in the list.
-+ */
-+ public boolean contains(byte value) {
-+ return lastIndexOf(value) >= 0;
-+ }
-+
-+ /**
-+ * Searches the list for values satisfying <tt>condition</tt> in
-+ * the manner of the *nix <tt>grep</tt> utility.
-+ *
-+ * @param condition a condition to apply to each element in the list
-+ * @return a list of values which match the condition.
-+ */
-+ public TByteArrayList grep(TByteProcedure condition) {
-+ TByteArrayList list = new TByteArrayList();
-+ for (int i = 0; i < _pos; i++) {
-+ if (condition.execute(_data[i])) {
-+ list.add(_data[i]);
-+ }
-+ }
-+ return list;
-+ }
-+
-+ /**
-+ * Searches the list for values which do <b>not</b> satisfy
-+ * <tt>condition</tt>. This is akin to *nix <code>grep -v</code>.
-+ *
-+ * @param condition a condition to apply to each element in the list
-+ * @return a list of values which do not match the condition.
-+ */
-+ public TByteArrayList inverseGrep(TByteProcedure condition) {
-+ TByteArrayList list = new TByteArrayList();
-+ for (int i = 0; i < _pos; i++) {
-+ if (! condition.execute(_data[i])) {
-+ list.add(_data[i]);
-+ }
-+ }
-+ return list;
-+ }
-+
-+ /**
-+ * Finds the maximum value in the list.
-+ *
-+ * @return the largest value in the list.
-+ * @exception IllegalStateException if the list is empty
-+ */
-+ public byte max() {
-+ if (size() == 0) {
-+ throw new IllegalStateException("cannot find maximum of an empty list");
-+ }
-+ byte max = _data[_pos - 1];
-+ for (int i = _pos - 1; i-- > 0;) {
-+ if ( _data[_pos] > max ) {
-+ max = _data[_pos];
-+ }
-+ }
-+ return max;
-+ }
-+
-+ /**
-+ * Finds the minimum value in the list.
-+ *
-+ * @return the smallest value in the list.
-+ * @exception IllegalStateException if the list is empty
-+ */
-+ public byte min() {
-+ if (size() == 0) {
-+ throw new IllegalStateException("cannot find minimum of an empty list");
-+ }
-+ byte min = _data[_pos - 1];
-+ for (int i = _pos - 1; i-- > 0;) {
-+ if ( _data[_pos] > min ) {
-+ min = _data[_pos];
-+ }
-+ }
-+ return min;
-+ }
-+
-+ // stringification
-+
-+ /**
-+ * Returns a String representation of the list, front to back.
-+ *
-+ * @return a <code>String</code> value
-+ */
-+ public String toString() {
-+ final StringBuffer buf = new StringBuffer("{");
-+ for (int i = 0, end = _pos - 1; i < end; i++) {
-+ buf.append(_data[i]);
-+ buf.append(", ");
-+ }
-+ if (size() > 0) {
-+ buf.append(_data[_pos - 1]);
-+ }
-+ buf.append("}");
-+ return buf.toString();
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // POSITION
-+ out.writeInt( _pos );
-+
-+ // ENTRIES
-+ int len = _data.length;
-+ out.writeInt( len );
-+ for( int i = 0; i < len; i++ ) {
-+ out.writeByte( _data[ i ] );
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // POSITION
-+ _pos = in.readInt();
-+
-+ // ENTRIES
-+ int len = in.readInt();
-+ _data = new byte[ len ];
-+ for( int i = 0; i < len; i++ ) {
-+ _data[ i ] = in.readByte();
-+ }
-+ }
-+} // TByteArrayList
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteByteHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for byte keys and byte values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TByteByteHashMap extends TByteHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient byte[] _values;
-+
-+ /**
-+ * Creates a new <code>TByteByteHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TByteByteHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteByteHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TByteByteHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteByteHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TByteByteHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteByteHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteByteHashMap(TByteHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteByteHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteByteHashMap(int initialCapacity, TByteHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteByteHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteByteHashMap(int initialCapacity, float loadFactor, TByteHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TByteByteHashMap m = (TByteByteHashMap)super.clone();
-+ m._values = (byte[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TByteByteIterator with access to this map's keys and values
-+ */
-+ public TByteByteIterator iterator() {
-+ return new TByteByteIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new byte[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @param value an <code>byte</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (byte)0 if none was found.
-+ */
-+ public byte put(byte key, byte value) {
-+ byte previousState;
-+ byte previous = (byte)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ byte oldKeys[] = _set;
-+ byte oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new byte[newCapacity];
-+ _values = new byte[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ byte o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return the value of <tt>key</tt> or (byte)0 if no such mapping exists.
-+ */
-+ public byte get(byte key) {
-+ int index = index(key);
-+ return index < 0 ? (byte)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ byte[] keys = _set;
-+ byte[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (byte)0;
-+ vals[i] = (byte)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return an <code>byte</code> value, or (byte)0 if no mapping for key exists
-+ */
-+ public byte remove(byte key) {
-+ byte prev = (byte)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TByteByteHashMap)) {
-+ return false;
-+ }
-+ TByteByteHashMap that = (TByteByteHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TByteByteProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(byte key, byte value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TByteByteProcedure {
-+ private final TByteByteHashMap _otherMap;
-+
-+ EqProcedure(TByteByteHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(byte key, byte value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two bytes for equality.
-+ */
-+ private final boolean eq(byte v1, byte v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (byte)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public byte[] getValues() {
-+ byte[] vals = new byte[size()];
-+ byte[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public byte[] keys() {
-+ byte[] keys = new byte[size()];
-+ byte[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>byte</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(byte val) {
-+ byte[] states = _states;
-+ byte[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(byte key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TByteProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TByteProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TByteProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TByteProcedure procedure) {
-+ byte[] states = _states;
-+ byte[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOByteByteProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TByteByteProcedure procedure) {
-+ byte[] states = _states;
-+ byte[] keys = _set;
-+ byte[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TByteByteProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ byte[] keys = _set;
-+ byte[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TByteFunction</code> value
-+ */
-+ public void transformValues(TByteFunction function) {
-+ byte[] states = _states;
-+ byte[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(byte key) {
-+ return adjustValue(key, (byte)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(byte key, byte amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ byte key = in.readByte();
-+ byte val = in.readByte();
-+ put(key, val);
-+ }
-+ }
-+} // TByteByteHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteByteIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type byte and byte.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TByteByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TByteByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TByteByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TByteByteIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TByteByteIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TByteByteHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TByteByteIterator(TByteByteHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public byte key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public byte value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public byte setValue(byte val) {
-+ byte old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TByteByteIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteByteProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type byte and byte.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TByteByteProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>byte</code> value
-+ * @param b a <code>byte</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(byte a, byte b);
-+}// TByteByteProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteDoubleHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for byte keys and double values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TByteDoubleHashMap extends TByteHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient double[] _values;
-+
-+ /**
-+ * Creates a new <code>TByteDoubleHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TByteDoubleHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteDoubleHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TByteDoubleHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteDoubleHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TByteDoubleHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteDoubleHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteDoubleHashMap(TByteHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteDoubleHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteDoubleHashMap(int initialCapacity, TByteHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteDoubleHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteDoubleHashMap(int initialCapacity, float loadFactor, TByteHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TByteDoubleHashMap m = (TByteDoubleHashMap)super.clone();
-+ m._values = (double[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TByteDoubleIterator with access to this map's keys and values
-+ */
-+ public TByteDoubleIterator iterator() {
-+ return new TByteDoubleIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new double[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @param value an <code>double</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (byte)0 if none was found.
-+ */
-+ public double put(byte key, double value) {
-+ byte previousState;
-+ double previous = (double)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ byte oldKeys[] = _set;
-+ double oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new byte[newCapacity];
-+ _values = new double[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ byte o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return the value of <tt>key</tt> or (byte)0 if no such mapping exists.
-+ */
-+ public double get(byte key) {
-+ int index = index(key);
-+ return index < 0 ? (double)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ byte[] keys = _set;
-+ double[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (byte)0;
-+ vals[i] = (double)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return an <code>double</code> value, or (byte)0 if no mapping for key exists
-+ */
-+ public double remove(byte key) {
-+ double prev = (double)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TByteDoubleHashMap)) {
-+ return false;
-+ }
-+ TByteDoubleHashMap that = (TByteDoubleHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TByteDoubleProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(byte key, double value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TByteDoubleProcedure {
-+ private final TByteDoubleHashMap _otherMap;
-+
-+ EqProcedure(TByteDoubleHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(byte key, double value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two doubles for equality.
-+ */
-+ private final boolean eq(double v1, double v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (double)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public double[] getValues() {
-+ double[] vals = new double[size()];
-+ double[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public byte[] keys() {
-+ byte[] keys = new byte[size()];
-+ byte[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>double</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(double val) {
-+ byte[] states = _states;
-+ double[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(byte key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TByteProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TByteProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TDoubleProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TDoubleProcedure procedure) {
-+ byte[] states = _states;
-+ double[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOByteDoubleProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TByteDoubleProcedure procedure) {
-+ byte[] states = _states;
-+ byte[] keys = _set;
-+ double[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TByteDoubleProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ byte[] keys = _set;
-+ double[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TDoubleFunction</code> value
-+ */
-+ public void transformValues(TDoubleFunction function) {
-+ byte[] states = _states;
-+ double[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(byte key) {
-+ return adjustValue(key, (double)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(byte key, double amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ byte key = in.readByte();
-+ double val = in.readDouble();
-+ put(key, val);
-+ }
-+ }
-+} // TByteDoubleHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteDoubleIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type byte and double.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TByteDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TByteDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TByteDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TByteDoubleIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TByteDoubleIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TByteDoubleHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TByteDoubleIterator(TByteDoubleHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public byte key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public double value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public double setValue(double val) {
-+ double old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TByteDoubleIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteDoubleProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type byte and double.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TByteDoubleProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>byte</code> value
-+ * @param b a <code>double</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(byte a, double b);
-+}// TByteDoubleProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteFloatHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for byte keys and float values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TByteFloatHashMap extends TByteHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient float[] _values;
-+
-+ /**
-+ * Creates a new <code>TByteFloatHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TByteFloatHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteFloatHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TByteFloatHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteFloatHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TByteFloatHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteFloatHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteFloatHashMap(TByteHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteFloatHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteFloatHashMap(int initialCapacity, TByteHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteFloatHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteFloatHashMap(int initialCapacity, float loadFactor, TByteHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TByteFloatHashMap m = (TByteFloatHashMap)super.clone();
-+ m._values = (float[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TByteFloatIterator with access to this map's keys and values
-+ */
-+ public TByteFloatIterator iterator() {
-+ return new TByteFloatIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new float[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @param value an <code>float</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (byte)0 if none was found.
-+ */
-+ public float put(byte key, float value) {
-+ byte previousState;
-+ float previous = (float)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ byte oldKeys[] = _set;
-+ float oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new byte[newCapacity];
-+ _values = new float[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ byte o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return the value of <tt>key</tt> or (byte)0 if no such mapping exists.
-+ */
-+ public float get(byte key) {
-+ int index = index(key);
-+ return index < 0 ? (float)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ byte[] keys = _set;
-+ float[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (byte)0;
-+ vals[i] = (float)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return an <code>float</code> value, or (byte)0 if no mapping for key exists
-+ */
-+ public float remove(byte key) {
-+ float prev = (float)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TByteFloatHashMap)) {
-+ return false;
-+ }
-+ TByteFloatHashMap that = (TByteFloatHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TByteFloatProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(byte key, float value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TByteFloatProcedure {
-+ private final TByteFloatHashMap _otherMap;
-+
-+ EqProcedure(TByteFloatHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(byte key, float value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two floats for equality.
-+ */
-+ private final boolean eq(float v1, float v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (float)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public float[] getValues() {
-+ float[] vals = new float[size()];
-+ float[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public byte[] keys() {
-+ byte[] keys = new byte[size()];
-+ byte[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>float</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(float val) {
-+ byte[] states = _states;
-+ float[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(byte key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TByteProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TByteProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TFloatProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TFloatProcedure procedure) {
-+ byte[] states = _states;
-+ float[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOByteFloatProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TByteFloatProcedure procedure) {
-+ byte[] states = _states;
-+ byte[] keys = _set;
-+ float[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TByteFloatProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ byte[] keys = _set;
-+ float[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TFloatFunction</code> value
-+ */
-+ public void transformValues(TFloatFunction function) {
-+ byte[] states = _states;
-+ float[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(byte key) {
-+ return adjustValue(key, (float)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(byte key, float amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ byte key = in.readByte();
-+ float val = in.readFloat();
-+ put(key, val);
-+ }
-+ }
-+} // TByteFloatHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteFloatIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type byte and float.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TByteFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TByteFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TByteFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TByteFloatIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TByteFloatIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TByteFloatHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TByteFloatIterator(TByteFloatHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public byte key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public float value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public float setValue(float val) {
-+ float old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TByteFloatIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteFloatProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type byte and float.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TByteFloatProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>byte</code> value
-+ * @param b a <code>float</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(byte a, float b);
-+}// TByteFloatProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteFunction.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,43 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for functions that accept and return one byte primitive.
-+ *
-+ * Created: Mon Nov 5 22:19:36 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PFunction.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TByteFunction {
-+ /**
-+ * Execute this function with <tt>value</tt>
-+ *
-+ * @param value a <code>byte</code> input
-+ * @return a <code>byte</code> result
-+ */
-+ public byte execute(byte value);
-+}// TByteFunction
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteHash.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,289 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed hashing implementation for byte primitives.
-+ *
-+ * Created: Sun Nov 4 08:56:06 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PHash.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+abstract public class TByteHash extends TPrimitiveHash implements TByteHashingStrategy {
-+
-+ /** the set of bytes */
-+ protected transient byte[] _set;
-+
-+ /** strategy used to hash values in this collection */
-+ protected TByteHashingStrategy _hashingStrategy;
-+
-+ /**
-+ * Creates a new <code>TByteHash</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TByteHash() {
-+ super();
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TByteHash(int initialCapacity) {
-+ super(initialCapacity);
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ */
-+ public TByteHash(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteHash</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteHash(TByteHashingStrategy strategy) {
-+ super();
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteHash(int initialCapacity, TByteHashingStrategy strategy) {
-+ super(initialCapacity);
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteHash(int initialCapacity, float loadFactor, TByteHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor);
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TByteHash h = (TByteHash)super.clone();
-+ h._set = (byte[])this._set.clone();
-+ return h;
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _set = new byte[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Searches the set for <tt>val</tt>
-+ *
-+ * @param val an <code>byte</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean contains(byte val) {
-+ return index(val) >= 0;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each element in the set.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the set terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEach(TByteProcedure procedure) {
-+ byte[] states = _states;
-+ byte[] set = _set;
-+ for (int i = set.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(set[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Releases the element currently stored at <tt>index</tt>.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _set[index] = (byte)0;
-+ super.removeAt(index);
-+ }
-+
-+ /**
-+ * Locates the index of <tt>val</tt>.
-+ *
-+ * @param val an <code>byte</code> value
-+ * @return the index of <tt>val</tt> or -1 if it isn't in the set.
-+ */
-+ protected int index(byte val) {
-+ int hash, probe, index, length;
-+ byte[] set;
-+ byte[] states;
-+
-+ states = _states;
-+ set = _set;
-+ length = states.length;
-+ hash = _hashingStrategy.computeHashCode(val) & 0x7fffffff;
-+ index = hash % length;
-+
-+ if (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val)) {
-+ // see Knuth, p. 529
-+ probe = 1 + (hash % (length - 2));
-+
-+ do {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ } while (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val));
-+ }
-+
-+ return states[index] == FREE ? -1 : index;
-+ }
-+
-+ /**
-+ * Locates the index at which <tt>val</tt> can be inserted. if
-+ * there is already a value equal()ing <tt>val</tt> in the set,
-+ * returns that value as a negative integer.
-+ *
-+ * @param val an <code>byte</code> value
-+ * @return an <code>int</code> value
-+ */
-+ protected int insertionIndex(byte val) {
-+ int hash, probe, index, length;
-+ byte[] set;
-+ byte[] states;
-+
-+ states = _states;
-+ set = _set;
-+ length = states.length;
-+ hash = _hashingStrategy.computeHashCode(val) & 0x7fffffff;
-+ index = hash % length;
-+
-+ if (states[index] == FREE) {
-+ return index; // empty, all done
-+ } else if (states[index] == FULL && set[index] == val) {
-+ return -index -1; // already stored
-+ } else { // already FULL or REMOVED, must probe
-+ // compute the double hash
-+ probe = 1 + (hash % (length - 2));
-+
-+ // if the slot we landed on is FULL (but not removed), probe
-+ // until we find an empty slot, a REMOVED slot, or an element
-+ // equal to the one we are trying to insert.
-+ // finding an empty slot means that the value is not present
-+ // and that we should use that slot as the insertion point;
-+ // finding a REMOVED slot means that we need to keep searching,
-+ // however we want to remember the offset of that REMOVED slot
-+ // so we can reuse it in case a "new" insertion (i.e. not an update)
-+ // is possible.
-+ // finding a matching value means that we've found that our desired
-+ // key is already in the table
-+
-+ if (states[index] != REMOVED) {
-+ // starting at the natural offset, probe until we find an
-+ // offset that isn't full.
-+ do {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ } while (states[index] == FULL && set[index] != val);
-+ }
-+
-+ // if the index we found was removed: continue probing until we
-+ // locate a free location or an element which equal()s the
-+ // one we have.
-+ if (states[index] == REMOVED) {
-+ int firstRemoved = index;
-+ while (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val)) {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ }
-+ return states[index] == FULL ? -index -1 : firstRemoved;
-+ }
-+ // if it's full, the key is already stored
-+ return states[index] == FULL ? -index -1 : index;
-+ }
-+ }
-+
-+ /**
-+ * Default implementation of TByteHashingStrategy:
-+ * delegates hashing to HashFunctions.hash(byte).
-+ *
-+ * @param val the value to hash
-+ * @return the hashcode.
-+ */
-+ public final int computeHashCode(byte val) {
-+ return HashFunctions.hash(val);
-+ }
-+} // TByteHash
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteHashingStrategy.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,49 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.Serializable;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface to support pluggable hashing strategies in maps and sets.
-+ * Implementors can use this interface to make the trove hashing
-+ * algorithms use an optimal strategy when computing hashcodes.
-+ *
-+ * Created: Sun Nov 4 08:56:06 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PHashingStrategy.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TByteHashingStrategy extends Serializable {
-+ /**
-+ * Computes a hash code for the specified byte. Implementors
-+ * can use the byte's own value or a custom scheme designed to
-+ * minimize collisions for a known set of input.
-+ *
-+ * @param val byte for which the hashcode is to be computed
-+ * @return the hashCode
-+ */
-+ public int computeHashCode(byte val);
-+} // TByteHashingStrategy
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteHashSet.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,371 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+import java.util.Arrays;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed set implementation for byte primitives.
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+
-+public class TByteHashSet extends TByteHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /**
-+ * Creates a new <code>TByteHashSet</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TByteHashSet() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteHashSet</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TByteHashSet(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteHashSet</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TByteHashSet(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteHashSet</code> instance containing the
-+ * elements of <tt>array</tt>.
-+ *
-+ * @param array an array of <code>byte</code> primitives
-+ */
-+ public TByteHashSet(byte[] array) {
-+ this(array.length);
-+ addAll(array);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteHash</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteHashSet(TByteHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteHashSet(int initialCapacity, TByteHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteHashSet(int initialCapacity, float loadFactor, TByteHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteHashSet</code> instance containing the
-+ * elements of <tt>array</tt>.
-+ *
-+ * @param array an array of <code>byte</code> primitives
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteHashSet(byte[] array, TByteHashingStrategy strategy) {
-+ this(array.length, strategy);
-+ addAll(array);
-+ }
-+
-+ /**
-+ * @return a TByteIterator with access to the values in this set
-+ */
-+ public TByteIterator iterator() {
-+ return new TByteIterator(this);
-+ }
-+
-+ /**
-+ * Inserts a value into the set.
-+ *
-+ * @param val an <code>byte</code> value
-+ * @return true if the set was modified by the add operation
-+ */
-+ public boolean add(byte val) {
-+ int index = insertionIndex(val);
-+
-+ if (index < 0) {
-+ return false; // already present in set, nothing to add
-+ }
-+
-+ byte previousState = _states[index];
-+ _set[index] = val;
-+ _states[index] = FULL;
-+ postInsertHook(previousState == FREE);
-+
-+ return true; // yes, we added something
-+ }
-+
-+ /**
-+ * Expands the set to accomodate new values.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ byte oldSet[] = _set;
-+ byte oldStates[] = _states;
-+
-+ _set = new byte[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ byte o = oldSet[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Returns a new array containing the values in the set.
-+ *
-+ * @return an <code>byte[]</code> value
-+ */
-+ public byte[] toArray() {
-+ byte[] result = new byte[size()];
-+ byte[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = states.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ result[j++] = set[i];
-+ }
-+ }
-+ return result;
-+ }
-+
-+ /**
-+ * Empties the set.
-+ */
-+ public void clear() {
-+ super.clear();
-+ byte[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = set.length; i-- > 0;) {
-+ set[i] = (byte)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Compares this set with another set for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TByteHashSet)) {
-+ return false;
-+ }
-+ final TByteHashSet that = (TByteHashSet)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEach(new TByteProcedure() {
-+ public final boolean execute(byte value) {
-+ return that.contains(value);
-+ }
-+ });
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEach(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TByteProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(byte key) {
-+ h += _hashingStrategy.computeHashCode(key);
-+ return true;
-+ }
-+ }
-+
-+ /**
-+ * Removes <tt>val</tt> from the set.
-+ *
-+ * @param val an <code>byte</code> value
-+ * @return true if the set was modified by the remove operation.
-+ */
-+ public boolean remove(byte val) {
-+ int index = index(val);
-+ if (index >= 0) {
-+ removeAt(index);
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Tests the set to determine if all of the elements in
-+ * <tt>array</tt> are present.
-+ *
-+ * @param array an <code>array</code> of byte primitives.
-+ * @return true if all elements were present in the set.
-+ */
-+ public boolean containsAll(byte[] array) {
-+ for (int i = array.length; i-- > 0;) {
-+ if (! contains(array[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Adds all of the elements in <tt>array</tt> to the set.
-+ *
-+ * @param array an <code>array</code> of byte primitives.
-+ * @return true if the set was modified by the add all operation.
-+ */
-+ public boolean addAll(byte[] array) {
-+ boolean changed = false;
-+ for (int i = array.length; i-- > 0;) {
-+ if (add(array[i])) {
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+ /**
-+ * Removes all of the elements in <tt>array</tt> from the set.
-+ *
-+ * @param array an <code>array</code> of byte primitives.
-+ * @return true if the set was modified by the remove all operation.
-+ */
-+ public boolean removeAll(byte[] array) {
-+ boolean changed = false;
-+ for (int i = array.length; i-- > 0;) {
-+ if (remove(array[i])) {
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+ /**
-+ * Removes any values in the set which are not contained in
-+ * <tt>array</tt>.
-+ *
-+ * @param array an <code>array</code> of byte primitives.
-+ * @return true if the set was modified by the retain all operation
-+ */
-+ public boolean retainAll(byte[] array) {
-+ boolean changed = false;
-+ Arrays.sort(array);
-+ byte[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = set.length; i-- > 0;) {
-+ if (states[i] == FULL && (Arrays.binarySearch(array,set[i]) < 0)) {
-+ remove(set[i]);
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure(out);
-+ if (! forEach(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+
-+ // ENTRIES
-+ setUp(size);
-+ while (size-- > 0) {
-+ byte val = in.readByte();
-+ add(val);
-+ }
-+ }
-+} // TByteHashSet
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteIntHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for byte keys and int values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TByteIntHashMap extends TByteHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient int[] _values;
-+
-+ /**
-+ * Creates a new <code>TByteIntHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TByteIntHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteIntHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TByteIntHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteIntHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TByteIntHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteIntHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteIntHashMap(TByteHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteIntHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteIntHashMap(int initialCapacity, TByteHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteIntHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteIntHashMap(int initialCapacity, float loadFactor, TByteHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TByteIntHashMap m = (TByteIntHashMap)super.clone();
-+ m._values = (int[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TByteIntIterator with access to this map's keys and values
-+ */
-+ public TByteIntIterator iterator() {
-+ return new TByteIntIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new int[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @param value an <code>int</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (byte)0 if none was found.
-+ */
-+ public int put(byte key, int value) {
-+ byte previousState;
-+ int previous = (int)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ byte oldKeys[] = _set;
-+ int oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new byte[newCapacity];
-+ _values = new int[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ byte o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return the value of <tt>key</tt> or (byte)0 if no such mapping exists.
-+ */
-+ public int get(byte key) {
-+ int index = index(key);
-+ return index < 0 ? (int)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ byte[] keys = _set;
-+ int[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (byte)0;
-+ vals[i] = (int)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return an <code>int</code> value, or (byte)0 if no mapping for key exists
-+ */
-+ public int remove(byte key) {
-+ int prev = (int)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TByteIntHashMap)) {
-+ return false;
-+ }
-+ TByteIntHashMap that = (TByteIntHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TByteIntProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(byte key, int value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TByteIntProcedure {
-+ private final TByteIntHashMap _otherMap;
-+
-+ EqProcedure(TByteIntHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(byte key, int value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two ints for equality.
-+ */
-+ private final boolean eq(int v1, int v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (int)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public int[] getValues() {
-+ int[] vals = new int[size()];
-+ int[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public byte[] keys() {
-+ byte[] keys = new byte[size()];
-+ byte[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>int</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(int val) {
-+ byte[] states = _states;
-+ int[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(byte key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TByteProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TByteProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TIntProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TIntProcedure procedure) {
-+ byte[] states = _states;
-+ int[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOByteIntProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TByteIntProcedure procedure) {
-+ byte[] states = _states;
-+ byte[] keys = _set;
-+ int[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TByteIntProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ byte[] keys = _set;
-+ int[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TIntFunction</code> value
-+ */
-+ public void transformValues(TIntFunction function) {
-+ byte[] states = _states;
-+ int[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(byte key) {
-+ return adjustValue(key, (int)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(byte key, int amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ byte key = in.readByte();
-+ int val = in.readInt();
-+ put(key, val);
-+ }
-+ }
-+} // TByteIntHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteIntIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type byte and int.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TByteIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TByteIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TByteIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TByteIntIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TByteIntIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TByteIntHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TByteIntIterator(TByteIntHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public byte key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public int value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public int setValue(int val) {
-+ int old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TByteIntIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteIntProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type byte and int.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TByteIntProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>byte</code> value
-+ * @param b a <code>int</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(byte a, int b);
-+}// TByteIntProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,56 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for byte collections.
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TByteIterator extends TPrimitiveIterator {
-+ /** the collection on which the iterator operates */
-+ private final TByteHash _hash;
-+
-+ /**
-+ * Creates a TByteIterator for the elements in the specified collection.
-+ */
-+ public TByteIterator(TByteHash hash) {
-+ super(hash);
-+ this._hash = hash;
-+ }
-+
-+ /**
-+ * Advances the iterator to the next element in the underlying collection
-+ * and returns it.
-+ *
-+ * @return the next byte in the collection
-+ * @exception NoSuchElementException if the iterator is already exhausted
-+ */
-+ public byte next() {
-+ moveToNextIndex();
-+ return _hash._set[_index];
-+ }
-+}// TByteIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteLongHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for byte keys and long values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TByteLongHashMap extends TByteHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient long[] _values;
-+
-+ /**
-+ * Creates a new <code>TByteLongHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TByteLongHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteLongHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TByteLongHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteLongHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TByteLongHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteLongHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteLongHashMap(TByteHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteLongHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteLongHashMap(int initialCapacity, TByteHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteLongHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteLongHashMap(int initialCapacity, float loadFactor, TByteHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TByteLongHashMap m = (TByteLongHashMap)super.clone();
-+ m._values = (long[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TByteLongIterator with access to this map's keys and values
-+ */
-+ public TByteLongIterator iterator() {
-+ return new TByteLongIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new long[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @param value an <code>long</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (byte)0 if none was found.
-+ */
-+ public long put(byte key, long value) {
-+ byte previousState;
-+ long previous = (long)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ byte oldKeys[] = _set;
-+ long oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new byte[newCapacity];
-+ _values = new long[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ byte o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return the value of <tt>key</tt> or (byte)0 if no such mapping exists.
-+ */
-+ public long get(byte key) {
-+ int index = index(key);
-+ return index < 0 ? (long)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ byte[] keys = _set;
-+ long[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (byte)0;
-+ vals[i] = (long)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return an <code>long</code> value, or (byte)0 if no mapping for key exists
-+ */
-+ public long remove(byte key) {
-+ long prev = (long)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TByteLongHashMap)) {
-+ return false;
-+ }
-+ TByteLongHashMap that = (TByteLongHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TByteLongProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(byte key, long value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TByteLongProcedure {
-+ private final TByteLongHashMap _otherMap;
-+
-+ EqProcedure(TByteLongHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(byte key, long value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two longs for equality.
-+ */
-+ private final boolean eq(long v1, long v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (long)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public long[] getValues() {
-+ long[] vals = new long[size()];
-+ long[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public byte[] keys() {
-+ byte[] keys = new byte[size()];
-+ byte[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>long</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(long val) {
-+ byte[] states = _states;
-+ long[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(byte key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TByteProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TByteProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TLongProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TLongProcedure procedure) {
-+ byte[] states = _states;
-+ long[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOByteLongProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TByteLongProcedure procedure) {
-+ byte[] states = _states;
-+ byte[] keys = _set;
-+ long[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TByteLongProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ byte[] keys = _set;
-+ long[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TLongFunction</code> value
-+ */
-+ public void transformValues(TLongFunction function) {
-+ byte[] states = _states;
-+ long[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(byte key) {
-+ return adjustValue(key, (long)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(byte key, long amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ byte key = in.readByte();
-+ long val = in.readLong();
-+ put(key, val);
-+ }
-+ }
-+} // TByteLongHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteLongIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type byte and long.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TByteLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TByteLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TByteLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TByteLongIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TByteLongIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TByteLongHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TByteLongIterator(TByteLongHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public byte key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public long value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public long setValue(long val) {
-+ long old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TByteLongIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteLongProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type byte and long.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TByteLongProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>byte</code> value
-+ * @param b a <code>long</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(byte a, long b);
-+}// TByteLongProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteObjectHashMap.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,507 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for byte keys and Object values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TByteObjectHashMap<V> extends TByteHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient V[] _values;
-+
-+ /**
-+ * Creates a new <code>TByteObjectHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TByteObjectHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteObjectHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TByteObjectHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteObjectHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TByteObjectHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteObjectHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteObjectHashMap(TByteHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteObjectHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteObjectHashMap(int initialCapacity, TByteHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteObjectHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteObjectHashMap(int initialCapacity, float loadFactor, TByteHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public TByteObjectHashMap<V> clone() {
-+ TByteObjectHashMap<V> m = (TByteObjectHashMap<V>)super.clone();
-+ m._values = (V[]) this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TByteObjectIterator with access to this map's keys and values
-+ */
-+ public TByteObjectIterator<V> iterator() {
-+ return new TByteObjectIterator<V>(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = (V[]) new Object[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (byte)0 if none was found.
-+ */
-+ public V put(byte key, V value) {
-+ byte previousState;
-+ V previous = null;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ byte oldKeys[] = _set;
-+ V oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new byte[newCapacity];
-+ _values = (V[]) new Object[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ byte o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return the value of <tt>key</tt> or (byte)0 if no such mapping exists.
-+ */
-+ public V get(byte key) {
-+ int index = index(key);
-+ return index < 0 ? null : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ byte[] keys = _set;
-+ Object[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (byte)0;
-+ vals[i] = null;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return an <code>Object</code> value or (byte)0 if no such mapping exists.
-+ */
-+ public V remove(byte key) {
-+ V prev = null;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TByteObjectHashMap)) {
-+ return false;
-+ }
-+ TByteObjectHashMap that = (TByteObjectHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TByteObjectProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(byte key, Object value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TByteObjectProcedure {
-+ private final TByteObjectHashMap _otherMap;
-+
-+ EqProcedure(TByteObjectHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(byte key, Object value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two objects for equality.
-+ */
-+ private final boolean eq(Object o1, Object o2) {
-+ return o1 == o2 || ((o1 != null) && o1.equals(o2));
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = null;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public Object[] getValues() {
-+ Object[] vals = new Object[size()];
-+ V[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public byte[] keys() {
-+ byte[] keys = new byte[size()];
-+ byte[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(V val) {
-+ byte[] states = _states;
-+ V[] vals = _values;
-+
-+ // special case null values so that we don't have to
-+ // perform null checks before every call to equals()
-+ if (null == val) {
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL &&
-+ val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ } else {
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL &&
-+ (val == vals[i] || val.equals(vals[i]))) {
-+ return true;
-+ }
-+ }
-+ } // end of else
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(byte key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TByteProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TByteProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TObjectProcedure<V> procedure) {
-+ byte[] states = _states;
-+ V[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOByteObjectProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TByteObjectProcedure<V> procedure) {
-+ byte[] states = _states;
-+ byte[] keys = _set;
-+ V[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TByteObjectProcedure<V> procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ byte[] keys = _set;
-+ V[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TObjectFunction</code> value
-+ */
-+ public void transformValues(TObjectFunction<V,V> function) {
-+ byte[] states = _states;
-+ V[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ byte key = in.readByte();
-+ V val = (V) in.readObject();
-+ put(key, val);
-+ }
-+ }
-+} // TByteObjectHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteObjectIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,151 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type byte and Object.
-+ * <p/>
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ * <p/>
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ * <p/>
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ * <p/>
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ * <p/>
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TByteObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TByteObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TByteObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TByteObjectIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2OIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TByteObjectIterator<V> extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TByteObjectHashMap<V> _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TByteObjectIterator(TByteObjectHashMap<V> map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException
-+ * if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public byte key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public V value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public V setValue(V val) {
-+ V old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TByteObjectIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteObjectProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type byte and Object.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2OProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TByteObjectProcedure<T> {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>byte</code> value
-+ * @param b an <code>Object</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(byte a, T b);
-+}// TByteObjectProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,46 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures with one byte paramater.
-+ *
-+ * Created: Mon Nov 5 21:45:49 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TByteProcedure {
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param value a value of type <code>byte</code>
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(byte value);
-+}// TByteProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteShortHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for byte keys and short values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TByteShortHashMap extends TByteHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient short[] _values;
-+
-+ /**
-+ * Creates a new <code>TByteShortHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TByteShortHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteShortHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TByteShortHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteShortHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TByteShortHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteShortHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteShortHashMap(TByteHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteShortHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteShortHashMap(int initialCapacity, TByteHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TByteShortHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TByteShortHashMap(int initialCapacity, float loadFactor, TByteHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TByteShortHashMap m = (TByteShortHashMap)super.clone();
-+ m._values = (short[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TByteShortIterator with access to this map's keys and values
-+ */
-+ public TByteShortIterator iterator() {
-+ return new TByteShortIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new short[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @param value an <code>short</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (byte)0 if none was found.
-+ */
-+ public short put(byte key, short value) {
-+ byte previousState;
-+ short previous = (short)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ byte oldKeys[] = _set;
-+ short oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new byte[newCapacity];
-+ _values = new short[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ byte o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return the value of <tt>key</tt> or (byte)0 if no such mapping exists.
-+ */
-+ public short get(byte key) {
-+ int index = index(key);
-+ return index < 0 ? (short)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ byte[] keys = _set;
-+ short[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (byte)0;
-+ vals[i] = (short)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return an <code>short</code> value, or (byte)0 if no mapping for key exists
-+ */
-+ public short remove(byte key) {
-+ short prev = (short)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TByteShortHashMap)) {
-+ return false;
-+ }
-+ TByteShortHashMap that = (TByteShortHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TByteShortProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(byte key, short value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TByteShortProcedure {
-+ private final TByteShortHashMap _otherMap;
-+
-+ EqProcedure(TByteShortHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(byte key, short value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two shorts for equality.
-+ */
-+ private final boolean eq(short v1, short v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (short)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public short[] getValues() {
-+ short[] vals = new short[size()];
-+ short[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public byte[] keys() {
-+ byte[] keys = new byte[size()];
-+ byte[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>short</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(short val) {
-+ byte[] states = _states;
-+ short[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>byte</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(byte key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TByteProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TByteProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TShortProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TShortProcedure procedure) {
-+ byte[] states = _states;
-+ short[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOByteShortProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TByteShortProcedure procedure) {
-+ byte[] states = _states;
-+ byte[] keys = _set;
-+ short[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TByteShortProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ byte[] keys = _set;
-+ short[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TShortFunction</code> value
-+ */
-+ public void transformValues(TShortFunction function) {
-+ byte[] states = _states;
-+ short[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(byte key) {
-+ return adjustValue(key, (short)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(byte key, short amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ byte key = in.readByte();
-+ short val = in.readShort();
-+ put(key, val);
-+ }
-+ }
-+} // TByteShortHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteShortIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type byte and short.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TByteShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TByteShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TByteShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TByteShortIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TByteShortIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TByteShortHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TByteShortIterator(TByteShortHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public byte key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public short value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public short setValue(short val) {
-+ short old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TByteShortIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TByteShortProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type byte and short.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TByteShortProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>byte</code> value
-+ * @param b a <code>short</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(byte a, short b);
-+}// TByteShortProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleArrayList.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,905 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.Externalizable;
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.util.Arrays;
-+import java.util.Random;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * A resizable, array-backed list of double primitives.
-+ *
-+ * Created: Sat Dec 29 14:21:12 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+
-+public class TDoubleArrayList implements Externalizable, Cloneable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the data of the list */
-+ protected double[] _data;
-+
-+ /** the index after the last entry in the list */
-+ protected int _pos;
-+
-+ /** the default capacity for new lists */
-+ protected static final int DEFAULT_CAPACITY = 10;
-+
-+ /**
-+ * Creates a new <code>TDoubleArrayList</code> instance with the
-+ * default capacity.
-+ */
-+ public TDoubleArrayList() {
-+ this(DEFAULT_CAPACITY);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleArrayList</code> instance with the
-+ * specified capacity.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public TDoubleArrayList(int capacity) {
-+ _data = new double[capacity];
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleArrayList</code> instance whose
-+ * capacity is the greater of the length of <tt>values</tt> and
-+ * DEFAULT_CAPACITY and whose initial contents are the specified
-+ * values.
-+ *
-+ * @param values an <code>double[]</code> value
-+ */
-+ public TDoubleArrayList(double[] values) {
-+ this(Math.max(values.length, DEFAULT_CAPACITY));
-+ add(values);
-+ }
-+
-+ // sizing
-+
-+ /**
-+ * Grow the internal array as needed to accomodate the specified
-+ * number of elements. The size of the array doubles on each
-+ * resize unless <tt>capacity</tt> requires more than twice the
-+ * current capacity.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public void ensureCapacity(int capacity) {
-+ if (capacity > _data.length) {
-+ int newCap = Math.max(_data.length << 1, capacity);
-+ double[] tmp = new double[newCap];
-+ System.arraycopy(_data, 0, tmp, 0, _data.length);
-+ _data = tmp;
-+ }
-+ }
-+
-+ /**
-+ * Returns the number of values in the list.
-+ *
-+ * @return the number of values in the list.
-+ */
-+ public int size() {
-+ return _pos;
-+ }
-+
-+ /**
-+ * Tests whether this list contains any values.
-+ *
-+ * @return true if the list is empty.
-+ */
-+ public boolean isEmpty() {
-+ return _pos == 0;
-+ }
-+
-+ /**
-+ * Sheds any excess capacity above and beyond the current size of
-+ * the list.
-+ */
-+ public void trimToSize() {
-+ if (_data.length > size()) {
-+ double[] tmp = new double[size()];
-+ toNativeArray(tmp, 0, tmp.length);
-+ _data = tmp;
-+ }
-+ }
-+
-+ // modifying
-+
-+ /**
-+ * Adds <tt>val</tt> to the end of the list, growing as needed.
-+ *
-+ * @param val an <code>double</code> value
-+ */
-+ public void add(double val) {
-+ ensureCapacity(_pos + 1);
-+ _data[_pos++] = val;
-+ }
-+
-+ /**
-+ * Adds the values in the array <tt>vals</tt> to the end of the
-+ * list, in order.
-+ *
-+ * @param vals an <code>double[]</code> value
-+ */
-+ public void add(double[] vals) {
-+ add(vals, 0, vals.length);
-+ }
-+
-+ /**
-+ * Adds a subset of the values in the array <tt>vals</tt> to the
-+ * end of the list, in order.
-+ *
-+ * @param vals an <code>double[]</code> value
-+ * @param offset the offset at which to start copying
-+ * @param length the number of values to copy.
-+ */
-+ public void add(double[] vals, int offset, int length) {
-+ ensureCapacity(_pos + length);
-+ System.arraycopy(vals, offset, _data, _pos, length);
-+ _pos += length;
-+ }
-+
-+ /**
-+ * Inserts <tt>value</tt> into the list at <tt>offset</tt>. All
-+ * values including and to the right of <tt>offset</tt> are shifted
-+ * to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param value an <code>double</code> value
-+ */
-+ public void insert(int offset, double value) {
-+ if (offset == _pos) {
-+ add(value);
-+ return;
-+ }
-+ ensureCapacity(_pos + 1);
-+ // shift right
-+ System.arraycopy(_data, offset, _data, offset + 1, _pos - offset);
-+ // insert
-+ _data[offset] = value;
-+ _pos++;
-+ }
-+
-+ /**
-+ * Inserts the array of <tt>values</tt> into the list at
-+ * <tt>offset</tt>. All values including and to the right of
-+ * <tt>offset</tt> are shifted to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param values an <code>double[]</code> value
-+ */
-+ public void insert(int offset, double[] values) {
-+ insert(offset, values, 0, values.length);
-+ }
-+
-+ /**
-+ * Inserts a slice of the array of <tt>values</tt> into the list
-+ * at <tt>offset</tt>. All values including and to the right of
-+ * <tt>offset</tt> are shifted to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param values an <code>double[]</code> value
-+ * @param valOffset the offset in the values array at which to
-+ * start copying.
-+ * @param len the number of values to copy from the values array
-+ */
-+ public void insert(int offset, double[] values, int valOffset, int len) {
-+ if (offset == _pos) {
-+ add(values, valOffset, len);
-+ return;
-+ }
-+
-+ ensureCapacity(_pos + len);
-+ // shift right
-+ System.arraycopy(_data, offset, _data, offset + len, _pos - offset);
-+ // insert
-+ System.arraycopy(values, valOffset, _data, offset, len);
-+ _pos += len;
-+ }
-+
-+ /**
-+ * Returns the value at the specified offset.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return an <code>double</code> value
-+ */
-+ public double get(int offset) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ return _data[offset];
-+ }
-+
-+ /**
-+ * Returns the value at the specified offset without doing any
-+ * bounds checking.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return an <code>double</code> value
-+ */
-+ public double getQuick(int offset) {
-+ return _data[offset];
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>double</code> value
-+ */
-+ public void set(int offset, double val) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ _data[offset] = val;
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset and returns the
-+ * previously stored value.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>double</code> value
-+ * @return the value previously stored at offset.
-+ */
-+ public double getSet(int offset, double val) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ double old = _data[offset];
-+ _data[offset] = val;
-+ return old;
-+ }
-+
-+ /**
-+ * Replace the values in the list starting at <tt>offset</tt> with
-+ * the contents of the <tt>values</tt> array.
-+ *
-+ * @param offset the first offset to replace
-+ * @param values the source of the new values
-+ */
-+ public void set(int offset, double[] values) {
-+ set(offset, values, 0, values.length);
-+ }
-+
-+ /**
-+ * Replace the values in the list starting at <tt>offset</tt> with
-+ * <tt>length</tt> values from the <tt>values</tt> array, starting
-+ * at valOffset.
-+ *
-+ * @param offset the first offset to replace
-+ * @param values the source of the new values
-+ * @param valOffset the first value to copy from the values array
-+ * @param length the number of values to copy
-+ */
-+ public void set(int offset, double[] values, int valOffset, int length) {
-+ if (offset < 0 || offset + length > _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ System.arraycopy(values, valOffset, _data, offset, length);
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset without doing any bounds
-+ * checking.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>double</code> value
-+ */
-+ public void setQuick(int offset, double val) {
-+ _data[offset] = val;
-+ }
-+
-+ /**
-+ * Flushes the internal state of the list, resetting the capacity
-+ * to the default.
-+ */
-+ public void clear() {
-+ clear(DEFAULT_CAPACITY);
-+ }
-+
-+ /**
-+ * Flushes the internal state of the list, setting the capacity of
-+ * the empty list to <tt>capacity</tt>.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public void clear(int capacity) {
-+ _data = new double[capacity];
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Sets the size of the list to 0, but does not change its
-+ * capacity. This method can be used as an alternative to the
-+ * {@link #clear clear} method if you want to recyle a list without
-+ * allocating new backing arrays.
-+ *
-+ * @see #clear
-+ */
-+ public void reset() {
-+ _pos = 0;
-+ fill((double)0);
-+ }
-+
-+ /**
-+ * Sets the size of the list to 0, but does not change its
-+ * capacity. This method can be used as an alternative to the
-+ * {@link #clear clear} method if you want to recyle a list
-+ * without allocating new backing arrays. This method differs
-+ * from {@link #reset reset} in that it does not clear the old
-+ * values in the backing array. Thus, it is possible for {@link
-+ * #getQuick getQuick} to return stale data if this method is used
-+ * and the caller is careless about bounds checking.
-+ *
-+ * @see #reset
-+ * @see #clear
-+ * @see #getQuick
-+ */
-+ public void resetQuick() {
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Removes the value at <tt>offset</tt> from the list.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return the value previously stored at offset.
-+ */
-+ public double remove(int offset) {
-+ double old = get(offset);
-+ remove(offset, 1);
-+ return old;
-+ }
-+
-+ /**
-+ * Removes <tt>length</tt> values from the list, starting at
-+ * <tt>offset</tt>
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param length an <code>int</code> value
-+ */
-+ public void remove(int offset, int length) {
-+ if (offset < 0 || offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+
-+ if (offset == 0) {
-+ // data at the front
-+ System.arraycopy(_data, length, _data, 0, _pos - length);
-+ } else if (_pos - length == offset) {
-+ // no copy to make, decrementing pos "deletes" values at
-+ // the end
-+ } else {
-+ // data in the middle
-+ System.arraycopy(_data, offset + length,
-+ _data, offset, _pos - (offset + length));
-+ }
-+ _pos -= length;
-+ // no need to clear old values beyond _pos, because this is a
-+ // primitive collection and 0 takes as much room as any other
-+ // value
-+ }
-+
-+ /**
-+ * Transform each value in the list using the specified function.
-+ *
-+ * @param function a <code>TDoubleFunction</code> value
-+ */
-+ public void transformValues(TDoubleFunction function) {
-+ for (int i = _pos; i-- > 0;) {
-+ _data[i] = function.execute(_data[i]);
-+ }
-+ }
-+
-+ /**
-+ * Reverse the order of the elements in the list.
-+ */
-+ public void reverse() {
-+ reverse(0, _pos);
-+ }
-+
-+ /**
-+ * Reverse the order of the elements in the range of the list.
-+ *
-+ * @param from the inclusive index at which to start reversing
-+ * @param to the exclusive index at which to stop reversing
-+ */
-+ public void reverse(int from, int to) {
-+ if (from == to) {
-+ return; // nothing to do
-+ }
-+ if (from > to) {
-+ throw new IllegalArgumentException("from cannot be greater than to");
-+ }
-+ for (int i = from, j = to - 1; i < j; i++, j--) {
-+ swap(i, j);
-+ }
-+ }
-+
-+ /**
-+ * Shuffle the elements of the list using the specified random
-+ * number generator.
-+ *
-+ * @param rand a <code>Random</code> value
-+ */
-+ public void shuffle(Random rand) {
-+ for (int i = _pos; i-- > 1;) {
-+ swap(i, rand.nextInt(i));
-+ }
-+ }
-+
-+ /**
-+ * Swap the values at offsets <tt>i</tt> and <tt>j</tt>.
-+ *
-+ * @param i an offset into the data array
-+ * @param j an offset into the data array
-+ */
-+ private final void swap(int i, int j) {
-+ double tmp = _data[i];
-+ _data[i] = _data[j];
-+ _data[j] = tmp;
-+ }
-+
-+ // copying
-+
-+ /**
-+ * Returns a clone of this list. Since this is a primitive
-+ * collection, this will be a deep clone.
-+ *
-+ * @return a deep clone of the list.
-+ */
-+ public Object clone() {
-+ TDoubleArrayList list = null;
-+ try {
-+ list = (TDoubleArrayList) super.clone();
-+ list._data = toNativeArray();
-+ } catch (CloneNotSupportedException e) {
-+ // it's supported
-+ } // end of try-catch
-+ return list;
-+ }
-+
-+ /**
-+ * Copies the contents of the list into a native array.
-+ *
-+ * @return an <code>double[]</code> value
-+ */
-+ public double[] toNativeArray() {
-+ return toNativeArray(0, _pos);
-+ }
-+
-+ /**
-+ * Copies a slice of the list into a native array.
-+ *
-+ * @param offset the offset at which to start copying
-+ * @param len the number of values to copy.
-+ * @return an <code>double[]</code> value
-+ */
-+ public double[] toNativeArray(int offset, int len) {
-+ double[] rv = new double[len];
-+ toNativeArray(rv, offset, len);
-+ return rv;
-+ }
-+
-+ /**
-+ * Copies a slice of the list into a native array.
-+ *
-+ * @param dest the array to copy into.
-+ * @param offset the offset of the first value to copy
-+ * @param len the number of values to copy.
-+ */
-+ public void toNativeArray(double[] dest, int offset, int len) {
-+ if (len == 0) {
-+ return; // nothing to copy
-+ }
-+ if (offset < 0 || offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ System.arraycopy(_data, offset, dest, 0, len);
-+ }
-+
-+ // comparing
-+
-+ /**
-+ * Compares this list to another list, value by value.
-+ *
-+ * @param other the object to compare against
-+ * @return true if other is a TDoubleArrayList and has exactly the
-+ * same values.
-+ */
-+ public boolean equals(Object other) {
-+ if (other == this) {
-+ return true;
-+ } else if (other instanceof TDoubleArrayList) {
-+ TDoubleArrayList that = (TDoubleArrayList)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ } else {
-+ for (int i = _pos; i-- > 0;) {
-+ if (this._data[i] != that._data[i]) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public int hashCode() {
-+ int h = 0;
-+ for (int i = _pos; i-- > 0;) {
-+ h += HashFunctions.hash(_data[i]);
-+ }
-+ return h;
-+ }
-+
-+ // procedures
-+
-+ /**
-+ * Applies the procedure to each value in the list in ascending
-+ * (front to back) order.
-+ *
-+ * @param procedure a <code>TDoubleProcedure</code> value
-+ * @return true if the procedure did not terminate prematurely.
-+ */
-+ public boolean forEach(TDoubleProcedure procedure) {
-+ for (int i = 0; i < _pos; i++) {
-+ if (! procedure.execute(_data[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Applies the procedure to each value in the list in descending
-+ * (back to front) order.
-+ *
-+ * @param procedure a <code>TDoubleProcedure</code> value
-+ * @return true if the procedure did not terminate prematurely.
-+ */
-+ public boolean forEachDescending(TDoubleProcedure procedure) {
-+ for (int i = _pos; i-- > 0;) {
-+ if (! procedure.execute(_data[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ // sorting
-+
-+ /**
-+ * Sort the values in the list (ascending) using the Sun quicksort
-+ * implementation.
-+ *
-+ * @see java.util.Arrays#sort
-+ */
-+ public void sort() {
-+ Arrays.sort(_data, 0, _pos);
-+ }
-+
-+ /**
-+ * Sort a slice of the list (ascending) using the Sun quicksort
-+ * implementation.
-+ *
-+ * @param fromIndex the index at which to start sorting (inclusive)
-+ * @param toIndex the index at which to stop sorting (exclusive)
-+ * @see java.util.Arrays#sort
-+ */
-+ public void sort(int fromIndex, int toIndex) {
-+ Arrays.sort(_data, fromIndex, toIndex);
-+ }
-+
-+ // filling
-+
-+ /**
-+ * Fills every slot in the list with the specified value.
-+ *
-+ * @param val the value to use when filling
-+ */
-+ public void fill(double val) {
-+ Arrays.fill(_data, 0, _pos, val);
-+ }
-+
-+ /**
-+ * Fills a range in the list with the specified value.
-+ *
-+ * @param fromIndex the offset at which to start filling (inclusive)
-+ * @param toIndex the offset at which to stop filling (exclusive)
-+ * @param val the value to use when filling
-+ */
-+ public void fill(int fromIndex, int toIndex, double val) {
-+ if (toIndex > _pos) {
-+ ensureCapacity(toIndex);
-+ _pos = toIndex;
-+ }
-+ Arrays.fill(_data, fromIndex, toIndex, val);
-+ }
-+
-+ // searching
-+
-+ /**
-+ * Performs a binary search for <tt>value</tt> in the entire list.
-+ * Note that you <b>must</b> @{link #sort sort} the list before
-+ * doing a search.
-+ *
-+ * @param value the value to search for
-+ * @return the absolute offset in the list of the value, or its
-+ * negative insertion point into the sorted list.
-+ */
-+ public int binarySearch(double value) {
-+ return binarySearch(value, 0, _pos);
-+ }
-+
-+ /**
-+ * Performs a binary search for <tt>value</tt> in the specified
-+ * range. Note that you <b>must</b> @{link #sort sort} the list
-+ * or the range before doing a search.
-+ *
-+ * @param value the value to search for
-+ * @param fromIndex the lower boundary of the range (inclusive)
-+ * @param toIndex the upper boundary of the range (exclusive)
-+ * @return the absolute offset in the list of the value, or its
-+ * negative insertion point into the sorted list.
-+ */
-+ public int binarySearch(double value, int fromIndex, int toIndex) {
-+ if (fromIndex < 0) {
-+ throw new ArrayIndexOutOfBoundsException(fromIndex);
-+ }
-+ if (toIndex > _pos) {
-+ throw new ArrayIndexOutOfBoundsException(toIndex);
-+ }
-+
-+ int low = fromIndex;
-+ int high = toIndex - 1;
-+
-+ while (low <= high) {
-+ int mid = (low + high) >> 1;
-+ double midVal = _data[mid];
-+
-+ if (midVal < value) {
-+ low = mid + 1;
-+ } else if (midVal > value) {
-+ high = mid - 1;
-+ } else {
-+ return mid; // value found
-+ }
-+ }
-+ return -(low + 1); // value not found.
-+ }
-+
-+ /**
-+ * Searches the list front to back for the index of
-+ * <tt>value</tt>.
-+ *
-+ * @param value an <code>double</code> value
-+ * @return the first offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int indexOf(double value) {
-+ return indexOf(0, value);
-+ }
-+
-+ /**
-+ * Searches the list front to back for the index of
-+ * <tt>value</tt>, starting at <tt>offset</tt>.
-+ *
-+ * @param offset the offset at which to start the linear search
-+ * (inclusive)
-+ * @param value an <code>double</code> value
-+ * @return the first offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int indexOf(int offset, double value) {
-+ for (int i = offset; i < _pos; i++) {
-+ if (_data[i] == value) {
-+ return i;
-+ }
-+ }
-+ return -1;
-+ }
-+
-+ /**
-+ * Searches the list back to front for the last index of
-+ * <tt>value</tt>.
-+ *
-+ * @param value an <code>double</code> value
-+ * @return the last offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int lastIndexOf(double value) {
-+ return lastIndexOf(_pos, value);
-+ }
-+
-+ /**
-+ * Searches the list back to front for the last index of
-+ * <tt>value</tt>, starting at <tt>offset</tt>.
-+ *
-+ * @param offset the offset at which to start the linear search
-+ * (exclusive)
-+ * @param value an <code>double</code> value
-+ * @return the last offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int lastIndexOf(int offset, double value) {
-+ for (int i = offset; i-- > 0;) {
-+ if (_data[i] == value) {
-+ return i;
-+ }
-+ }
-+ return -1;
-+ }
-+
-+ /**
-+ * Searches the list for <tt>value</tt>
-+ *
-+ * @param value an <code>double</code> value
-+ * @return true if value is in the list.
-+ */
-+ public boolean contains(double value) {
-+ return lastIndexOf(value) >= 0;
-+ }
-+
-+ /**
-+ * Searches the list for values satisfying <tt>condition</tt> in
-+ * the manner of the *nix <tt>grep</tt> utility.
-+ *
-+ * @param condition a condition to apply to each element in the list
-+ * @return a list of values which match the condition.
-+ */
-+ public TDoubleArrayList grep(TDoubleProcedure condition) {
-+ TDoubleArrayList list = new TDoubleArrayList();
-+ for (int i = 0; i < _pos; i++) {
-+ if (condition.execute(_data[i])) {
-+ list.add(_data[i]);
-+ }
-+ }
-+ return list;
-+ }
-+
-+ /**
-+ * Searches the list for values which do <b>not</b> satisfy
-+ * <tt>condition</tt>. This is akin to *nix <code>grep -v</code>.
-+ *
-+ * @param condition a condition to apply to each element in the list
-+ * @return a list of values which do not match the condition.
-+ */
-+ public TDoubleArrayList inverseGrep(TDoubleProcedure condition) {
-+ TDoubleArrayList list = new TDoubleArrayList();
-+ for (int i = 0; i < _pos; i++) {
-+ if (! condition.execute(_data[i])) {
-+ list.add(_data[i]);
-+ }
-+ }
-+ return list;
-+ }
-+
-+ /**
-+ * Finds the maximum value in the list.
-+ *
-+ * @return the largest value in the list.
-+ * @exception IllegalStateException if the list is empty
-+ */
-+ public double max() {
-+ if (size() == 0) {
-+ throw new IllegalStateException("cannot find maximum of an empty list");
-+ }
-+ double max = _data[_pos - 1];
-+ for (int i = _pos - 1; i-- > 0;) {
-+ if ( _data[_pos] > max ) {
-+ max = _data[_pos];
-+ }
-+ }
-+ return max;
-+ }
-+
-+ /**
-+ * Finds the minimum value in the list.
-+ *
-+ * @return the smallest value in the list.
-+ * @exception IllegalStateException if the list is empty
-+ */
-+ public double min() {
-+ if (size() == 0) {
-+ throw new IllegalStateException("cannot find minimum of an empty list");
-+ }
-+ double min = _data[_pos - 1];
-+ for (int i = _pos - 1; i-- > 0;) {
-+ if ( _data[_pos] > min ) {
-+ min = _data[_pos];
-+ }
-+ }
-+ return min;
-+ }
-+
-+ // stringification
-+
-+ /**
-+ * Returns a String representation of the list, front to back.
-+ *
-+ * @return a <code>String</code> value
-+ */
-+ public String toString() {
-+ final StringBuffer buf = new StringBuffer("{");
-+ for (int i = 0, end = _pos - 1; i < end; i++) {
-+ buf.append(_data[i]);
-+ buf.append(", ");
-+ }
-+ if (size() > 0) {
-+ buf.append(_data[_pos - 1]);
-+ }
-+ buf.append("}");
-+ return buf.toString();
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // POSITION
-+ out.writeInt( _pos );
-+
-+ // ENTRIES
-+ int len = _data.length;
-+ out.writeInt( len );
-+ for( int i = 0; i < len; i++ ) {
-+ out.writeDouble( _data[ i ] );
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // POSITION
-+ _pos = in.readInt();
-+
-+ // ENTRIES
-+ int len = in.readInt();
-+ _data = new double[ len ];
-+ for( int i = 0; i < len; i++ ) {
-+ _data[ i ] = in.readDouble();
-+ }
-+ }
-+} // TDoubleArrayList
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleByteHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for double keys and byte values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TDoubleByteHashMap extends TDoubleHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient byte[] _values;
-+
-+ /**
-+ * Creates a new <code>TDoubleByteHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TDoubleByteHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleByteHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TDoubleByteHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleByteHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TDoubleByteHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleByteHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleByteHashMap(TDoubleHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleByteHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleByteHashMap(int initialCapacity, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleByteHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleByteHashMap(int initialCapacity, float loadFactor, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TDoubleByteHashMap m = (TDoubleByteHashMap)super.clone();
-+ m._values = (byte[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TDoubleByteIterator with access to this map's keys and values
-+ */
-+ public TDoubleByteIterator iterator() {
-+ return new TDoubleByteIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new byte[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @param value an <code>byte</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (double)0 if none was found.
-+ */
-+ public byte put(double key, byte value) {
-+ byte previousState;
-+ byte previous = (byte)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ double oldKeys[] = _set;
-+ byte oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new double[newCapacity];
-+ _values = new byte[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ double o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>double</code> value
-+ * @return the value of <tt>key</tt> or (double)0 if no such mapping exists.
-+ */
-+ public byte get(double key) {
-+ int index = index(key);
-+ return index < 0 ? (byte)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ double[] keys = _set;
-+ byte[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (double)0;
-+ vals[i] = (byte)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @return an <code>byte</code> value, or (double)0 if no mapping for key exists
-+ */
-+ public byte remove(double key) {
-+ byte prev = (byte)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TDoubleByteHashMap)) {
-+ return false;
-+ }
-+ TDoubleByteHashMap that = (TDoubleByteHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TDoubleByteProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(double key, byte value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TDoubleByteProcedure {
-+ private final TDoubleByteHashMap _otherMap;
-+
-+ EqProcedure(TDoubleByteHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(double key, byte value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two bytes for equality.
-+ */
-+ private final boolean eq(byte v1, byte v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (byte)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public byte[] getValues() {
-+ byte[] vals = new byte[size()];
-+ byte[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public double[] keys() {
-+ double[] keys = new double[size()];
-+ double[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>byte</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(byte val) {
-+ byte[] states = _states;
-+ byte[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(double key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TDoubleProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TDoubleProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TByteProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TByteProcedure procedure) {
-+ byte[] states = _states;
-+ byte[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TODoubleByteProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TDoubleByteProcedure procedure) {
-+ byte[] states = _states;
-+ double[] keys = _set;
-+ byte[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TDoubleByteProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ double[] keys = _set;
-+ byte[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TByteFunction</code> value
-+ */
-+ public void transformValues(TByteFunction function) {
-+ byte[] states = _states;
-+ byte[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(double key) {
-+ return adjustValue(key, (byte)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(double key, byte amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ double key = in.readDouble();
-+ byte val = in.readByte();
-+ put(key, val);
-+ }
-+ }
-+} // TDoubleByteHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleByteIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type double and byte.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TDoubleByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TDoubleByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TDoubleByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TDoubleByteIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TDoubleByteIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TDoubleByteHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TDoubleByteIterator(TDoubleByteHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public double key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public byte value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public byte setValue(byte val) {
-+ byte old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TDoubleByteIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleByteProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type double and byte.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TDoubleByteProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>double</code> value
-+ * @param b a <code>byte</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(double a, byte b);
-+}// TDoubleByteProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleDoubleHashMap.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for double keys and double values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TDoubleDoubleHashMap extends TDoubleHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient double[] _values;
-+
-+ /**
-+ * Creates a new <code>TDoubleDoubleHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TDoubleDoubleHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleDoubleHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TDoubleDoubleHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleDoubleHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TDoubleDoubleHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleDoubleHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleDoubleHashMap(TDoubleHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleDoubleHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleDoubleHashMap(int initialCapacity, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleDoubleHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleDoubleHashMap(int initialCapacity, float loadFactor, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TDoubleDoubleHashMap m = (TDoubleDoubleHashMap)super.clone();
-+ m._values = (double[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TDoubleDoubleIterator with access to this map's keys and values
-+ */
-+ public TDoubleDoubleIterator iterator() {
-+ return new TDoubleDoubleIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new double[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @param value an <code>double</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (double)0 if none was found.
-+ */
-+ public double put(double key, double value) {
-+ byte previousState;
-+ double previous = (double)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ double oldKeys[] = _set;
-+ double oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new double[newCapacity];
-+ _values = new double[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ double o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>double</code> value
-+ * @return the value of <tt>key</tt> or (double)0 if no such mapping exists.
-+ */
-+ public double get(double key) {
-+ int index = index(key);
-+ return index < 0 ? (double)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ double[] keys = _set;
-+ double[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (double)0;
-+ vals[i] = (double)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @return an <code>double</code> value, or (double)0 if no mapping for key exists
-+ */
-+ public double remove(double key) {
-+ double prev = (double)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TDoubleDoubleHashMap)) {
-+ return false;
-+ }
-+ TDoubleDoubleHashMap that = (TDoubleDoubleHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TDoubleDoubleProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(double key, double value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TDoubleDoubleProcedure {
-+ private final TDoubleDoubleHashMap _otherMap;
-+
-+ EqProcedure(TDoubleDoubleHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(double key, double value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two doubles for equality.
-+ */
-+ private final boolean eq(double v1, double v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (double)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public double[] getValues() {
-+ double[] vals = new double[size()];
-+ double[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public double[] keys() {
-+ double[] keys = new double[size()];
-+ double[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>double</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(double val) {
-+ byte[] states = _states;
-+ double[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(double key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TDoubleProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TDoubleProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TDoubleProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TDoubleProcedure procedure) {
-+ byte[] states = _states;
-+ double[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TODoubleDoubleProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TDoubleDoubleProcedure procedure) {
-+ byte[] states = _states;
-+ double[] keys = _set;
-+ double[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TDoubleDoubleProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ double[] keys = _set;
-+ double[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TDoubleFunction</code> value
-+ */
-+ public void transformValues(TDoubleFunction function) {
-+ byte[] states = _states;
-+ double[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(double key) {
-+ return adjustValue(key, (double)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(double key, double amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ double key = in.readDouble();
-+ double val = in.readDouble();
-+ put(key, val);
-+ }
-+ }
-+} // TDoubleDoubleHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleDoubleIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type double and double.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TDoubleDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TDoubleDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TDoubleDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TDoubleDoubleIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TDoubleDoubleIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TDoubleDoubleHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TDoubleDoubleIterator(TDoubleDoubleHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public double key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public double value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public double setValue(double val) {
-+ double old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TDoubleDoubleIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleDoubleProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type double and double.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TDoubleDoubleProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>double</code> value
-+ * @param b a <code>double</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(double a, double b);
-+}// TDoubleDoubleProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleFloatHashMap.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for double keys and float values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TDoubleFloatHashMap extends TDoubleHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient float[] _values;
-+
-+ /**
-+ * Creates a new <code>TDoubleFloatHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TDoubleFloatHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleFloatHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TDoubleFloatHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleFloatHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TDoubleFloatHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleFloatHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleFloatHashMap(TDoubleHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleFloatHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleFloatHashMap(int initialCapacity, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleFloatHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleFloatHashMap(int initialCapacity, float loadFactor, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TDoubleFloatHashMap m = (TDoubleFloatHashMap)super.clone();
-+ m._values = (float[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TDoubleFloatIterator with access to this map's keys and values
-+ */
-+ public TDoubleFloatIterator iterator() {
-+ return new TDoubleFloatIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new float[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @param value an <code>float</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (double)0 if none was found.
-+ */
-+ public float put(double key, float value) {
-+ byte previousState;
-+ float previous = (float)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ double oldKeys[] = _set;
-+ float oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new double[newCapacity];
-+ _values = new float[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ double o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>double</code> value
-+ * @return the value of <tt>key</tt> or (double)0 if no such mapping exists.
-+ */
-+ public float get(double key) {
-+ int index = index(key);
-+ return index < 0 ? (float)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ double[] keys = _set;
-+ float[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (double)0;
-+ vals[i] = (float)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @return an <code>float</code> value, or (double)0 if no mapping for key exists
-+ */
-+ public float remove(double key) {
-+ float prev = (float)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TDoubleFloatHashMap)) {
-+ return false;
-+ }
-+ TDoubleFloatHashMap that = (TDoubleFloatHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TDoubleFloatProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(double key, float value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TDoubleFloatProcedure {
-+ private final TDoubleFloatHashMap _otherMap;
-+
-+ EqProcedure(TDoubleFloatHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(double key, float value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two floats for equality.
-+ */
-+ private final boolean eq(float v1, float v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (float)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public float[] getValues() {
-+ float[] vals = new float[size()];
-+ float[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public double[] keys() {
-+ double[] keys = new double[size()];
-+ double[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>float</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(float val) {
-+ byte[] states = _states;
-+ float[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(double key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TDoubleProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TDoubleProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TFloatProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TFloatProcedure procedure) {
-+ byte[] states = _states;
-+ float[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TODoubleFloatProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TDoubleFloatProcedure procedure) {
-+ byte[] states = _states;
-+ double[] keys = _set;
-+ float[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TDoubleFloatProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ double[] keys = _set;
-+ float[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TFloatFunction</code> value
-+ */
-+ public void transformValues(TFloatFunction function) {
-+ byte[] states = _states;
-+ float[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(double key) {
-+ return adjustValue(key, (float)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(double key, float amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ double key = in.readDouble();
-+ float val = in.readFloat();
-+ put(key, val);
-+ }
-+ }
-+} // TDoubleFloatHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleFloatIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type double and float.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TDoubleFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TDoubleFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TDoubleFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TDoubleFloatIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TDoubleFloatIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TDoubleFloatHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TDoubleFloatIterator(TDoubleFloatHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public double key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public float value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public float setValue(float val) {
-+ float old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TDoubleFloatIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleFloatProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type double and float.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TDoubleFloatProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>double</code> value
-+ * @param b a <code>float</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(double a, float b);
-+}// TDoubleFloatProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleFunction.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,43 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for functions that accept and return one double primitive.
-+ *
-+ * Created: Mon Nov 5 22:19:36 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PFunction.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TDoubleFunction {
-+ /**
-+ * Execute this function with <tt>value</tt>
-+ *
-+ * @param value a <code>double</code> input
-+ * @return a <code>double</code> result
-+ */
-+ public double execute(double value);
-+}// TDoubleFunction
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleHash.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,289 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed hashing implementation for double primitives.
-+ *
-+ * Created: Sun Nov 4 08:56:06 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PHash.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+abstract public class TDoubleHash extends TPrimitiveHash implements TDoubleHashingStrategy {
-+
-+ /** the set of doubles */
-+ protected transient double[] _set;
-+
-+ /** strategy used to hash values in this collection */
-+ protected TDoubleHashingStrategy _hashingStrategy;
-+
-+ /**
-+ * Creates a new <code>TDoubleHash</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TDoubleHash() {
-+ super();
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TDoubleHash(int initialCapacity) {
-+ super(initialCapacity);
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ */
-+ public TDoubleHash(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleHash</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleHash(TDoubleHashingStrategy strategy) {
-+ super();
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleHash(int initialCapacity, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity);
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleHash(int initialCapacity, float loadFactor, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor);
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TDoubleHash h = (TDoubleHash)super.clone();
-+ h._set = (double[])this._set.clone();
-+ return h;
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _set = new double[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Searches the set for <tt>val</tt>
-+ *
-+ * @param val an <code>double</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean contains(double val) {
-+ return index(val) >= 0;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each element in the set.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the set terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEach(TDoubleProcedure procedure) {
-+ byte[] states = _states;
-+ double[] set = _set;
-+ for (int i = set.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(set[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Releases the element currently stored at <tt>index</tt>.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _set[index] = (double)0;
-+ super.removeAt(index);
-+ }
-+
-+ /**
-+ * Locates the index of <tt>val</tt>.
-+ *
-+ * @param val an <code>double</code> value
-+ * @return the index of <tt>val</tt> or -1 if it isn't in the set.
-+ */
-+ protected int index(double val) {
-+ int hash, probe, index, length;
-+ double[] set;
-+ byte[] states;
-+
-+ states = _states;
-+ set = _set;
-+ length = states.length;
-+ hash = _hashingStrategy.computeHashCode(val) & 0x7fffffff;
-+ index = hash % length;
-+
-+ if (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val)) {
-+ // see Knuth, p. 529
-+ probe = 1 + (hash % (length - 2));
-+
-+ do {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ } while (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val));
-+ }
-+
-+ return states[index] == FREE ? -1 : index;
-+ }
-+
-+ /**
-+ * Locates the index at which <tt>val</tt> can be inserted. if
-+ * there is already a value equal()ing <tt>val</tt> in the set,
-+ * returns that value as a negative integer.
-+ *
-+ * @param val an <code>double</code> value
-+ * @return an <code>int</code> value
-+ */
-+ protected int insertionIndex(double val) {
-+ int hash, probe, index, length;
-+ double[] set;
-+ byte[] states;
-+
-+ states = _states;
-+ set = _set;
-+ length = states.length;
-+ hash = _hashingStrategy.computeHashCode(val) & 0x7fffffff;
-+ index = hash % length;
-+
-+ if (states[index] == FREE) {
-+ return index; // empty, all done
-+ } else if (states[index] == FULL && set[index] == val) {
-+ return -index -1; // already stored
-+ } else { // already FULL or REMOVED, must probe
-+ // compute the double hash
-+ probe = 1 + (hash % (length - 2));
-+
-+ // if the slot we landed on is FULL (but not removed), probe
-+ // until we find an empty slot, a REMOVED slot, or an element
-+ // equal to the one we are trying to insert.
-+ // finding an empty slot means that the value is not present
-+ // and that we should use that slot as the insertion point;
-+ // finding a REMOVED slot means that we need to keep searching,
-+ // however we want to remember the offset of that REMOVED slot
-+ // so we can reuse it in case a "new" insertion (i.e. not an update)
-+ // is possible.
-+ // finding a matching value means that we've found that our desired
-+ // key is already in the table
-+
-+ if (states[index] != REMOVED) {
-+ // starting at the natural offset, probe until we find an
-+ // offset that isn't full.
-+ do {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ } while (states[index] == FULL && set[index] != val);
-+ }
-+
-+ // if the index we found was removed: continue probing until we
-+ // locate a free location or an element which equal()s the
-+ // one we have.
-+ if (states[index] == REMOVED) {
-+ int firstRemoved = index;
-+ while (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val)) {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ }
-+ return states[index] == FULL ? -index -1 : firstRemoved;
-+ }
-+ // if it's full, the key is already stored
-+ return states[index] == FULL ? -index -1 : index;
-+ }
-+ }
-+
-+ /**
-+ * Default implementation of TDoubleHashingStrategy:
-+ * delegates hashing to HashFunctions.hash(double).
-+ *
-+ * @param val the value to hash
-+ * @return the hashcode.
-+ */
-+ public final int computeHashCode(double val) {
-+ return HashFunctions.hash(val);
-+ }
-+} // TDoubleHash
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleHashingStrategy.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,49 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.Serializable;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface to support pluggable hashing strategies in maps and sets.
-+ * Implementors can use this interface to make the trove hashing
-+ * algorithms use an optimal strategy when computing hashcodes.
-+ *
-+ * Created: Sun Nov 4 08:56:06 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PHashingStrategy.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TDoubleHashingStrategy extends Serializable {
-+ /**
-+ * Computes a hash code for the specified double. Implementors
-+ * can use the double's own value or a custom scheme designed to
-+ * minimize collisions for a known set of input.
-+ *
-+ * @param val double for which the hashcode is to be computed
-+ * @return the hashCode
-+ */
-+ public int computeHashCode(double val);
-+} // TDoubleHashingStrategy
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleHashSet.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,371 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+import java.util.Arrays;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed set implementation for double primitives.
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+
-+public class TDoubleHashSet extends TDoubleHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /**
-+ * Creates a new <code>TDoubleHashSet</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TDoubleHashSet() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleHashSet</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TDoubleHashSet(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleHashSet</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TDoubleHashSet(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleHashSet</code> instance containing the
-+ * elements of <tt>array</tt>.
-+ *
-+ * @param array an array of <code>double</code> primitives
-+ */
-+ public TDoubleHashSet(double[] array) {
-+ this(array.length);
-+ addAll(array);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleHash</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleHashSet(TDoubleHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleHashSet(int initialCapacity, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleHashSet(int initialCapacity, float loadFactor, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleHashSet</code> instance containing the
-+ * elements of <tt>array</tt>.
-+ *
-+ * @param array an array of <code>double</code> primitives
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleHashSet(double[] array, TDoubleHashingStrategy strategy) {
-+ this(array.length, strategy);
-+ addAll(array);
-+ }
-+
-+ /**
-+ * @return a TDoubleIterator with access to the values in this set
-+ */
-+ public TDoubleIterator iterator() {
-+ return new TDoubleIterator(this);
-+ }
-+
-+ /**
-+ * Inserts a value into the set.
-+ *
-+ * @param val an <code>double</code> value
-+ * @return true if the set was modified by the add operation
-+ */
-+ public boolean add(double val) {
-+ int index = insertionIndex(val);
-+
-+ if (index < 0) {
-+ return false; // already present in set, nothing to add
-+ }
-+
-+ byte previousState = _states[index];
-+ _set[index] = val;
-+ _states[index] = FULL;
-+ postInsertHook(previousState == FREE);
-+
-+ return true; // yes, we added something
-+ }
-+
-+ /**
-+ * Expands the set to accomodate new values.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ double oldSet[] = _set;
-+ byte oldStates[] = _states;
-+
-+ _set = new double[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ double o = oldSet[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Returns a new array containing the values in the set.
-+ *
-+ * @return an <code>double[]</code> value
-+ */
-+ public double[] toArray() {
-+ double[] result = new double[size()];
-+ double[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = states.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ result[j++] = set[i];
-+ }
-+ }
-+ return result;
-+ }
-+
-+ /**
-+ * Empties the set.
-+ */
-+ public void clear() {
-+ super.clear();
-+ double[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = set.length; i-- > 0;) {
-+ set[i] = (double)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Compares this set with another set for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TDoubleHashSet)) {
-+ return false;
-+ }
-+ final TDoubleHashSet that = (TDoubleHashSet)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEach(new TDoubleProcedure() {
-+ public final boolean execute(double value) {
-+ return that.contains(value);
-+ }
-+ });
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEach(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TDoubleProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(double key) {
-+ h += _hashingStrategy.computeHashCode(key);
-+ return true;
-+ }
-+ }
-+
-+ /**
-+ * Removes <tt>val</tt> from the set.
-+ *
-+ * @param val an <code>double</code> value
-+ * @return true if the set was modified by the remove operation.
-+ */
-+ public boolean remove(double val) {
-+ int index = index(val);
-+ if (index >= 0) {
-+ removeAt(index);
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Tests the set to determine if all of the elements in
-+ * <tt>array</tt> are present.
-+ *
-+ * @param array an <code>array</code> of double primitives.
-+ * @return true if all elements were present in the set.
-+ */
-+ public boolean containsAll(double[] array) {
-+ for (int i = array.length; i-- > 0;) {
-+ if (! contains(array[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Adds all of the elements in <tt>array</tt> to the set.
-+ *
-+ * @param array an <code>array</code> of double primitives.
-+ * @return true if the set was modified by the add all operation.
-+ */
-+ public boolean addAll(double[] array) {
-+ boolean changed = false;
-+ for (int i = array.length; i-- > 0;) {
-+ if (add(array[i])) {
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+ /**
-+ * Removes all of the elements in <tt>array</tt> from the set.
-+ *
-+ * @param array an <code>array</code> of double primitives.
-+ * @return true if the set was modified by the remove all operation.
-+ */
-+ public boolean removeAll(double[] array) {
-+ boolean changed = false;
-+ for (int i = array.length; i-- > 0;) {
-+ if (remove(array[i])) {
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+ /**
-+ * Removes any values in the set which are not contained in
-+ * <tt>array</tt>.
-+ *
-+ * @param array an <code>array</code> of double primitives.
-+ * @return true if the set was modified by the retain all operation
-+ */
-+ public boolean retainAll(double[] array) {
-+ boolean changed = false;
-+ Arrays.sort(array);
-+ double[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = set.length; i-- > 0;) {
-+ if (states[i] == FULL && (Arrays.binarySearch(array,set[i]) < 0)) {
-+ remove(set[i]);
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure(out);
-+ if (! forEach(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+
-+ // ENTRIES
-+ setUp(size);
-+ while (size-- > 0) {
-+ double val = in.readDouble();
-+ add(val);
-+ }
-+ }
-+} // TDoubleHashSet
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleIntHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for double keys and int values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TDoubleIntHashMap extends TDoubleHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient int[] _values;
-+
-+ /**
-+ * Creates a new <code>TDoubleIntHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TDoubleIntHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleIntHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TDoubleIntHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleIntHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TDoubleIntHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleIntHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleIntHashMap(TDoubleHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleIntHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleIntHashMap(int initialCapacity, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleIntHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleIntHashMap(int initialCapacity, float loadFactor, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TDoubleIntHashMap m = (TDoubleIntHashMap)super.clone();
-+ m._values = (int[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TDoubleIntIterator with access to this map's keys and values
-+ */
-+ public TDoubleIntIterator iterator() {
-+ return new TDoubleIntIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new int[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @param value an <code>int</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (double)0 if none was found.
-+ */
-+ public int put(double key, int value) {
-+ byte previousState;
-+ int previous = (int)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ double oldKeys[] = _set;
-+ int oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new double[newCapacity];
-+ _values = new int[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ double o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>double</code> value
-+ * @return the value of <tt>key</tt> or (double)0 if no such mapping exists.
-+ */
-+ public int get(double key) {
-+ int index = index(key);
-+ return index < 0 ? (int)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ double[] keys = _set;
-+ int[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (double)0;
-+ vals[i] = (int)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @return an <code>int</code> value, or (double)0 if no mapping for key exists
-+ */
-+ public int remove(double key) {
-+ int prev = (int)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TDoubleIntHashMap)) {
-+ return false;
-+ }
-+ TDoubleIntHashMap that = (TDoubleIntHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TDoubleIntProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(double key, int value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TDoubleIntProcedure {
-+ private final TDoubleIntHashMap _otherMap;
-+
-+ EqProcedure(TDoubleIntHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(double key, int value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two ints for equality.
-+ */
-+ private final boolean eq(int v1, int v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (int)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public int[] getValues() {
-+ int[] vals = new int[size()];
-+ int[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public double[] keys() {
-+ double[] keys = new double[size()];
-+ double[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>int</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(int val) {
-+ byte[] states = _states;
-+ int[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(double key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TDoubleProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TDoubleProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TIntProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TIntProcedure procedure) {
-+ byte[] states = _states;
-+ int[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TODoubleIntProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TDoubleIntProcedure procedure) {
-+ byte[] states = _states;
-+ double[] keys = _set;
-+ int[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TDoubleIntProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ double[] keys = _set;
-+ int[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TIntFunction</code> value
-+ */
-+ public void transformValues(TIntFunction function) {
-+ byte[] states = _states;
-+ int[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(double key) {
-+ return adjustValue(key, (int)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(double key, int amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ double key = in.readDouble();
-+ int val = in.readInt();
-+ put(key, val);
-+ }
-+ }
-+} // TDoubleIntHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleIntIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type double and int.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TDoubleIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TDoubleIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TDoubleIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TDoubleIntIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TDoubleIntIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TDoubleIntHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TDoubleIntIterator(TDoubleIntHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public double key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public int value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public int setValue(int val) {
-+ int old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TDoubleIntIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleIntProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type double and int.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TDoubleIntProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>double</code> value
-+ * @param b a <code>int</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(double a, int b);
-+}// TDoubleIntProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,56 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for double collections.
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TDoubleIterator extends TPrimitiveIterator {
-+ /** the collection on which the iterator operates */
-+ private final TDoubleHash _hash;
-+
-+ /**
-+ * Creates a TDoubleIterator for the elements in the specified collection.
-+ */
-+ public TDoubleIterator(TDoubleHash hash) {
-+ super(hash);
-+ this._hash = hash;
-+ }
-+
-+ /**
-+ * Advances the iterator to the next element in the underlying collection
-+ * and returns it.
-+ *
-+ * @return the next double in the collection
-+ * @exception NoSuchElementException if the iterator is already exhausted
-+ */
-+ public double next() {
-+ moveToNextIndex();
-+ return _hash._set[_index];
-+ }
-+}// TDoubleIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleLongHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for double keys and long values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TDoubleLongHashMap extends TDoubleHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient long[] _values;
-+
-+ /**
-+ * Creates a new <code>TDoubleLongHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TDoubleLongHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleLongHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TDoubleLongHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleLongHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TDoubleLongHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleLongHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleLongHashMap(TDoubleHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleLongHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleLongHashMap(int initialCapacity, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleLongHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleLongHashMap(int initialCapacity, float loadFactor, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TDoubleLongHashMap m = (TDoubleLongHashMap)super.clone();
-+ m._values = (long[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TDoubleLongIterator with access to this map's keys and values
-+ */
-+ public TDoubleLongIterator iterator() {
-+ return new TDoubleLongIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new long[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @param value an <code>long</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (double)0 if none was found.
-+ */
-+ public long put(double key, long value) {
-+ byte previousState;
-+ long previous = (long)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ double oldKeys[] = _set;
-+ long oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new double[newCapacity];
-+ _values = new long[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ double o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>double</code> value
-+ * @return the value of <tt>key</tt> or (double)0 if no such mapping exists.
-+ */
-+ public long get(double key) {
-+ int index = index(key);
-+ return index < 0 ? (long)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ double[] keys = _set;
-+ long[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (double)0;
-+ vals[i] = (long)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @return an <code>long</code> value, or (double)0 if no mapping for key exists
-+ */
-+ public long remove(double key) {
-+ long prev = (long)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TDoubleLongHashMap)) {
-+ return false;
-+ }
-+ TDoubleLongHashMap that = (TDoubleLongHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TDoubleLongProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(double key, long value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TDoubleLongProcedure {
-+ private final TDoubleLongHashMap _otherMap;
-+
-+ EqProcedure(TDoubleLongHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(double key, long value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two longs for equality.
-+ */
-+ private final boolean eq(long v1, long v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (long)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public long[] getValues() {
-+ long[] vals = new long[size()];
-+ long[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public double[] keys() {
-+ double[] keys = new double[size()];
-+ double[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>long</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(long val) {
-+ byte[] states = _states;
-+ long[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(double key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TDoubleProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TDoubleProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TLongProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TLongProcedure procedure) {
-+ byte[] states = _states;
-+ long[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TODoubleLongProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TDoubleLongProcedure procedure) {
-+ byte[] states = _states;
-+ double[] keys = _set;
-+ long[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TDoubleLongProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ double[] keys = _set;
-+ long[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TLongFunction</code> value
-+ */
-+ public void transformValues(TLongFunction function) {
-+ byte[] states = _states;
-+ long[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(double key) {
-+ return adjustValue(key, (long)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(double key, long amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ double key = in.readDouble();
-+ long val = in.readLong();
-+ put(key, val);
-+ }
-+ }
-+} // TDoubleLongHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleLongIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type double and long.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TDoubleLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TDoubleLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TDoubleLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TDoubleLongIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TDoubleLongIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TDoubleLongHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TDoubleLongIterator(TDoubleLongHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public double key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public long value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public long setValue(long val) {
-+ long old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TDoubleLongIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleLongProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type double and long.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TDoubleLongProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>double</code> value
-+ * @param b a <code>long</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(double a, long b);
-+}// TDoubleLongProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleObjectHashMap.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,507 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for double keys and Object values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TDoubleObjectHashMap<V> extends TDoubleHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient V[] _values;
-+
-+ /**
-+ * Creates a new <code>TDoubleObjectHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TDoubleObjectHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleObjectHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TDoubleObjectHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleObjectHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TDoubleObjectHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleObjectHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleObjectHashMap(TDoubleHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleObjectHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleObjectHashMap(int initialCapacity, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleObjectHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleObjectHashMap(int initialCapacity, float loadFactor, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public TDoubleObjectHashMap<V> clone() {
-+ TDoubleObjectHashMap<V> m = (TDoubleObjectHashMap<V>)super.clone();
-+ m._values = (V[]) this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TDoubleObjectIterator with access to this map's keys and values
-+ */
-+ public TDoubleObjectIterator<V> iterator() {
-+ return new TDoubleObjectIterator<V>(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = (V[]) new Object[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (double)0 if none was found.
-+ */
-+ public V put(double key, V value) {
-+ byte previousState;
-+ V previous = null;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ double oldKeys[] = _set;
-+ V oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new double[newCapacity];
-+ _values = (V[]) new Object[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ double o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>double</code> value
-+ * @return the value of <tt>key</tt> or (double)0 if no such mapping exists.
-+ */
-+ public V get(double key) {
-+ int index = index(key);
-+ return index < 0 ? null : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ double[] keys = _set;
-+ Object[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (double)0;
-+ vals[i] = null;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @return an <code>Object</code> value or (double)0 if no such mapping exists.
-+ */
-+ public V remove(double key) {
-+ V prev = null;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TDoubleObjectHashMap)) {
-+ return false;
-+ }
-+ TDoubleObjectHashMap that = (TDoubleObjectHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TDoubleObjectProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(double key, Object value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TDoubleObjectProcedure {
-+ private final TDoubleObjectHashMap _otherMap;
-+
-+ EqProcedure(TDoubleObjectHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(double key, Object value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two objects for equality.
-+ */
-+ private final boolean eq(Object o1, Object o2) {
-+ return o1 == o2 || ((o1 != null) && o1.equals(o2));
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = null;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public Object[] getValues() {
-+ Object[] vals = new Object[size()];
-+ V[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public double[] keys() {
-+ double[] keys = new double[size()];
-+ double[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(V val) {
-+ byte[] states = _states;
-+ V[] vals = _values;
-+
-+ // special case null values so that we don't have to
-+ // perform null checks before every call to equals()
-+ if (null == val) {
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL &&
-+ val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ } else {
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL &&
-+ (val == vals[i] || val.equals(vals[i]))) {
-+ return true;
-+ }
-+ }
-+ } // end of else
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(double key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TDoubleProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TDoubleProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TObjectProcedure<V> procedure) {
-+ byte[] states = _states;
-+ V[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TODoubleObjectProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TDoubleObjectProcedure<V> procedure) {
-+ byte[] states = _states;
-+ double[] keys = _set;
-+ V[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TDoubleObjectProcedure<V> procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ double[] keys = _set;
-+ V[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TObjectFunction</code> value
-+ */
-+ public void transformValues(TObjectFunction<V,V> function) {
-+ byte[] states = _states;
-+ V[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ double key = in.readDouble();
-+ V val = (V) in.readObject();
-+ put(key, val);
-+ }
-+ }
-+} // TDoubleObjectHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleObjectIterator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,151 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type double and Object.
-+ * <p/>
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ * <p/>
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ * <p/>
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ * <p/>
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ * <p/>
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TDoubleObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TDoubleObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TDoubleObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TDoubleObjectIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2OIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TDoubleObjectIterator<V> extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TDoubleObjectHashMap<V> _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TDoubleObjectIterator(TDoubleObjectHashMap<V> map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException
-+ * if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public double key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public V value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public V setValue(V val) {
-+ V old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TDoubleObjectIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleObjectProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type double and Object.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2OProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TDoubleObjectProcedure<T> {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>double</code> value
-+ * @param b an <code>Object</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(double a, T b);
-+}// TDoubleObjectProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,46 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures with one double paramater.
-+ *
-+ * Created: Mon Nov 5 21:45:49 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TDoubleProcedure {
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param value a value of type <code>double</code>
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(double value);
-+}// TDoubleProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleShortHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for double keys and short values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TDoubleShortHashMap extends TDoubleHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient short[] _values;
-+
-+ /**
-+ * Creates a new <code>TDoubleShortHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TDoubleShortHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleShortHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TDoubleShortHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleShortHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TDoubleShortHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleShortHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleShortHashMap(TDoubleHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleShortHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleShortHashMap(int initialCapacity, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TDoubleShortHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TDoubleShortHashMap(int initialCapacity, float loadFactor, TDoubleHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TDoubleShortHashMap m = (TDoubleShortHashMap)super.clone();
-+ m._values = (short[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TDoubleShortIterator with access to this map's keys and values
-+ */
-+ public TDoubleShortIterator iterator() {
-+ return new TDoubleShortIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new short[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @param value an <code>short</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (double)0 if none was found.
-+ */
-+ public short put(double key, short value) {
-+ byte previousState;
-+ short previous = (short)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ double oldKeys[] = _set;
-+ short oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new double[newCapacity];
-+ _values = new short[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ double o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>double</code> value
-+ * @return the value of <tt>key</tt> or (double)0 if no such mapping exists.
-+ */
-+ public short get(double key) {
-+ int index = index(key);
-+ return index < 0 ? (short)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ double[] keys = _set;
-+ short[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (double)0;
-+ vals[i] = (short)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @return an <code>short</code> value, or (double)0 if no mapping for key exists
-+ */
-+ public short remove(double key) {
-+ short prev = (short)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TDoubleShortHashMap)) {
-+ return false;
-+ }
-+ TDoubleShortHashMap that = (TDoubleShortHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TDoubleShortProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(double key, short value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TDoubleShortProcedure {
-+ private final TDoubleShortHashMap _otherMap;
-+
-+ EqProcedure(TDoubleShortHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(double key, short value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two shorts for equality.
-+ */
-+ private final boolean eq(short v1, short v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (short)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public short[] getValues() {
-+ short[] vals = new short[size()];
-+ short[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public double[] keys() {
-+ double[] keys = new double[size()];
-+ double[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>short</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(short val) {
-+ byte[] states = _states;
-+ short[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>double</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(double key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TDoubleProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TDoubleProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TShortProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TShortProcedure procedure) {
-+ byte[] states = _states;
-+ short[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TODoubleShortProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TDoubleShortProcedure procedure) {
-+ byte[] states = _states;
-+ double[] keys = _set;
-+ short[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TDoubleShortProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ double[] keys = _set;
-+ short[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TShortFunction</code> value
-+ */
-+ public void transformValues(TShortFunction function) {
-+ byte[] states = _states;
-+ short[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(double key) {
-+ return adjustValue(key, (short)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(double key, short amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ double key = in.readDouble();
-+ short val = in.readShort();
-+ put(key, val);
-+ }
-+ }
-+} // TDoubleShortHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleShortIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type double and short.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TDoubleShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TDoubleShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TDoubleShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TDoubleShortIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TDoubleShortIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TDoubleShortHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TDoubleShortIterator(TDoubleShortHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public double key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public short value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public short setValue(short val) {
-+ short old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TDoubleShortIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TDoubleShortProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type double and short.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TDoubleShortProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>double</code> value
-+ * @param b a <code>short</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(double a, short b);
-+}// TDoubleShortProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatArrayList.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,905 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.Externalizable;
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.util.Arrays;
-+import java.util.Random;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * A resizable, array-backed list of float primitives.
-+ *
-+ * Created: Sat Dec 29 14:21:12 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+
-+public class TFloatArrayList implements Externalizable, Cloneable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the data of the list */
-+ protected float[] _data;
-+
-+ /** the index after the last entry in the list */
-+ protected int _pos;
-+
-+ /** the default capacity for new lists */
-+ protected static final int DEFAULT_CAPACITY = 10;
-+
-+ /**
-+ * Creates a new <code>TFloatArrayList</code> instance with the
-+ * default capacity.
-+ */
-+ public TFloatArrayList() {
-+ this(DEFAULT_CAPACITY);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatArrayList</code> instance with the
-+ * specified capacity.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public TFloatArrayList(int capacity) {
-+ _data = new float[capacity];
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatArrayList</code> instance whose
-+ * capacity is the greater of the length of <tt>values</tt> and
-+ * DEFAULT_CAPACITY and whose initial contents are the specified
-+ * values.
-+ *
-+ * @param values an <code>float[]</code> value
-+ */
-+ public TFloatArrayList(float[] values) {
-+ this(Math.max(values.length, DEFAULT_CAPACITY));
-+ add(values);
-+ }
-+
-+ // sizing
-+
-+ /**
-+ * Grow the internal array as needed to accomodate the specified
-+ * number of elements. The size of the array floats on each
-+ * resize unless <tt>capacity</tt> requires more than twice the
-+ * current capacity.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public void ensureCapacity(int capacity) {
-+ if (capacity > _data.length) {
-+ int newCap = Math.max(_data.length << 1, capacity);
-+ float[] tmp = new float[newCap];
-+ System.arraycopy(_data, 0, tmp, 0, _data.length);
-+ _data = tmp;
-+ }
-+ }
-+
-+ /**
-+ * Returns the number of values in the list.
-+ *
-+ * @return the number of values in the list.
-+ */
-+ public int size() {
-+ return _pos;
-+ }
-+
-+ /**
-+ * Tests whether this list contains any values.
-+ *
-+ * @return true if the list is empty.
-+ */
-+ public boolean isEmpty() {
-+ return _pos == 0;
-+ }
-+
-+ /**
-+ * Sheds any excess capacity above and beyond the current size of
-+ * the list.
-+ */
-+ public void trimToSize() {
-+ if (_data.length > size()) {
-+ float[] tmp = new float[size()];
-+ toNativeArray(tmp, 0, tmp.length);
-+ _data = tmp;
-+ }
-+ }
-+
-+ // modifying
-+
-+ /**
-+ * Adds <tt>val</tt> to the end of the list, growing as needed.
-+ *
-+ * @param val an <code>float</code> value
-+ */
-+ public void add(float val) {
-+ ensureCapacity(_pos + 1);
-+ _data[_pos++] = val;
-+ }
-+
-+ /**
-+ * Adds the values in the array <tt>vals</tt> to the end of the
-+ * list, in order.
-+ *
-+ * @param vals an <code>float[]</code> value
-+ */
-+ public void add(float[] vals) {
-+ add(vals, 0, vals.length);
-+ }
-+
-+ /**
-+ * Adds a subset of the values in the array <tt>vals</tt> to the
-+ * end of the list, in order.
-+ *
-+ * @param vals an <code>float[]</code> value
-+ * @param offset the offset at which to start copying
-+ * @param length the number of values to copy.
-+ */
-+ public void add(float[] vals, int offset, int length) {
-+ ensureCapacity(_pos + length);
-+ System.arraycopy(vals, offset, _data, _pos, length);
-+ _pos += length;
-+ }
-+
-+ /**
-+ * Inserts <tt>value</tt> into the list at <tt>offset</tt>. All
-+ * values including and to the right of <tt>offset</tt> are shifted
-+ * to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param value an <code>float</code> value
-+ */
-+ public void insert(int offset, float value) {
-+ if (offset == _pos) {
-+ add(value);
-+ return;
-+ }
-+ ensureCapacity(_pos + 1);
-+ // shift right
-+ System.arraycopy(_data, offset, _data, offset + 1, _pos - offset);
-+ // insert
-+ _data[offset] = value;
-+ _pos++;
-+ }
-+
-+ /**
-+ * Inserts the array of <tt>values</tt> into the list at
-+ * <tt>offset</tt>. All values including and to the right of
-+ * <tt>offset</tt> are shifted to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param values an <code>float[]</code> value
-+ */
-+ public void insert(int offset, float[] values) {
-+ insert(offset, values, 0, values.length);
-+ }
-+
-+ /**
-+ * Inserts a slice of the array of <tt>values</tt> into the list
-+ * at <tt>offset</tt>. All values including and to the right of
-+ * <tt>offset</tt> are shifted to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param values an <code>float[]</code> value
-+ * @param valOffset the offset in the values array at which to
-+ * start copying.
-+ * @param len the number of values to copy from the values array
-+ */
-+ public void insert(int offset, float[] values, int valOffset, int len) {
-+ if (offset == _pos) {
-+ add(values, valOffset, len);
-+ return;
-+ }
-+
-+ ensureCapacity(_pos + len);
-+ // shift right
-+ System.arraycopy(_data, offset, _data, offset + len, _pos - offset);
-+ // insert
-+ System.arraycopy(values, valOffset, _data, offset, len);
-+ _pos += len;
-+ }
-+
-+ /**
-+ * Returns the value at the specified offset.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return an <code>float</code> value
-+ */
-+ public float get(int offset) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ return _data[offset];
-+ }
-+
-+ /**
-+ * Returns the value at the specified offset without doing any
-+ * bounds checking.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return an <code>float</code> value
-+ */
-+ public float getQuick(int offset) {
-+ return _data[offset];
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>float</code> value
-+ */
-+ public void set(int offset, float val) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ _data[offset] = val;
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset and returns the
-+ * previously stored value.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>float</code> value
-+ * @return the value previously stored at offset.
-+ */
-+ public float getSet(int offset, float val) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ float old = _data[offset];
-+ _data[offset] = val;
-+ return old;
-+ }
-+
-+ /**
-+ * Replace the values in the list starting at <tt>offset</tt> with
-+ * the contents of the <tt>values</tt> array.
-+ *
-+ * @param offset the first offset to replace
-+ * @param values the source of the new values
-+ */
-+ public void set(int offset, float[] values) {
-+ set(offset, values, 0, values.length);
-+ }
-+
-+ /**
-+ * Replace the values in the list starting at <tt>offset</tt> with
-+ * <tt>length</tt> values from the <tt>values</tt> array, starting
-+ * at valOffset.
-+ *
-+ * @param offset the first offset to replace
-+ * @param values the source of the new values
-+ * @param valOffset the first value to copy from the values array
-+ * @param length the number of values to copy
-+ */
-+ public void set(int offset, float[] values, int valOffset, int length) {
-+ if (offset < 0 || offset + length > _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ System.arraycopy(values, valOffset, _data, offset, length);
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset without doing any bounds
-+ * checking.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>float</code> value
-+ */
-+ public void setQuick(int offset, float val) {
-+ _data[offset] = val;
-+ }
-+
-+ /**
-+ * Flushes the internal state of the list, resetting the capacity
-+ * to the default.
-+ */
-+ public void clear() {
-+ clear(DEFAULT_CAPACITY);
-+ }
-+
-+ /**
-+ * Flushes the internal state of the list, setting the capacity of
-+ * the empty list to <tt>capacity</tt>.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public void clear(int capacity) {
-+ _data = new float[capacity];
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Sets the size of the list to 0, but does not change its
-+ * capacity. This method can be used as an alternative to the
-+ * {@link #clear clear} method if you want to recyle a list without
-+ * allocating new backing arrays.
-+ *
-+ * @see #clear
-+ */
-+ public void reset() {
-+ _pos = 0;
-+ fill((float)0);
-+ }
-+
-+ /**
-+ * Sets the size of the list to 0, but does not change its
-+ * capacity. This method can be used as an alternative to the
-+ * {@link #clear clear} method if you want to recyle a list
-+ * without allocating new backing arrays. This method differs
-+ * from {@link #reset reset} in that it does not clear the old
-+ * values in the backing array. Thus, it is possible for {@link
-+ * #getQuick getQuick} to return stale data if this method is used
-+ * and the caller is careless about bounds checking.
-+ *
-+ * @see #reset
-+ * @see #clear
-+ * @see #getQuick
-+ */
-+ public void resetQuick() {
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Removes the value at <tt>offset</tt> from the list.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return the value previously stored at offset.
-+ */
-+ public float remove(int offset) {
-+ float old = get(offset);
-+ remove(offset, 1);
-+ return old;
-+ }
-+
-+ /**
-+ * Removes <tt>length</tt> values from the list, starting at
-+ * <tt>offset</tt>
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param length an <code>int</code> value
-+ */
-+ public void remove(int offset, int length) {
-+ if (offset < 0 || offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+
-+ if (offset == 0) {
-+ // data at the front
-+ System.arraycopy(_data, length, _data, 0, _pos - length);
-+ } else if (_pos - length == offset) {
-+ // no copy to make, decrementing pos "deletes" values at
-+ // the end
-+ } else {
-+ // data in the middle
-+ System.arraycopy(_data, offset + length,
-+ _data, offset, _pos - (offset + length));
-+ }
-+ _pos -= length;
-+ // no need to clear old values beyond _pos, because this is a
-+ // primitive collection and 0 takes as much room as any other
-+ // value
-+ }
-+
-+ /**
-+ * Transform each value in the list using the specified function.
-+ *
-+ * @param function a <code>TFloatFunction</code> value
-+ */
-+ public void transformValues(TFloatFunction function) {
-+ for (int i = _pos; i-- > 0;) {
-+ _data[i] = function.execute(_data[i]);
-+ }
-+ }
-+
-+ /**
-+ * Reverse the order of the elements in the list.
-+ */
-+ public void reverse() {
-+ reverse(0, _pos);
-+ }
-+
-+ /**
-+ * Reverse the order of the elements in the range of the list.
-+ *
-+ * @param from the inclusive index at which to start reversing
-+ * @param to the exclusive index at which to stop reversing
-+ */
-+ public void reverse(int from, int to) {
-+ if (from == to) {
-+ return; // nothing to do
-+ }
-+ if (from > to) {
-+ throw new IllegalArgumentException("from cannot be greater than to");
-+ }
-+ for (int i = from, j = to - 1; i < j; i++, j--) {
-+ swap(i, j);
-+ }
-+ }
-+
-+ /**
-+ * Shuffle the elements of the list using the specified random
-+ * number generator.
-+ *
-+ * @param rand a <code>Random</code> value
-+ */
-+ public void shuffle(Random rand) {
-+ for (int i = _pos; i-- > 1;) {
-+ swap(i, rand.nextInt(i));
-+ }
-+ }
-+
-+ /**
-+ * Swap the values at offsets <tt>i</tt> and <tt>j</tt>.
-+ *
-+ * @param i an offset into the data array
-+ * @param j an offset into the data array
-+ */
-+ private final void swap(int i, int j) {
-+ float tmp = _data[i];
-+ _data[i] = _data[j];
-+ _data[j] = tmp;
-+ }
-+
-+ // copying
-+
-+ /**
-+ * Returns a clone of this list. Since this is a primitive
-+ * collection, this will be a deep clone.
-+ *
-+ * @return a deep clone of the list.
-+ */
-+ public Object clone() {
-+ TFloatArrayList list = null;
-+ try {
-+ list = (TFloatArrayList) super.clone();
-+ list._data = toNativeArray();
-+ } catch (CloneNotSupportedException e) {
-+ // it's supported
-+ } // end of try-catch
-+ return list;
-+ }
-+
-+ /**
-+ * Copies the contents of the list into a native array.
-+ *
-+ * @return an <code>float[]</code> value
-+ */
-+ public float[] toNativeArray() {
-+ return toNativeArray(0, _pos);
-+ }
-+
-+ /**
-+ * Copies a slice of the list into a native array.
-+ *
-+ * @param offset the offset at which to start copying
-+ * @param len the number of values to copy.
-+ * @return an <code>float[]</code> value
-+ */
-+ public float[] toNativeArray(int offset, int len) {
-+ float[] rv = new float[len];
-+ toNativeArray(rv, offset, len);
-+ return rv;
-+ }
-+
-+ /**
-+ * Copies a slice of the list into a native array.
-+ *
-+ * @param dest the array to copy into.
-+ * @param offset the offset of the first value to copy
-+ * @param len the number of values to copy.
-+ */
-+ public void toNativeArray(float[] dest, int offset, int len) {
-+ if (len == 0) {
-+ return; // nothing to copy
-+ }
-+ if (offset < 0 || offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ System.arraycopy(_data, offset, dest, 0, len);
-+ }
-+
-+ // comparing
-+
-+ /**
-+ * Compares this list to another list, value by value.
-+ *
-+ * @param other the object to compare against
-+ * @return true if other is a TFloatArrayList and has exactly the
-+ * same values.
-+ */
-+ public boolean equals(Object other) {
-+ if (other == this) {
-+ return true;
-+ } else if (other instanceof TFloatArrayList) {
-+ TFloatArrayList that = (TFloatArrayList)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ } else {
-+ for (int i = _pos; i-- > 0;) {
-+ if (this._data[i] != that._data[i]) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public int hashCode() {
-+ int h = 0;
-+ for (int i = _pos; i-- > 0;) {
-+ h += HashFunctions.hash(_data[i]);
-+ }
-+ return h;
-+ }
-+
-+ // procedures
-+
-+ /**
-+ * Applies the procedure to each value in the list in ascending
-+ * (front to back) order.
-+ *
-+ * @param procedure a <code>TFloatProcedure</code> value
-+ * @return true if the procedure did not terminate prematurely.
-+ */
-+ public boolean forEach(TFloatProcedure procedure) {
-+ for (int i = 0; i < _pos; i++) {
-+ if (! procedure.execute(_data[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Applies the procedure to each value in the list in descending
-+ * (back to front) order.
-+ *
-+ * @param procedure a <code>TFloatProcedure</code> value
-+ * @return true if the procedure did not terminate prematurely.
-+ */
-+ public boolean forEachDescending(TFloatProcedure procedure) {
-+ for (int i = _pos; i-- > 0;) {
-+ if (! procedure.execute(_data[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ // sorting
-+
-+ /**
-+ * Sort the values in the list (ascending) using the Sun quicksort
-+ * implementation.
-+ *
-+ * @see java.util.Arrays#sort
-+ */
-+ public void sort() {
-+ Arrays.sort(_data, 0, _pos);
-+ }
-+
-+ /**
-+ * Sort a slice of the list (ascending) using the Sun quicksort
-+ * implementation.
-+ *
-+ * @param fromIndex the index at which to start sorting (inclusive)
-+ * @param toIndex the index at which to stop sorting (exclusive)
-+ * @see java.util.Arrays#sort
-+ */
-+ public void sort(int fromIndex, int toIndex) {
-+ Arrays.sort(_data, fromIndex, toIndex);
-+ }
-+
-+ // filling
-+
-+ /**
-+ * Fills every slot in the list with the specified value.
-+ *
-+ * @param val the value to use when filling
-+ */
-+ public void fill(float val) {
-+ Arrays.fill(_data, 0, _pos, val);
-+ }
-+
-+ /**
-+ * Fills a range in the list with the specified value.
-+ *
-+ * @param fromIndex the offset at which to start filling (inclusive)
-+ * @param toIndex the offset at which to stop filling (exclusive)
-+ * @param val the value to use when filling
-+ */
-+ public void fill(int fromIndex, int toIndex, float val) {
-+ if (toIndex > _pos) {
-+ ensureCapacity(toIndex);
-+ _pos = toIndex;
-+ }
-+ Arrays.fill(_data, fromIndex, toIndex, val);
-+ }
-+
-+ // searching
-+
-+ /**
-+ * Performs a binary search for <tt>value</tt> in the entire list.
-+ * Note that you <b>must</b> @{link #sort sort} the list before
-+ * doing a search.
-+ *
-+ * @param value the value to search for
-+ * @return the absolute offset in the list of the value, or its
-+ * negative insertion point into the sorted list.
-+ */
-+ public int binarySearch(float value) {
-+ return binarySearch(value, 0, _pos);
-+ }
-+
-+ /**
-+ * Performs a binary search for <tt>value</tt> in the specified
-+ * range. Note that you <b>must</b> @{link #sort sort} the list
-+ * or the range before doing a search.
-+ *
-+ * @param value the value to search for
-+ * @param fromIndex the lower boundary of the range (inclusive)
-+ * @param toIndex the upper boundary of the range (exclusive)
-+ * @return the absolute offset in the list of the value, or its
-+ * negative insertion point into the sorted list.
-+ */
-+ public int binarySearch(float value, int fromIndex, int toIndex) {
-+ if (fromIndex < 0) {
-+ throw new ArrayIndexOutOfBoundsException(fromIndex);
-+ }
-+ if (toIndex > _pos) {
-+ throw new ArrayIndexOutOfBoundsException(toIndex);
-+ }
-+
-+ int low = fromIndex;
-+ int high = toIndex - 1;
-+
-+ while (low <= high) {
-+ int mid = (low + high) >> 1;
-+ float midVal = _data[mid];
-+
-+ if (midVal < value) {
-+ low = mid + 1;
-+ } else if (midVal > value) {
-+ high = mid - 1;
-+ } else {
-+ return mid; // value found
-+ }
-+ }
-+ return -(low + 1); // value not found.
-+ }
-+
-+ /**
-+ * Searches the list front to back for the index of
-+ * <tt>value</tt>.
-+ *
-+ * @param value an <code>float</code> value
-+ * @return the first offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int indexOf(float value) {
-+ return indexOf(0, value);
-+ }
-+
-+ /**
-+ * Searches the list front to back for the index of
-+ * <tt>value</tt>, starting at <tt>offset</tt>.
-+ *
-+ * @param offset the offset at which to start the linear search
-+ * (inclusive)
-+ * @param value an <code>float</code> value
-+ * @return the first offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int indexOf(int offset, float value) {
-+ for (int i = offset; i < _pos; i++) {
-+ if (_data[i] == value) {
-+ return i;
-+ }
-+ }
-+ return -1;
-+ }
-+
-+ /**
-+ * Searches the list back to front for the last index of
-+ * <tt>value</tt>.
-+ *
-+ * @param value an <code>float</code> value
-+ * @return the last offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int lastIndexOf(float value) {
-+ return lastIndexOf(_pos, value);
-+ }
-+
-+ /**
-+ * Searches the list back to front for the last index of
-+ * <tt>value</tt>, starting at <tt>offset</tt>.
-+ *
-+ * @param offset the offset at which to start the linear search
-+ * (exclusive)
-+ * @param value an <code>float</code> value
-+ * @return the last offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int lastIndexOf(int offset, float value) {
-+ for (int i = offset; i-- > 0;) {
-+ if (_data[i] == value) {
-+ return i;
-+ }
-+ }
-+ return -1;
-+ }
-+
-+ /**
-+ * Searches the list for <tt>value</tt>
-+ *
-+ * @param value an <code>float</code> value
-+ * @return true if value is in the list.
-+ */
-+ public boolean contains(float value) {
-+ return lastIndexOf(value) >= 0;
-+ }
-+
-+ /**
-+ * Searches the list for values satisfying <tt>condition</tt> in
-+ * the manner of the *nix <tt>grep</tt> utility.
-+ *
-+ * @param condition a condition to apply to each element in the list
-+ * @return a list of values which match the condition.
-+ */
-+ public TFloatArrayList grep(TFloatProcedure condition) {
-+ TFloatArrayList list = new TFloatArrayList();
-+ for (int i = 0; i < _pos; i++) {
-+ if (condition.execute(_data[i])) {
-+ list.add(_data[i]);
-+ }
-+ }
-+ return list;
-+ }
-+
-+ /**
-+ * Searches the list for values which do <b>not</b> satisfy
-+ * <tt>condition</tt>. This is akin to *nix <code>grep -v</code>.
-+ *
-+ * @param condition a condition to apply to each element in the list
-+ * @return a list of values which do not match the condition.
-+ */
-+ public TFloatArrayList inverseGrep(TFloatProcedure condition) {
-+ TFloatArrayList list = new TFloatArrayList();
-+ for (int i = 0; i < _pos; i++) {
-+ if (! condition.execute(_data[i])) {
-+ list.add(_data[i]);
-+ }
-+ }
-+ return list;
-+ }
-+
-+ /**
-+ * Finds the maximum value in the list.
-+ *
-+ * @return the largest value in the list.
-+ * @exception IllegalStateException if the list is empty
-+ */
-+ public float max() {
-+ if (size() == 0) {
-+ throw new IllegalStateException("cannot find maximum of an empty list");
-+ }
-+ float max = _data[_pos - 1];
-+ for (int i = _pos - 1; i-- > 0;) {
-+ if ( _data[_pos] > max ) {
-+ max = _data[_pos];
-+ }
-+ }
-+ return max;
-+ }
-+
-+ /**
-+ * Finds the minimum value in the list.
-+ *
-+ * @return the smallest value in the list.
-+ * @exception IllegalStateException if the list is empty
-+ */
-+ public float min() {
-+ if (size() == 0) {
-+ throw new IllegalStateException("cannot find minimum of an empty list");
-+ }
-+ float min = _data[_pos - 1];
-+ for (int i = _pos - 1; i-- > 0;) {
-+ if ( _data[_pos] > min ) {
-+ min = _data[_pos];
-+ }
-+ }
-+ return min;
-+ }
-+
-+ // stringification
-+
-+ /**
-+ * Returns a String representation of the list, front to back.
-+ *
-+ * @return a <code>String</code> value
-+ */
-+ public String toString() {
-+ final StringBuffer buf = new StringBuffer("{");
-+ for (int i = 0, end = _pos - 1; i < end; i++) {
-+ buf.append(_data[i]);
-+ buf.append(", ");
-+ }
-+ if (size() > 0) {
-+ buf.append(_data[_pos - 1]);
-+ }
-+ buf.append("}");
-+ return buf.toString();
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // POSITION
-+ out.writeInt( _pos );
-+
-+ // ENTRIES
-+ int len = _data.length;
-+ out.writeInt( len );
-+ for( int i = 0; i < len; i++ ) {
-+ out.writeFloat( _data[ i ] );
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // POSITION
-+ _pos = in.readInt();
-+
-+ // ENTRIES
-+ int len = in.readInt();
-+ _data = new float[ len ];
-+ for( int i = 0; i < len; i++ ) {
-+ _data[ i ] = in.readFloat();
-+ }
-+ }
-+} // TFloatArrayList
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatByteHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for float keys and byte values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TFloatByteHashMap extends TFloatHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient byte[] _values;
-+
-+ /**
-+ * Creates a new <code>TFloatByteHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TFloatByteHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatByteHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TFloatByteHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatByteHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TFloatByteHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatByteHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatByteHashMap(TFloatHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatByteHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatByteHashMap(int initialCapacity, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatByteHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatByteHashMap(int initialCapacity, float loadFactor, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TFloatByteHashMap m = (TFloatByteHashMap)super.clone();
-+ m._values = (byte[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TFloatByteIterator with access to this map's keys and values
-+ */
-+ public TFloatByteIterator iterator() {
-+ return new TFloatByteIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new byte[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @param value an <code>byte</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (float)0 if none was found.
-+ */
-+ public byte put(float key, byte value) {
-+ byte previousState;
-+ byte previous = (byte)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ float oldKeys[] = _set;
-+ byte oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new float[newCapacity];
-+ _values = new byte[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ float o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>float</code> value
-+ * @return the value of <tt>key</tt> or (float)0 if no such mapping exists.
-+ */
-+ public byte get(float key) {
-+ int index = index(key);
-+ return index < 0 ? (byte)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ float[] keys = _set;
-+ byte[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (float)0;
-+ vals[i] = (byte)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @return an <code>byte</code> value, or (float)0 if no mapping for key exists
-+ */
-+ public byte remove(float key) {
-+ byte prev = (byte)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TFloatByteHashMap)) {
-+ return false;
-+ }
-+ TFloatByteHashMap that = (TFloatByteHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TFloatByteProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(float key, byte value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TFloatByteProcedure {
-+ private final TFloatByteHashMap _otherMap;
-+
-+ EqProcedure(TFloatByteHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(float key, byte value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two bytes for equality.
-+ */
-+ private final boolean eq(byte v1, byte v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (byte)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public byte[] getValues() {
-+ byte[] vals = new byte[size()];
-+ byte[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public float[] keys() {
-+ float[] keys = new float[size()];
-+ float[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>byte</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(byte val) {
-+ byte[] states = _states;
-+ byte[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(float key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TFloatProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TFloatProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TByteProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TByteProcedure procedure) {
-+ byte[] states = _states;
-+ byte[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOFloatByteProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TFloatByteProcedure procedure) {
-+ byte[] states = _states;
-+ float[] keys = _set;
-+ byte[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TFloatByteProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ float[] keys = _set;
-+ byte[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TByteFunction</code> value
-+ */
-+ public void transformValues(TByteFunction function) {
-+ byte[] states = _states;
-+ byte[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(float key) {
-+ return adjustValue(key, (byte)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(float key, byte amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ float key = in.readFloat();
-+ byte val = in.readByte();
-+ put(key, val);
-+ }
-+ }
-+} // TFloatByteHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatByteIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type float and byte.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TFloatByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TFloatByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TFloatByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TFloatByteIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TFloatByteIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TFloatByteHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TFloatByteIterator(TFloatByteHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public float key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public byte value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public byte setValue(byte val) {
-+ byte old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TFloatByteIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatByteProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type float and byte.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TFloatByteProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>float</code> value
-+ * @param b a <code>byte</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(float a, byte b);
-+}// TFloatByteProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatDoubleHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for float keys and double values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TFloatDoubleHashMap extends TFloatHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient double[] _values;
-+
-+ /**
-+ * Creates a new <code>TFloatDoubleHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TFloatDoubleHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatDoubleHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TFloatDoubleHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatDoubleHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TFloatDoubleHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatDoubleHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatDoubleHashMap(TFloatHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatDoubleHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatDoubleHashMap(int initialCapacity, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatDoubleHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatDoubleHashMap(int initialCapacity, float loadFactor, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TFloatDoubleHashMap m = (TFloatDoubleHashMap)super.clone();
-+ m._values = (double[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TFloatDoubleIterator with access to this map's keys and values
-+ */
-+ public TFloatDoubleIterator iterator() {
-+ return new TFloatDoubleIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new double[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @param value an <code>double</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (float)0 if none was found.
-+ */
-+ public double put(float key, double value) {
-+ byte previousState;
-+ double previous = (double)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ float oldKeys[] = _set;
-+ double oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new float[newCapacity];
-+ _values = new double[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ float o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>float</code> value
-+ * @return the value of <tt>key</tt> or (float)0 if no such mapping exists.
-+ */
-+ public double get(float key) {
-+ int index = index(key);
-+ return index < 0 ? (double)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ float[] keys = _set;
-+ double[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (float)0;
-+ vals[i] = (double)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @return an <code>double</code> value, or (float)0 if no mapping for key exists
-+ */
-+ public double remove(float key) {
-+ double prev = (double)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TFloatDoubleHashMap)) {
-+ return false;
-+ }
-+ TFloatDoubleHashMap that = (TFloatDoubleHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TFloatDoubleProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(float key, double value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TFloatDoubleProcedure {
-+ private final TFloatDoubleHashMap _otherMap;
-+
-+ EqProcedure(TFloatDoubleHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(float key, double value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two doubles for equality.
-+ */
-+ private final boolean eq(double v1, double v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (double)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public double[] getValues() {
-+ double[] vals = new double[size()];
-+ double[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public float[] keys() {
-+ float[] keys = new float[size()];
-+ float[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>double</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(double val) {
-+ byte[] states = _states;
-+ double[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(float key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TFloatProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TFloatProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TDoubleProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TDoubleProcedure procedure) {
-+ byte[] states = _states;
-+ double[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOFloatDoubleProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TFloatDoubleProcedure procedure) {
-+ byte[] states = _states;
-+ float[] keys = _set;
-+ double[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TFloatDoubleProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ float[] keys = _set;
-+ double[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TDoubleFunction</code> value
-+ */
-+ public void transformValues(TDoubleFunction function) {
-+ byte[] states = _states;
-+ double[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(float key) {
-+ return adjustValue(key, (double)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(float key, double amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ float key = in.readFloat();
-+ double val = in.readDouble();
-+ put(key, val);
-+ }
-+ }
-+} // TFloatDoubleHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatDoubleIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type float and double.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TFloatDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TFloatDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TFloatDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TFloatDoubleIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TFloatDoubleIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TFloatDoubleHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TFloatDoubleIterator(TFloatDoubleHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public float key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public double value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public double setValue(double val) {
-+ double old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TFloatDoubleIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatDoubleProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type float and double.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TFloatDoubleProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>float</code> value
-+ * @param b a <code>double</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(float a, double b);
-+}// TFloatDoubleProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatFloatHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for float keys and float values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TFloatFloatHashMap extends TFloatHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient float[] _values;
-+
-+ /**
-+ * Creates a new <code>TFloatFloatHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TFloatFloatHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatFloatHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TFloatFloatHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatFloatHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TFloatFloatHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatFloatHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatFloatHashMap(TFloatHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatFloatHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatFloatHashMap(int initialCapacity, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatFloatHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatFloatHashMap(int initialCapacity, float loadFactor, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TFloatFloatHashMap m = (TFloatFloatHashMap)super.clone();
-+ m._values = (float[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TFloatFloatIterator with access to this map's keys and values
-+ */
-+ public TFloatFloatIterator iterator() {
-+ return new TFloatFloatIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new float[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @param value an <code>float</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (float)0 if none was found.
-+ */
-+ public float put(float key, float value) {
-+ byte previousState;
-+ float previous = (float)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ float oldKeys[] = _set;
-+ float oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new float[newCapacity];
-+ _values = new float[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ float o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>float</code> value
-+ * @return the value of <tt>key</tt> or (float)0 if no such mapping exists.
-+ */
-+ public float get(float key) {
-+ int index = index(key);
-+ return index < 0 ? (float)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ float[] keys = _set;
-+ float[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (float)0;
-+ vals[i] = (float)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @return an <code>float</code> value, or (float)0 if no mapping for key exists
-+ */
-+ public float remove(float key) {
-+ float prev = (float)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TFloatFloatHashMap)) {
-+ return false;
-+ }
-+ TFloatFloatHashMap that = (TFloatFloatHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TFloatFloatProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(float key, float value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TFloatFloatProcedure {
-+ private final TFloatFloatHashMap _otherMap;
-+
-+ EqProcedure(TFloatFloatHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(float key, float value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two floats for equality.
-+ */
-+ private final boolean eq(float v1, float v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (float)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public float[] getValues() {
-+ float[] vals = new float[size()];
-+ float[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public float[] keys() {
-+ float[] keys = new float[size()];
-+ float[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>float</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(float val) {
-+ byte[] states = _states;
-+ float[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(float key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TFloatProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TFloatProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TFloatProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TFloatProcedure procedure) {
-+ byte[] states = _states;
-+ float[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOFloatFloatProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TFloatFloatProcedure procedure) {
-+ byte[] states = _states;
-+ float[] keys = _set;
-+ float[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TFloatFloatProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ float[] keys = _set;
-+ float[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TFloatFunction</code> value
-+ */
-+ public void transformValues(TFloatFunction function) {
-+ byte[] states = _states;
-+ float[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(float key) {
-+ return adjustValue(key, (float)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(float key, float amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ float key = in.readFloat();
-+ float val = in.readFloat();
-+ put(key, val);
-+ }
-+ }
-+} // TFloatFloatHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatFloatIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type float and float.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TFloatFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TFloatFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TFloatFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TFloatFloatIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TFloatFloatIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TFloatFloatHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TFloatFloatIterator(TFloatFloatHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public float key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public float value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public float setValue(float val) {
-+ float old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TFloatFloatIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatFloatProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type float and float.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TFloatFloatProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>float</code> value
-+ * @param b a <code>float</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(float a, float b);
-+}// TFloatFloatProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatFunction.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,43 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for functions that accept and return one float primitive.
-+ *
-+ * Created: Mon Nov 5 22:19:36 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PFunction.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TFloatFunction {
-+ /**
-+ * Execute this function with <tt>value</tt>
-+ *
-+ * @param value a <code>float</code> input
-+ * @return a <code>float</code> result
-+ */
-+ public float execute(float value);
-+}// TFloatFunction
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatHash.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,289 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed hashing implementation for float primitives.
-+ *
-+ * Created: Sun Nov 4 08:56:06 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PHash.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+abstract public class TFloatHash extends TPrimitiveHash implements TFloatHashingStrategy {
-+
-+ /** the set of floats */
-+ protected transient float[] _set;
-+
-+ /** strategy used to hash values in this collection */
-+ protected TFloatHashingStrategy _hashingStrategy;
-+
-+ /**
-+ * Creates a new <code>TFloatHash</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TFloatHash() {
-+ super();
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TFloatHash(int initialCapacity) {
-+ super(initialCapacity);
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ */
-+ public TFloatHash(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatHash</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatHash(TFloatHashingStrategy strategy) {
-+ super();
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatHash(int initialCapacity, TFloatHashingStrategy strategy) {
-+ super(initialCapacity);
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatHash(int initialCapacity, float loadFactor, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor);
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TFloatHash h = (TFloatHash)super.clone();
-+ h._set = (float[])this._set.clone();
-+ return h;
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _set = new float[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Searches the set for <tt>val</tt>
-+ *
-+ * @param val an <code>float</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean contains(float val) {
-+ return index(val) >= 0;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each element in the set.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the set terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEach(TFloatProcedure procedure) {
-+ byte[] states = _states;
-+ float[] set = _set;
-+ for (int i = set.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(set[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Releases the element currently stored at <tt>index</tt>.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _set[index] = (float)0;
-+ super.removeAt(index);
-+ }
-+
-+ /**
-+ * Locates the index of <tt>val</tt>.
-+ *
-+ * @param val an <code>float</code> value
-+ * @return the index of <tt>val</tt> or -1 if it isn't in the set.
-+ */
-+ protected int index(float val) {
-+ int hash, probe, index, length;
-+ float[] set;
-+ byte[] states;
-+
-+ states = _states;
-+ set = _set;
-+ length = states.length;
-+ hash = _hashingStrategy.computeHashCode(val) & 0x7fffffff;
-+ index = hash % length;
-+
-+ if (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val)) {
-+ // see Knuth, p. 529
-+ probe = 1 + (hash % (length - 2));
-+
-+ do {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ } while (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val));
-+ }
-+
-+ return states[index] == FREE ? -1 : index;
-+ }
-+
-+ /**
-+ * Locates the index at which <tt>val</tt> can be inserted. if
-+ * there is already a value equal()ing <tt>val</tt> in the set,
-+ * returns that value as a negative integer.
-+ *
-+ * @param val an <code>float</code> value
-+ * @return an <code>int</code> value
-+ */
-+ protected int insertionIndex(float val) {
-+ int hash, probe, index, length;
-+ float[] set;
-+ byte[] states;
-+
-+ states = _states;
-+ set = _set;
-+ length = states.length;
-+ hash = _hashingStrategy.computeHashCode(val) & 0x7fffffff;
-+ index = hash % length;
-+
-+ if (states[index] == FREE) {
-+ return index; // empty, all done
-+ } else if (states[index] == FULL && set[index] == val) {
-+ return -index -1; // already stored
-+ } else { // already FULL or REMOVED, must probe
-+ // compute the double hash
-+ probe = 1 + (hash % (length - 2));
-+
-+ // if the slot we landed on is FULL (but not removed), probe
-+ // until we find an empty slot, a REMOVED slot, or an element
-+ // equal to the one we are trying to insert.
-+ // finding an empty slot means that the value is not present
-+ // and that we should use that slot as the insertion point;
-+ // finding a REMOVED slot means that we need to keep searching,
-+ // however we want to remember the offset of that REMOVED slot
-+ // so we can reuse it in case a "new" insertion (i.e. not an update)
-+ // is possible.
-+ // finding a matching value means that we've found that our desired
-+ // key is already in the table
-+
-+ if (states[index] != REMOVED) {
-+ // starting at the natural offset, probe until we find an
-+ // offset that isn't full.
-+ do {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ } while (states[index] == FULL && set[index] != val);
-+ }
-+
-+ // if the index we found was removed: continue probing until we
-+ // locate a free location or an element which equal()s the
-+ // one we have.
-+ if (states[index] == REMOVED) {
-+ int firstRemoved = index;
-+ while (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val)) {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ }
-+ return states[index] == FULL ? -index -1 : firstRemoved;
-+ }
-+ // if it's full, the key is already stored
-+ return states[index] == FULL ? -index -1 : index;
-+ }
-+ }
-+
-+ /**
-+ * Default implementation of TFloatHashingStrategy:
-+ * delegates hashing to HashFunctions.hash(float).
-+ *
-+ * @param val the value to hash
-+ * @return the hashcode.
-+ */
-+ public final int computeHashCode(float val) {
-+ return HashFunctions.hash(val);
-+ }
-+} // TFloatHash
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatHashingStrategy.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,49 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.Serializable;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface to support pluggable hashing strategies in maps and sets.
-+ * Implementors can use this interface to make the trove hashing
-+ * algorithms use an optimal strategy when computing hashcodes.
-+ *
-+ * Created: Sun Nov 4 08:56:06 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PHashingStrategy.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TFloatHashingStrategy extends Serializable {
-+ /**
-+ * Computes a hash code for the specified float. Implementors
-+ * can use the float's own value or a custom scheme designed to
-+ * minimize collisions for a known set of input.
-+ *
-+ * @param val float for which the hashcode is to be computed
-+ * @return the hashCode
-+ */
-+ public int computeHashCode(float val);
-+} // TFloatHashingStrategy
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatHashSet.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,371 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+import java.util.Arrays;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed set implementation for float primitives.
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+
-+public class TFloatHashSet extends TFloatHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /**
-+ * Creates a new <code>TFloatHashSet</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TFloatHashSet() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatHashSet</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TFloatHashSet(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatHashSet</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TFloatHashSet(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatHashSet</code> instance containing the
-+ * elements of <tt>array</tt>.
-+ *
-+ * @param array an array of <code>float</code> primitives
-+ */
-+ public TFloatHashSet(float[] array) {
-+ this(array.length);
-+ addAll(array);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatHash</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatHashSet(TFloatHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatHashSet(int initialCapacity, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatHashSet(int initialCapacity, float loadFactor, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatHashSet</code> instance containing the
-+ * elements of <tt>array</tt>.
-+ *
-+ * @param array an array of <code>float</code> primitives
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatHashSet(float[] array, TFloatHashingStrategy strategy) {
-+ this(array.length, strategy);
-+ addAll(array);
-+ }
-+
-+ /**
-+ * @return a TFloatIterator with access to the values in this set
-+ */
-+ public TFloatIterator iterator() {
-+ return new TFloatIterator(this);
-+ }
-+
-+ /**
-+ * Inserts a value into the set.
-+ *
-+ * @param val an <code>float</code> value
-+ * @return true if the set was modified by the add operation
-+ */
-+ public boolean add(float val) {
-+ int index = insertionIndex(val);
-+
-+ if (index < 0) {
-+ return false; // already present in set, nothing to add
-+ }
-+
-+ byte previousState = _states[index];
-+ _set[index] = val;
-+ _states[index] = FULL;
-+ postInsertHook(previousState == FREE);
-+
-+ return true; // yes, we added something
-+ }
-+
-+ /**
-+ * Expands the set to accomodate new values.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ float oldSet[] = _set;
-+ byte oldStates[] = _states;
-+
-+ _set = new float[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ float o = oldSet[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Returns a new array containing the values in the set.
-+ *
-+ * @return an <code>float[]</code> value
-+ */
-+ public float[] toArray() {
-+ float[] result = new float[size()];
-+ float[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = states.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ result[j++] = set[i];
-+ }
-+ }
-+ return result;
-+ }
-+
-+ /**
-+ * Empties the set.
-+ */
-+ public void clear() {
-+ super.clear();
-+ float[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = set.length; i-- > 0;) {
-+ set[i] = (float)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Compares this set with another set for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TFloatHashSet)) {
-+ return false;
-+ }
-+ final TFloatHashSet that = (TFloatHashSet)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEach(new TFloatProcedure() {
-+ public final boolean execute(float value) {
-+ return that.contains(value);
-+ }
-+ });
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEach(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TFloatProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(float key) {
-+ h += _hashingStrategy.computeHashCode(key);
-+ return true;
-+ }
-+ }
-+
-+ /**
-+ * Removes <tt>val</tt> from the set.
-+ *
-+ * @param val an <code>float</code> value
-+ * @return true if the set was modified by the remove operation.
-+ */
-+ public boolean remove(float val) {
-+ int index = index(val);
-+ if (index >= 0) {
-+ removeAt(index);
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Tests the set to determine if all of the elements in
-+ * <tt>array</tt> are present.
-+ *
-+ * @param array an <code>array</code> of float primitives.
-+ * @return true if all elements were present in the set.
-+ */
-+ public boolean containsAll(float[] array) {
-+ for (int i = array.length; i-- > 0;) {
-+ if (! contains(array[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Adds all of the elements in <tt>array</tt> to the set.
-+ *
-+ * @param array an <code>array</code> of float primitives.
-+ * @return true if the set was modified by the add all operation.
-+ */
-+ public boolean addAll(float[] array) {
-+ boolean changed = false;
-+ for (int i = array.length; i-- > 0;) {
-+ if (add(array[i])) {
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+ /**
-+ * Removes all of the elements in <tt>array</tt> from the set.
-+ *
-+ * @param array an <code>array</code> of float primitives.
-+ * @return true if the set was modified by the remove all operation.
-+ */
-+ public boolean removeAll(float[] array) {
-+ boolean changed = false;
-+ for (int i = array.length; i-- > 0;) {
-+ if (remove(array[i])) {
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+ /**
-+ * Removes any values in the set which are not contained in
-+ * <tt>array</tt>.
-+ *
-+ * @param array an <code>array</code> of float primitives.
-+ * @return true if the set was modified by the retain all operation
-+ */
-+ public boolean retainAll(float[] array) {
-+ boolean changed = false;
-+ Arrays.sort(array);
-+ float[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = set.length; i-- > 0;) {
-+ if (states[i] == FULL && (Arrays.binarySearch(array,set[i]) < 0)) {
-+ remove(set[i]);
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure(out);
-+ if (! forEach(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+
-+ // ENTRIES
-+ setUp(size);
-+ while (size-- > 0) {
-+ float val = in.readFloat();
-+ add(val);
-+ }
-+ }
-+} // TFloatHashSet
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatIntHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for float keys and int values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TFloatIntHashMap extends TFloatHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient int[] _values;
-+
-+ /**
-+ * Creates a new <code>TFloatIntHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TFloatIntHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatIntHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TFloatIntHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatIntHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TFloatIntHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatIntHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatIntHashMap(TFloatHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatIntHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatIntHashMap(int initialCapacity, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatIntHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatIntHashMap(int initialCapacity, float loadFactor, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TFloatIntHashMap m = (TFloatIntHashMap)super.clone();
-+ m._values = (int[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TFloatIntIterator with access to this map's keys and values
-+ */
-+ public TFloatIntIterator iterator() {
-+ return new TFloatIntIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new int[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @param value an <code>int</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (float)0 if none was found.
-+ */
-+ public int put(float key, int value) {
-+ byte previousState;
-+ int previous = (int)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ float oldKeys[] = _set;
-+ int oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new float[newCapacity];
-+ _values = new int[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ float o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>float</code> value
-+ * @return the value of <tt>key</tt> or (float)0 if no such mapping exists.
-+ */
-+ public int get(float key) {
-+ int index = index(key);
-+ return index < 0 ? (int)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ float[] keys = _set;
-+ int[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (float)0;
-+ vals[i] = (int)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @return an <code>int</code> value, or (float)0 if no mapping for key exists
-+ */
-+ public int remove(float key) {
-+ int prev = (int)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TFloatIntHashMap)) {
-+ return false;
-+ }
-+ TFloatIntHashMap that = (TFloatIntHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TFloatIntProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(float key, int value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TFloatIntProcedure {
-+ private final TFloatIntHashMap _otherMap;
-+
-+ EqProcedure(TFloatIntHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(float key, int value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two ints for equality.
-+ */
-+ private final boolean eq(int v1, int v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (int)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public int[] getValues() {
-+ int[] vals = new int[size()];
-+ int[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public float[] keys() {
-+ float[] keys = new float[size()];
-+ float[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>int</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(int val) {
-+ byte[] states = _states;
-+ int[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(float key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TFloatProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TFloatProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TIntProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TIntProcedure procedure) {
-+ byte[] states = _states;
-+ int[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOFloatIntProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TFloatIntProcedure procedure) {
-+ byte[] states = _states;
-+ float[] keys = _set;
-+ int[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TFloatIntProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ float[] keys = _set;
-+ int[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TIntFunction</code> value
-+ */
-+ public void transformValues(TIntFunction function) {
-+ byte[] states = _states;
-+ int[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(float key) {
-+ return adjustValue(key, (int)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(float key, int amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ float key = in.readFloat();
-+ int val = in.readInt();
-+ put(key, val);
-+ }
-+ }
-+} // TFloatIntHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatIntIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type float and int.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TFloatIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TFloatIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TFloatIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TFloatIntIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TFloatIntIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TFloatIntHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TFloatIntIterator(TFloatIntHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public float key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public int value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public int setValue(int val) {
-+ int old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TFloatIntIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatIntProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type float and int.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TFloatIntProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>float</code> value
-+ * @param b a <code>int</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(float a, int b);
-+}// TFloatIntProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,56 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for float collections.
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TFloatIterator extends TPrimitiveIterator {
-+ /** the collection on which the iterator operates */
-+ private final TFloatHash _hash;
-+
-+ /**
-+ * Creates a TFloatIterator for the elements in the specified collection.
-+ */
-+ public TFloatIterator(TFloatHash hash) {
-+ super(hash);
-+ this._hash = hash;
-+ }
-+
-+ /**
-+ * Advances the iterator to the next element in the underlying collection
-+ * and returns it.
-+ *
-+ * @return the next float in the collection
-+ * @exception NoSuchElementException if the iterator is already exhausted
-+ */
-+ public float next() {
-+ moveToNextIndex();
-+ return _hash._set[_index];
-+ }
-+}// TFloatIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatLongHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for float keys and long values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TFloatLongHashMap extends TFloatHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient long[] _values;
-+
-+ /**
-+ * Creates a new <code>TFloatLongHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TFloatLongHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatLongHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TFloatLongHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatLongHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TFloatLongHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatLongHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatLongHashMap(TFloatHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatLongHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatLongHashMap(int initialCapacity, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatLongHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatLongHashMap(int initialCapacity, float loadFactor, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TFloatLongHashMap m = (TFloatLongHashMap)super.clone();
-+ m._values = (long[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TFloatLongIterator with access to this map's keys and values
-+ */
-+ public TFloatLongIterator iterator() {
-+ return new TFloatLongIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new long[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @param value an <code>long</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (float)0 if none was found.
-+ */
-+ public long put(float key, long value) {
-+ byte previousState;
-+ long previous = (long)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ float oldKeys[] = _set;
-+ long oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new float[newCapacity];
-+ _values = new long[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ float o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>float</code> value
-+ * @return the value of <tt>key</tt> or (float)0 if no such mapping exists.
-+ */
-+ public long get(float key) {
-+ int index = index(key);
-+ return index < 0 ? (long)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ float[] keys = _set;
-+ long[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (float)0;
-+ vals[i] = (long)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @return an <code>long</code> value, or (float)0 if no mapping for key exists
-+ */
-+ public long remove(float key) {
-+ long prev = (long)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TFloatLongHashMap)) {
-+ return false;
-+ }
-+ TFloatLongHashMap that = (TFloatLongHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TFloatLongProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(float key, long value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TFloatLongProcedure {
-+ private final TFloatLongHashMap _otherMap;
-+
-+ EqProcedure(TFloatLongHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(float key, long value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two longs for equality.
-+ */
-+ private final boolean eq(long v1, long v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (long)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public long[] getValues() {
-+ long[] vals = new long[size()];
-+ long[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public float[] keys() {
-+ float[] keys = new float[size()];
-+ float[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>long</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(long val) {
-+ byte[] states = _states;
-+ long[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(float key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TFloatProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TFloatProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TLongProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TLongProcedure procedure) {
-+ byte[] states = _states;
-+ long[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOFloatLongProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TFloatLongProcedure procedure) {
-+ byte[] states = _states;
-+ float[] keys = _set;
-+ long[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TFloatLongProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ float[] keys = _set;
-+ long[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TLongFunction</code> value
-+ */
-+ public void transformValues(TLongFunction function) {
-+ byte[] states = _states;
-+ long[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(float key) {
-+ return adjustValue(key, (long)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(float key, long amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ float key = in.readFloat();
-+ long val = in.readLong();
-+ put(key, val);
-+ }
-+ }
-+} // TFloatLongHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatLongIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type float and long.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TFloatLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TFloatLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TFloatLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TFloatLongIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TFloatLongIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TFloatLongHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TFloatLongIterator(TFloatLongHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public float key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public long value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public long setValue(long val) {
-+ long old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TFloatLongIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatLongProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type float and long.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TFloatLongProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>float</code> value
-+ * @param b a <code>long</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(float a, long b);
-+}// TFloatLongProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatObjectHashMap.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,507 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for float keys and Object values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TFloatObjectHashMap<V> extends TFloatHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient V[] _values;
-+
-+ /**
-+ * Creates a new <code>TFloatObjectHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TFloatObjectHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatObjectHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TFloatObjectHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatObjectHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TFloatObjectHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatObjectHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatObjectHashMap(TFloatHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatObjectHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatObjectHashMap(int initialCapacity, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatObjectHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatObjectHashMap(int initialCapacity, float loadFactor, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public TFloatObjectHashMap<V> clone() {
-+ TFloatObjectHashMap<V> m = (TFloatObjectHashMap<V>)super.clone();
-+ m._values = (V[]) this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TFloatObjectIterator with access to this map's keys and values
-+ */
-+ public TFloatObjectIterator<V> iterator() {
-+ return new TFloatObjectIterator<V>(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = (V[]) new Object[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (float)0 if none was found.
-+ */
-+ public V put(float key, V value) {
-+ byte previousState;
-+ V previous = null;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ float oldKeys[] = _set;
-+ V oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new float[newCapacity];
-+ _values = (V[]) new Object[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ float o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>float</code> value
-+ * @return the value of <tt>key</tt> or (float)0 if no such mapping exists.
-+ */
-+ public V get(float key) {
-+ int index = index(key);
-+ return index < 0 ? null : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ float[] keys = _set;
-+ Object[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (float)0;
-+ vals[i] = null;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @return an <code>Object</code> value or (float)0 if no such mapping exists.
-+ */
-+ public V remove(float key) {
-+ V prev = null;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TFloatObjectHashMap)) {
-+ return false;
-+ }
-+ TFloatObjectHashMap that = (TFloatObjectHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TFloatObjectProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(float key, Object value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TFloatObjectProcedure {
-+ private final TFloatObjectHashMap _otherMap;
-+
-+ EqProcedure(TFloatObjectHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(float key, Object value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two objects for equality.
-+ */
-+ private final boolean eq(Object o1, Object o2) {
-+ return o1 == o2 || ((o1 != null) && o1.equals(o2));
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = null;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public Object[] getValues() {
-+ Object[] vals = new Object[size()];
-+ V[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public float[] keys() {
-+ float[] keys = new float[size()];
-+ float[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(V val) {
-+ byte[] states = _states;
-+ V[] vals = _values;
-+
-+ // special case null values so that we don't have to
-+ // perform null checks before every call to equals()
-+ if (null == val) {
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL &&
-+ val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ } else {
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL &&
-+ (val == vals[i] || val.equals(vals[i]))) {
-+ return true;
-+ }
-+ }
-+ } // end of else
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(float key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TFloatProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TFloatProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TObjectProcedure<V> procedure) {
-+ byte[] states = _states;
-+ V[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOFloatObjectProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TFloatObjectProcedure<V> procedure) {
-+ byte[] states = _states;
-+ float[] keys = _set;
-+ V[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TFloatObjectProcedure<V> procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ float[] keys = _set;
-+ V[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TObjectFunction</code> value
-+ */
-+ public void transformValues(TObjectFunction<V,V> function) {
-+ byte[] states = _states;
-+ V[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ float key = in.readFloat();
-+ V val = (V) in.readObject();
-+ put(key, val);
-+ }
-+ }
-+} // TFloatObjectHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatObjectIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,151 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type float and Object.
-+ * <p/>
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ * <p/>
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ * <p/>
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ * <p/>
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ * <p/>
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TFloatObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TFloatObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TFloatObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TFloatObjectIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2OIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TFloatObjectIterator<V> extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TFloatObjectHashMap<V> _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TFloatObjectIterator(TFloatObjectHashMap<V> map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException
-+ * if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public float key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public V value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public V setValue(V val) {
-+ V old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TFloatObjectIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatObjectProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type float and Object.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2OProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TFloatObjectProcedure<T> {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>float</code> value
-+ * @param b an <code>Object</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(float a, T b);
-+}// TFloatObjectProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,46 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures with one float paramater.
-+ *
-+ * Created: Mon Nov 5 21:45:49 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TFloatProcedure {
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param value a value of type <code>float</code>
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(float value);
-+}// TFloatProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatShortHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for float keys and short values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TFloatShortHashMap extends TFloatHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient short[] _values;
-+
-+ /**
-+ * Creates a new <code>TFloatShortHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TFloatShortHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatShortHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TFloatShortHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatShortHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TFloatShortHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatShortHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatShortHashMap(TFloatHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatShortHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatShortHashMap(int initialCapacity, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TFloatShortHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TFloatShortHashMap(int initialCapacity, float loadFactor, TFloatHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TFloatShortHashMap m = (TFloatShortHashMap)super.clone();
-+ m._values = (short[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TFloatShortIterator with access to this map's keys and values
-+ */
-+ public TFloatShortIterator iterator() {
-+ return new TFloatShortIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new short[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @param value an <code>short</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (float)0 if none was found.
-+ */
-+ public short put(float key, short value) {
-+ byte previousState;
-+ short previous = (short)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ float oldKeys[] = _set;
-+ short oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new float[newCapacity];
-+ _values = new short[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ float o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>float</code> value
-+ * @return the value of <tt>key</tt> or (float)0 if no such mapping exists.
-+ */
-+ public short get(float key) {
-+ int index = index(key);
-+ return index < 0 ? (short)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ float[] keys = _set;
-+ short[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (float)0;
-+ vals[i] = (short)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @return an <code>short</code> value, or (float)0 if no mapping for key exists
-+ */
-+ public short remove(float key) {
-+ short prev = (short)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TFloatShortHashMap)) {
-+ return false;
-+ }
-+ TFloatShortHashMap that = (TFloatShortHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TFloatShortProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(float key, short value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TFloatShortProcedure {
-+ private final TFloatShortHashMap _otherMap;
-+
-+ EqProcedure(TFloatShortHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(float key, short value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two shorts for equality.
-+ */
-+ private final boolean eq(short v1, short v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (short)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public short[] getValues() {
-+ short[] vals = new short[size()];
-+ short[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public float[] keys() {
-+ float[] keys = new float[size()];
-+ float[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>short</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(short val) {
-+ byte[] states = _states;
-+ short[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>float</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(float key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TFloatProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TFloatProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TShortProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TShortProcedure procedure) {
-+ byte[] states = _states;
-+ short[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOFloatShortProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TFloatShortProcedure procedure) {
-+ byte[] states = _states;
-+ float[] keys = _set;
-+ short[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TFloatShortProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ float[] keys = _set;
-+ short[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TShortFunction</code> value
-+ */
-+ public void transformValues(TShortFunction function) {
-+ byte[] states = _states;
-+ short[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(float key) {
-+ return adjustValue(key, (short)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(float key, short amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ float key = in.readFloat();
-+ short val = in.readShort();
-+ put(key, val);
-+ }
-+ }
-+} // TFloatShortHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatShortIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type float and short.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TFloatShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TFloatShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TFloatShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TFloatShortIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TFloatShortIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TFloatShortHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TFloatShortIterator(TFloatShortHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public float key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public short value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public short setValue(short val) {
-+ short old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TFloatShortIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TFloatShortProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type float and short.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TFloatShortProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>float</code> value
-+ * @param b a <code>short</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(float a, short b);
-+}// TFloatShortProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntArrayList.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,905 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.Externalizable;
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.util.Arrays;
-+import java.util.Random;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * A resizable, array-backed list of int primitives.
-+ *
-+ * Created: Sat Dec 29 14:21:12 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+
-+public class TIntArrayList implements Externalizable, Cloneable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the data of the list */
-+ protected int[] _data;
-+
-+ /** the index after the last entry in the list */
-+ protected int _pos;
-+
-+ /** the default capacity for new lists */
-+ protected static final int DEFAULT_CAPACITY = 10;
-+
-+ /**
-+ * Creates a new <code>TIntArrayList</code> instance with the
-+ * default capacity.
-+ */
-+ public TIntArrayList() {
-+ this(DEFAULT_CAPACITY);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntArrayList</code> instance with the
-+ * specified capacity.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public TIntArrayList(int capacity) {
-+ _data = new int[capacity];
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntArrayList</code> instance whose
-+ * capacity is the greater of the length of <tt>values</tt> and
-+ * DEFAULT_CAPACITY and whose initial contents are the specified
-+ * values.
-+ *
-+ * @param values an <code>int[]</code> value
-+ */
-+ public TIntArrayList(int[] values) {
-+ this(Math.max(values.length, DEFAULT_CAPACITY));
-+ add(values);
-+ }
-+
-+ // sizing
-+
-+ /**
-+ * Grow the internal array as needed to accomodate the specified
-+ * number of elements. The size of the array ints on each
-+ * resize unless <tt>capacity</tt> requires more than twice the
-+ * current capacity.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public void ensureCapacity(int capacity) {
-+ if (capacity > _data.length) {
-+ int newCap = Math.max(_data.length << 1, capacity);
-+ int[] tmp = new int[newCap];
-+ System.arraycopy(_data, 0, tmp, 0, _data.length);
-+ _data = tmp;
-+ }
-+ }
-+
-+ /**
-+ * Returns the number of values in the list.
-+ *
-+ * @return the number of values in the list.
-+ */
-+ public int size() {
-+ return _pos;
-+ }
-+
-+ /**
-+ * Tests whether this list contains any values.
-+ *
-+ * @return true if the list is empty.
-+ */
-+ public boolean isEmpty() {
-+ return _pos == 0;
-+ }
-+
-+ /**
-+ * Sheds any excess capacity above and beyond the current size of
-+ * the list.
-+ */
-+ public void trimToSize() {
-+ if (_data.length > size()) {
-+ int[] tmp = new int[size()];
-+ toNativeArray(tmp, 0, tmp.length);
-+ _data = tmp;
-+ }
-+ }
-+
-+ // modifying
-+
-+ /**
-+ * Adds <tt>val</tt> to the end of the list, growing as needed.
-+ *
-+ * @param val an <code>int</code> value
-+ */
-+ public void add(int val) {
-+ ensureCapacity(_pos + 1);
-+ _data[_pos++] = val;
-+ }
-+
-+ /**
-+ * Adds the values in the array <tt>vals</tt> to the end of the
-+ * list, in order.
-+ *
-+ * @param vals an <code>int[]</code> value
-+ */
-+ public void add(int[] vals) {
-+ add(vals, 0, vals.length);
-+ }
-+
-+ /**
-+ * Adds a subset of the values in the array <tt>vals</tt> to the
-+ * end of the list, in order.
-+ *
-+ * @param vals an <code>int[]</code> value
-+ * @param offset the offset at which to start copying
-+ * @param length the number of values to copy.
-+ */
-+ public void add(int[] vals, int offset, int length) {
-+ ensureCapacity(_pos + length);
-+ System.arraycopy(vals, offset, _data, _pos, length);
-+ _pos += length;
-+ }
-+
-+ /**
-+ * Inserts <tt>value</tt> into the list at <tt>offset</tt>. All
-+ * values including and to the right of <tt>offset</tt> are shifted
-+ * to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param value an <code>int</code> value
-+ */
-+ public void insert(int offset, int value) {
-+ if (offset == _pos) {
-+ add(value);
-+ return;
-+ }
-+ ensureCapacity(_pos + 1);
-+ // shift right
-+ System.arraycopy(_data, offset, _data, offset + 1, _pos - offset);
-+ // insert
-+ _data[offset] = value;
-+ _pos++;
-+ }
-+
-+ /**
-+ * Inserts the array of <tt>values</tt> into the list at
-+ * <tt>offset</tt>. All values including and to the right of
-+ * <tt>offset</tt> are shifted to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param values an <code>int[]</code> value
-+ */
-+ public void insert(int offset, int[] values) {
-+ insert(offset, values, 0, values.length);
-+ }
-+
-+ /**
-+ * Inserts a slice of the array of <tt>values</tt> into the list
-+ * at <tt>offset</tt>. All values including and to the right of
-+ * <tt>offset</tt> are shifted to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param values an <code>int[]</code> value
-+ * @param valOffset the offset in the values array at which to
-+ * start copying.
-+ * @param len the number of values to copy from the values array
-+ */
-+ public void insert(int offset, int[] values, int valOffset, int len) {
-+ if (offset == _pos) {
-+ add(values, valOffset, len);
-+ return;
-+ }
-+
-+ ensureCapacity(_pos + len);
-+ // shift right
-+ System.arraycopy(_data, offset, _data, offset + len, _pos - offset);
-+ // insert
-+ System.arraycopy(values, valOffset, _data, offset, len);
-+ _pos += len;
-+ }
-+
-+ /**
-+ * Returns the value at the specified offset.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return an <code>int</code> value
-+ */
-+ public int get(int offset) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ return _data[offset];
-+ }
-+
-+ /**
-+ * Returns the value at the specified offset without doing any
-+ * bounds checking.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return an <code>int</code> value
-+ */
-+ public int getQuick(int offset) {
-+ return _data[offset];
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>int</code> value
-+ */
-+ public void set(int offset, int val) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ _data[offset] = val;
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset and returns the
-+ * previously stored value.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>int</code> value
-+ * @return the value previously stored at offset.
-+ */
-+ public int getSet(int offset, int val) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ int old = _data[offset];
-+ _data[offset] = val;
-+ return old;
-+ }
-+
-+ /**
-+ * Replace the values in the list starting at <tt>offset</tt> with
-+ * the contents of the <tt>values</tt> array.
-+ *
-+ * @param offset the first offset to replace
-+ * @param values the source of the new values
-+ */
-+ public void set(int offset, int[] values) {
-+ set(offset, values, 0, values.length);
-+ }
-+
-+ /**
-+ * Replace the values in the list starting at <tt>offset</tt> with
-+ * <tt>length</tt> values from the <tt>values</tt> array, starting
-+ * at valOffset.
-+ *
-+ * @param offset the first offset to replace
-+ * @param values the source of the new values
-+ * @param valOffset the first value to copy from the values array
-+ * @param length the number of values to copy
-+ */
-+ public void set(int offset, int[] values, int valOffset, int length) {
-+ if (offset < 0 || offset + length > _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ System.arraycopy(values, valOffset, _data, offset, length);
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset without doing any bounds
-+ * checking.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>int</code> value
-+ */
-+ public void setQuick(int offset, int val) {
-+ _data[offset] = val;
-+ }
-+
-+ /**
-+ * Flushes the internal state of the list, resetting the capacity
-+ * to the default.
-+ */
-+ public void clear() {
-+ clear(DEFAULT_CAPACITY);
-+ }
-+
-+ /**
-+ * Flushes the internal state of the list, setting the capacity of
-+ * the empty list to <tt>capacity</tt>.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public void clear(int capacity) {
-+ _data = new int[capacity];
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Sets the size of the list to 0, but does not change its
-+ * capacity. This method can be used as an alternative to the
-+ * {@link #clear clear} method if you want to recyle a list without
-+ * allocating new backing arrays.
-+ *
-+ * @see #clear
-+ */
-+ public void reset() {
-+ _pos = 0;
-+ fill((int)0);
-+ }
-+
-+ /**
-+ * Sets the size of the list to 0, but does not change its
-+ * capacity. This method can be used as an alternative to the
-+ * {@link #clear clear} method if you want to recyle a list
-+ * without allocating new backing arrays. This method differs
-+ * from {@link #reset reset} in that it does not clear the old
-+ * values in the backing array. Thus, it is possible for {@link
-+ * #getQuick getQuick} to return stale data if this method is used
-+ * and the caller is careless about bounds checking.
-+ *
-+ * @see #reset
-+ * @see #clear
-+ * @see #getQuick
-+ */
-+ public void resetQuick() {
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Removes the value at <tt>offset</tt> from the list.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return the value previously stored at offset.
-+ */
-+ public int remove(int offset) {
-+ int old = get(offset);
-+ remove(offset, 1);
-+ return old;
-+ }
-+
-+ /**
-+ * Removes <tt>length</tt> values from the list, starting at
-+ * <tt>offset</tt>
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param length an <code>int</code> value
-+ */
-+ public void remove(int offset, int length) {
-+ if (offset < 0 || offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+
-+ if (offset == 0) {
-+ // data at the front
-+ System.arraycopy(_data, length, _data, 0, _pos - length);
-+ } else if (_pos - length == offset) {
-+ // no copy to make, decrementing pos "deletes" values at
-+ // the end
-+ } else {
-+ // data in the middle
-+ System.arraycopy(_data, offset + length,
-+ _data, offset, _pos - (offset + length));
-+ }
-+ _pos -= length;
-+ // no need to clear old values beyond _pos, because this is a
-+ // primitive collection and 0 takes as much room as any other
-+ // value
-+ }
-+
-+ /**
-+ * Transform each value in the list using the specified function.
-+ *
-+ * @param function a <code>TIntFunction</code> value
-+ */
-+ public void transformValues(TIntFunction function) {
-+ for (int i = _pos; i-- > 0;) {
-+ _data[i] = function.execute(_data[i]);
-+ }
-+ }
-+
-+ /**
-+ * Reverse the order of the elements in the list.
-+ */
-+ public void reverse() {
-+ reverse(0, _pos);
-+ }
-+
-+ /**
-+ * Reverse the order of the elements in the range of the list.
-+ *
-+ * @param from the inclusive index at which to start reversing
-+ * @param to the exclusive index at which to stop reversing
-+ */
-+ public void reverse(int from, int to) {
-+ if (from == to) {
-+ return; // nothing to do
-+ }
-+ if (from > to) {
-+ throw new IllegalArgumentException("from cannot be greater than to");
-+ }
-+ for (int i = from, j = to - 1; i < j; i++, j--) {
-+ swap(i, j);
-+ }
-+ }
-+
-+ /**
-+ * Shuffle the elements of the list using the specified random
-+ * number generator.
-+ *
-+ * @param rand a <code>Random</code> value
-+ */
-+ public void shuffle(Random rand) {
-+ for (int i = _pos; i-- > 1;) {
-+ swap(i, rand.nextInt(i));
-+ }
-+ }
-+
-+ /**
-+ * Swap the values at offsets <tt>i</tt> and <tt>j</tt>.
-+ *
-+ * @param i an offset into the data array
-+ * @param j an offset into the data array
-+ */
-+ private final void swap(int i, int j) {
-+ int tmp = _data[i];
-+ _data[i] = _data[j];
-+ _data[j] = tmp;
-+ }
-+
-+ // copying
-+
-+ /**
-+ * Returns a clone of this list. Since this is a primitive
-+ * collection, this will be a deep clone.
-+ *
-+ * @return a deep clone of the list.
-+ */
-+ public Object clone() {
-+ TIntArrayList list = null;
-+ try {
-+ list = (TIntArrayList) super.clone();
-+ list._data = toNativeArray();
-+ } catch (CloneNotSupportedException e) {
-+ // it's supported
-+ } // end of try-catch
-+ return list;
-+ }
-+
-+ /**
-+ * Copies the contents of the list into a native array.
-+ *
-+ * @return an <code>int[]</code> value
-+ */
-+ public int[] toNativeArray() {
-+ return toNativeArray(0, _pos);
-+ }
-+
-+ /**
-+ * Copies a slice of the list into a native array.
-+ *
-+ * @param offset the offset at which to start copying
-+ * @param len the number of values to copy.
-+ * @return an <code>int[]</code> value
-+ */
-+ public int[] toNativeArray(int offset, int len) {
-+ int[] rv = new int[len];
-+ toNativeArray(rv, offset, len);
-+ return rv;
-+ }
-+
-+ /**
-+ * Copies a slice of the list into a native array.
-+ *
-+ * @param dest the array to copy into.
-+ * @param offset the offset of the first value to copy
-+ * @param len the number of values to copy.
-+ */
-+ public void toNativeArray(int[] dest, int offset, int len) {
-+ if (len == 0) {
-+ return; // nothing to copy
-+ }
-+ if (offset < 0 || offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ System.arraycopy(_data, offset, dest, 0, len);
-+ }
-+
-+ // comparing
-+
-+ /**
-+ * Compares this list to another list, value by value.
-+ *
-+ * @param other the object to compare against
-+ * @return true if other is a TIntArrayList and has exactly the
-+ * same values.
-+ */
-+ public boolean equals(Object other) {
-+ if (other == this) {
-+ return true;
-+ } else if (other instanceof TIntArrayList) {
-+ TIntArrayList that = (TIntArrayList)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ } else {
-+ for (int i = _pos; i-- > 0;) {
-+ if (this._data[i] != that._data[i]) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public int hashCode() {
-+ int h = 0;
-+ for (int i = _pos; i-- > 0;) {
-+ h += HashFunctions.hash(_data[i]);
-+ }
-+ return h;
-+ }
-+
-+ // procedures
-+
-+ /**
-+ * Applies the procedure to each value in the list in ascending
-+ * (front to back) order.
-+ *
-+ * @param procedure a <code>TIntProcedure</code> value
-+ * @return true if the procedure did not terminate prematurely.
-+ */
-+ public boolean forEach(TIntProcedure procedure) {
-+ for (int i = 0; i < _pos; i++) {
-+ if (! procedure.execute(_data[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Applies the procedure to each value in the list in descending
-+ * (back to front) order.
-+ *
-+ * @param procedure a <code>TIntProcedure</code> value
-+ * @return true if the procedure did not terminate prematurely.
-+ */
-+ public boolean forEachDescending(TIntProcedure procedure) {
-+ for (int i = _pos; i-- > 0;) {
-+ if (! procedure.execute(_data[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ // sorting
-+
-+ /**
-+ * Sort the values in the list (ascending) using the Sun quicksort
-+ * implementation.
-+ *
-+ * @see java.util.Arrays#sort
-+ */
-+ public void sort() {
-+ Arrays.sort(_data, 0, _pos);
-+ }
-+
-+ /**
-+ * Sort a slice of the list (ascending) using the Sun quicksort
-+ * implementation.
-+ *
-+ * @param fromIndex the index at which to start sorting (inclusive)
-+ * @param toIndex the index at which to stop sorting (exclusive)
-+ * @see java.util.Arrays#sort
-+ */
-+ public void sort(int fromIndex, int toIndex) {
-+ Arrays.sort(_data, fromIndex, toIndex);
-+ }
-+
-+ // filling
-+
-+ /**
-+ * Fills every slot in the list with the specified value.
-+ *
-+ * @param val the value to use when filling
-+ */
-+ public void fill(int val) {
-+ Arrays.fill(_data, 0, _pos, val);
-+ }
-+
-+ /**
-+ * Fills a range in the list with the specified value.
-+ *
-+ * @param fromIndex the offset at which to start filling (inclusive)
-+ * @param toIndex the offset at which to stop filling (exclusive)
-+ * @param val the value to use when filling
-+ */
-+ public void fill(int fromIndex, int toIndex, int val) {
-+ if (toIndex > _pos) {
-+ ensureCapacity(toIndex);
-+ _pos = toIndex;
-+ }
-+ Arrays.fill(_data, fromIndex, toIndex, val);
-+ }
-+
-+ // searching
-+
-+ /**
-+ * Performs a binary search for <tt>value</tt> in the entire list.
-+ * Note that you <b>must</b> @{link #sort sort} the list before
-+ * doing a search.
-+ *
-+ * @param value the value to search for
-+ * @return the absolute offset in the list of the value, or its
-+ * negative insertion point into the sorted list.
-+ */
-+ public int binarySearch(int value) {
-+ return binarySearch(value, 0, _pos);
-+ }
-+
-+ /**
-+ * Performs a binary search for <tt>value</tt> in the specified
-+ * range. Note that you <b>must</b> @{link #sort sort} the list
-+ * or the range before doing a search.
-+ *
-+ * @param value the value to search for
-+ * @param fromIndex the lower boundary of the range (inclusive)
-+ * @param toIndex the upper boundary of the range (exclusive)
-+ * @return the absolute offset in the list of the value, or its
-+ * negative insertion point into the sorted list.
-+ */
-+ public int binarySearch(int value, int fromIndex, int toIndex) {
-+ if (fromIndex < 0) {
-+ throw new ArrayIndexOutOfBoundsException(fromIndex);
-+ }
-+ if (toIndex > _pos) {
-+ throw new ArrayIndexOutOfBoundsException(toIndex);
-+ }
-+
-+ int low = fromIndex;
-+ int high = toIndex - 1;
-+
-+ while (low <= high) {
-+ int mid = (low + high) >> 1;
-+ int midVal = _data[mid];
-+
-+ if (midVal < value) {
-+ low = mid + 1;
-+ } else if (midVal > value) {
-+ high = mid - 1;
-+ } else {
-+ return mid; // value found
-+ }
-+ }
-+ return -(low + 1); // value not found.
-+ }
-+
-+ /**
-+ * Searches the list front to back for the index of
-+ * <tt>value</tt>.
-+ *
-+ * @param value an <code>int</code> value
-+ * @return the first offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int indexOf(int value) {
-+ return indexOf(0, value);
-+ }
-+
-+ /**
-+ * Searches the list front to back for the index of
-+ * <tt>value</tt>, starting at <tt>offset</tt>.
-+ *
-+ * @param offset the offset at which to start the linear search
-+ * (inclusive)
-+ * @param value an <code>int</code> value
-+ * @return the first offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int indexOf(int offset, int value) {
-+ for (int i = offset; i < _pos; i++) {
-+ if (_data[i] == value) {
-+ return i;
-+ }
-+ }
-+ return -1;
-+ }
-+
-+ /**
-+ * Searches the list back to front for the last index of
-+ * <tt>value</tt>.
-+ *
-+ * @param value an <code>int</code> value
-+ * @return the last offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int lastIndexOf(int value) {
-+ return lastIndexOf(_pos, value);
-+ }
-+
-+ /**
-+ * Searches the list back to front for the last index of
-+ * <tt>value</tt>, starting at <tt>offset</tt>.
-+ *
-+ * @param offset the offset at which to start the linear search
-+ * (exclusive)
-+ * @param value an <code>int</code> value
-+ * @return the last offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int lastIndexOf(int offset, int value) {
-+ for (int i = offset; i-- > 0;) {
-+ if (_data[i] == value) {
-+ return i;
-+ }
-+ }
-+ return -1;
-+ }
-+
-+ /**
-+ * Searches the list for <tt>value</tt>
-+ *
-+ * @param value an <code>int</code> value
-+ * @return true if value is in the list.
-+ */
-+ public boolean contains(int value) {
-+ return lastIndexOf(value) >= 0;
-+ }
-+
-+ /**
-+ * Searches the list for values satisfying <tt>condition</tt> in
-+ * the manner of the *nix <tt>grep</tt> utility.
-+ *
-+ * @param condition a condition to apply to each element in the list
-+ * @return a list of values which match the condition.
-+ */
-+ public TIntArrayList grep(TIntProcedure condition) {
-+ TIntArrayList list = new TIntArrayList();
-+ for (int i = 0; i < _pos; i++) {
-+ if (condition.execute(_data[i])) {
-+ list.add(_data[i]);
-+ }
-+ }
-+ return list;
-+ }
-+
-+ /**
-+ * Searches the list for values which do <b>not</b> satisfy
-+ * <tt>condition</tt>. This is akin to *nix <code>grep -v</code>.
-+ *
-+ * @param condition a condition to apply to each element in the list
-+ * @return a list of values which do not match the condition.
-+ */
-+ public TIntArrayList inverseGrep(TIntProcedure condition) {
-+ TIntArrayList list = new TIntArrayList();
-+ for (int i = 0; i < _pos; i++) {
-+ if (! condition.execute(_data[i])) {
-+ list.add(_data[i]);
-+ }
-+ }
-+ return list;
-+ }
-+
-+ /**
-+ * Finds the maximum value in the list.
-+ *
-+ * @return the largest value in the list.
-+ * @exception IllegalStateException if the list is empty
-+ */
-+ public int max() {
-+ if (size() == 0) {
-+ throw new IllegalStateException("cannot find maximum of an empty list");
-+ }
-+ int max = _data[_pos - 1];
-+ for (int i = _pos - 1; i-- > 0;) {
-+ if ( _data[_pos] > max ) {
-+ max = _data[_pos];
-+ }
-+ }
-+ return max;
-+ }
-+
-+ /**
-+ * Finds the minimum value in the list.
-+ *
-+ * @return the smallest value in the list.
-+ * @exception IllegalStateException if the list is empty
-+ */
-+ public int min() {
-+ if (size() == 0) {
-+ throw new IllegalStateException("cannot find minimum of an empty list");
-+ }
-+ int min = _data[_pos - 1];
-+ for (int i = _pos - 1; i-- > 0;) {
-+ if ( _data[_pos] > min ) {
-+ min = _data[_pos];
-+ }
-+ }
-+ return min;
-+ }
-+
-+ // stringification
-+
-+ /**
-+ * Returns a String representation of the list, front to back.
-+ *
-+ * @return a <code>String</code> value
-+ */
-+ public String toString() {
-+ final StringBuffer buf = new StringBuffer("{");
-+ for (int i = 0, end = _pos - 1; i < end; i++) {
-+ buf.append(_data[i]);
-+ buf.append(", ");
-+ }
-+ if (size() > 0) {
-+ buf.append(_data[_pos - 1]);
-+ }
-+ buf.append("}");
-+ return buf.toString();
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // POSITION
-+ out.writeInt( _pos );
-+
-+ // ENTRIES
-+ int len = _data.length;
-+ out.writeInt( len );
-+ for( int i = 0; i < len; i++ ) {
-+ out.writeInt( _data[ i ] );
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // POSITION
-+ _pos = in.readInt();
-+
-+ // ENTRIES
-+ int len = in.readInt();
-+ _data = new int[ len ];
-+ for( int i = 0; i < len; i++ ) {
-+ _data[ i ] = in.readInt();
-+ }
-+ }
-+} // TIntArrayList
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntByteHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for int keys and byte values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TIntByteHashMap extends TIntHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient byte[] _values;
-+
-+ /**
-+ * Creates a new <code>TIntByteHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TIntByteHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntByteHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TIntByteHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntByteHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TIntByteHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntByteHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntByteHashMap(TIntHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntByteHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntByteHashMap(int initialCapacity, TIntHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntByteHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntByteHashMap(int initialCapacity, float loadFactor, TIntHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TIntByteHashMap m = (TIntByteHashMap)super.clone();
-+ m._values = (byte[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TIntByteIterator with access to this map's keys and values
-+ */
-+ public TIntByteIterator iterator() {
-+ return new TIntByteIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new byte[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @param value an <code>byte</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (int)0 if none was found.
-+ */
-+ public byte put(int key, byte value) {
-+ byte previousState;
-+ byte previous = (byte)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ int oldKeys[] = _set;
-+ byte oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new int[newCapacity];
-+ _values = new byte[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ int o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>int</code> value
-+ * @return the value of <tt>key</tt> or (int)0 if no such mapping exists.
-+ */
-+ public byte get(int key) {
-+ int index = index(key);
-+ return index < 0 ? (byte)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ int[] keys = _set;
-+ byte[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (int)0;
-+ vals[i] = (byte)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @return an <code>byte</code> value, or (int)0 if no mapping for key exists
-+ */
-+ public byte remove(int key) {
-+ byte prev = (byte)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TIntByteHashMap)) {
-+ return false;
-+ }
-+ TIntByteHashMap that = (TIntByteHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TIntByteProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(int key, byte value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TIntByteProcedure {
-+ private final TIntByteHashMap _otherMap;
-+
-+ EqProcedure(TIntByteHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(int key, byte value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two bytes for equality.
-+ */
-+ private final boolean eq(byte v1, byte v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (byte)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public byte[] getValues() {
-+ byte[] vals = new byte[size()];
-+ byte[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public int[] keys() {
-+ int[] keys = new int[size()];
-+ int[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>byte</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(byte val) {
-+ byte[] states = _states;
-+ byte[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(int key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TIntProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TIntProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TByteProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TByteProcedure procedure) {
-+ byte[] states = _states;
-+ byte[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOIntByteProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TIntByteProcedure procedure) {
-+ byte[] states = _states;
-+ int[] keys = _set;
-+ byte[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TIntByteProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ int[] keys = _set;
-+ byte[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TByteFunction</code> value
-+ */
-+ public void transformValues(TByteFunction function) {
-+ byte[] states = _states;
-+ byte[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(int key) {
-+ return adjustValue(key, (byte)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(int key, byte amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ int key = in.readInt();
-+ byte val = in.readByte();
-+ put(key, val);
-+ }
-+ }
-+} // TIntByteHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntByteIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type int and byte.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TIntByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TIntByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TIntByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TIntByteIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TIntByteIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TIntByteHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TIntByteIterator(TIntByteHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public int key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public byte value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public byte setValue(byte val) {
-+ byte old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TIntByteIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntByteProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type int and byte.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TIntByteProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>int</code> value
-+ * @param b a <code>byte</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(int a, byte b);
-+}// TIntByteProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntDoubleHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for int keys and double values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TIntDoubleHashMap extends TIntHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient double[] _values;
-+
-+ /**
-+ * Creates a new <code>TIntDoubleHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TIntDoubleHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntDoubleHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TIntDoubleHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntDoubleHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TIntDoubleHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntDoubleHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntDoubleHashMap(TIntHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntDoubleHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntDoubleHashMap(int initialCapacity, TIntHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntDoubleHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntDoubleHashMap(int initialCapacity, float loadFactor, TIntHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TIntDoubleHashMap m = (TIntDoubleHashMap)super.clone();
-+ m._values = (double[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TIntDoubleIterator with access to this map's keys and values
-+ */
-+ public TIntDoubleIterator iterator() {
-+ return new TIntDoubleIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new double[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @param value an <code>double</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (int)0 if none was found.
-+ */
-+ public double put(int key, double value) {
-+ byte previousState;
-+ double previous = (double)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ int oldKeys[] = _set;
-+ double oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new int[newCapacity];
-+ _values = new double[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ int o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>int</code> value
-+ * @return the value of <tt>key</tt> or (int)0 if no such mapping exists.
-+ */
-+ public double get(int key) {
-+ int index = index(key);
-+ return index < 0 ? (double)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ int[] keys = _set;
-+ double[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (int)0;
-+ vals[i] = (double)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @return an <code>double</code> value, or (int)0 if no mapping for key exists
-+ */
-+ public double remove(int key) {
-+ double prev = (double)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TIntDoubleHashMap)) {
-+ return false;
-+ }
-+ TIntDoubleHashMap that = (TIntDoubleHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TIntDoubleProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(int key, double value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TIntDoubleProcedure {
-+ private final TIntDoubleHashMap _otherMap;
-+
-+ EqProcedure(TIntDoubleHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(int key, double value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two doubles for equality.
-+ */
-+ private final boolean eq(double v1, double v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (double)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public double[] getValues() {
-+ double[] vals = new double[size()];
-+ double[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public int[] keys() {
-+ int[] keys = new int[size()];
-+ int[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>double</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(double val) {
-+ byte[] states = _states;
-+ double[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(int key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TIntProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TIntProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TDoubleProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TDoubleProcedure procedure) {
-+ byte[] states = _states;
-+ double[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOIntDoubleProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TIntDoubleProcedure procedure) {
-+ byte[] states = _states;
-+ int[] keys = _set;
-+ double[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TIntDoubleProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ int[] keys = _set;
-+ double[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TDoubleFunction</code> value
-+ */
-+ public void transformValues(TDoubleFunction function) {
-+ byte[] states = _states;
-+ double[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(int key) {
-+ return adjustValue(key, (double)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(int key, double amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ int key = in.readInt();
-+ double val = in.readDouble();
-+ put(key, val);
-+ }
-+ }
-+} // TIntDoubleHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntDoubleIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type int and double.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TIntDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TIntDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TIntDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TIntDoubleIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TIntDoubleIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TIntDoubleHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TIntDoubleIterator(TIntDoubleHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public int key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public double value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public double setValue(double val) {
-+ double old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TIntDoubleIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntDoubleProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type int and double.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TIntDoubleProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>int</code> value
-+ * @param b a <code>double</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(int a, double b);
-+}// TIntDoubleProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntFloatHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for int keys and float values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TIntFloatHashMap extends TIntHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient float[] _values;
-+
-+ /**
-+ * Creates a new <code>TIntFloatHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TIntFloatHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntFloatHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TIntFloatHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntFloatHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TIntFloatHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntFloatHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntFloatHashMap(TIntHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntFloatHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntFloatHashMap(int initialCapacity, TIntHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntFloatHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntFloatHashMap(int initialCapacity, float loadFactor, TIntHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TIntFloatHashMap m = (TIntFloatHashMap)super.clone();
-+ m._values = (float[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TIntFloatIterator with access to this map's keys and values
-+ */
-+ public TIntFloatIterator iterator() {
-+ return new TIntFloatIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new float[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @param value an <code>float</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (int)0 if none was found.
-+ */
-+ public float put(int key, float value) {
-+ byte previousState;
-+ float previous = (float)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ int oldKeys[] = _set;
-+ float oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new int[newCapacity];
-+ _values = new float[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ int o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>int</code> value
-+ * @return the value of <tt>key</tt> or (int)0 if no such mapping exists.
-+ */
-+ public float get(int key) {
-+ int index = index(key);
-+ return index < 0 ? (float)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ int[] keys = _set;
-+ float[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (int)0;
-+ vals[i] = (float)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @return an <code>float</code> value, or (int)0 if no mapping for key exists
-+ */
-+ public float remove(int key) {
-+ float prev = (float)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TIntFloatHashMap)) {
-+ return false;
-+ }
-+ TIntFloatHashMap that = (TIntFloatHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TIntFloatProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(int key, float value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TIntFloatProcedure {
-+ private final TIntFloatHashMap _otherMap;
-+
-+ EqProcedure(TIntFloatHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(int key, float value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two floats for equality.
-+ */
-+ private final boolean eq(float v1, float v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (float)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public float[] getValues() {
-+ float[] vals = new float[size()];
-+ float[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public int[] keys() {
-+ int[] keys = new int[size()];
-+ int[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>float</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(float val) {
-+ byte[] states = _states;
-+ float[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(int key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TIntProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TIntProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TFloatProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TFloatProcedure procedure) {
-+ byte[] states = _states;
-+ float[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOIntFloatProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TIntFloatProcedure procedure) {
-+ byte[] states = _states;
-+ int[] keys = _set;
-+ float[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TIntFloatProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ int[] keys = _set;
-+ float[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TFloatFunction</code> value
-+ */
-+ public void transformValues(TFloatFunction function) {
-+ byte[] states = _states;
-+ float[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(int key) {
-+ return adjustValue(key, (float)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(int key, float amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ int key = in.readInt();
-+ float val = in.readFloat();
-+ put(key, val);
-+ }
-+ }
-+} // TIntFloatHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntFloatIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type int and float.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TIntFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TIntFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TIntFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TIntFloatIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TIntFloatIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TIntFloatHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TIntFloatIterator(TIntFloatHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public int key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public float value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public float setValue(float val) {
-+ float old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TIntFloatIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntFloatProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type int and float.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TIntFloatProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>int</code> value
-+ * @param b a <code>float</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(int a, float b);
-+}// TIntFloatProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntFunction.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,43 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for functions that accept and return one int primitive.
-+ *
-+ * Created: Mon Nov 5 22:19:36 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PFunction.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TIntFunction {
-+ /**
-+ * Execute this function with <tt>value</tt>
-+ *
-+ * @param value a <code>int</code> input
-+ * @return a <code>int</code> result
-+ */
-+ public int execute(int value);
-+}// TIntFunction
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntHash.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,289 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed hashing implementation for int primitives.
-+ *
-+ * Created: Sun Nov 4 08:56:06 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PHash.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+abstract public class TIntHash extends TPrimitiveHash implements TIntHashingStrategy {
-+
-+ /** the set of ints */
-+ protected transient int[] _set;
-+
-+ /** strategy used to hash values in this collection */
-+ protected TIntHashingStrategy _hashingStrategy;
-+
-+ /**
-+ * Creates a new <code>TIntHash</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TIntHash() {
-+ super();
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TIntHash(int initialCapacity) {
-+ super(initialCapacity);
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ */
-+ public TIntHash(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntHash</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntHash(TIntHashingStrategy strategy) {
-+ super();
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntHash(int initialCapacity, TIntHashingStrategy strategy) {
-+ super(initialCapacity);
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntHash(int initialCapacity, float loadFactor, TIntHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor);
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TIntHash h = (TIntHash)super.clone();
-+ h._set = (int[])this._set.clone();
-+ return h;
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _set = new int[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Searches the set for <tt>val</tt>
-+ *
-+ * @param val an <code>int</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean contains(int val) {
-+ return index(val) >= 0;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each element in the set.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the set terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEach(TIntProcedure procedure) {
-+ byte[] states = _states;
-+ int[] set = _set;
-+ for (int i = set.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(set[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Releases the element currently stored at <tt>index</tt>.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _set[index] = (int)0;
-+ super.removeAt(index);
-+ }
-+
-+ /**
-+ * Locates the index of <tt>val</tt>.
-+ *
-+ * @param val an <code>int</code> value
-+ * @return the index of <tt>val</tt> or -1 if it isn't in the set.
-+ */
-+ protected int index(int val) {
-+ int hash, probe, index, length;
-+ int[] set;
-+ byte[] states;
-+
-+ states = _states;
-+ set = _set;
-+ length = states.length;
-+ hash = _hashingStrategy.computeHashCode(val) & 0x7fffffff;
-+ index = hash % length;
-+
-+ if (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val)) {
-+ // see Knuth, p. 529
-+ probe = 1 + (hash % (length - 2));
-+
-+ do {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ } while (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val));
-+ }
-+
-+ return states[index] == FREE ? -1 : index;
-+ }
-+
-+ /**
-+ * Locates the index at which <tt>val</tt> can be inserted. if
-+ * there is already a value equal()ing <tt>val</tt> in the set,
-+ * returns that value as a negative integer.
-+ *
-+ * @param val an <code>int</code> value
-+ * @return an <code>int</code> value
-+ */
-+ protected int insertionIndex(int val) {
-+ int hash, probe, index, length;
-+ int[] set;
-+ byte[] states;
-+
-+ states = _states;
-+ set = _set;
-+ length = states.length;
-+ hash = _hashingStrategy.computeHashCode(val) & 0x7fffffff;
-+ index = hash % length;
-+
-+ if (states[index] == FREE) {
-+ return index; // empty, all done
-+ } else if (states[index] == FULL && set[index] == val) {
-+ return -index -1; // already stored
-+ } else { // already FULL or REMOVED, must probe
-+ // compute the double hash
-+ probe = 1 + (hash % (length - 2));
-+
-+ // if the slot we landed on is FULL (but not removed), probe
-+ // until we find an empty slot, a REMOVED slot, or an element
-+ // equal to the one we are trying to insert.
-+ // finding an empty slot means that the value is not present
-+ // and that we should use that slot as the insertion point;
-+ // finding a REMOVED slot means that we need to keep searching,
-+ // however we want to remember the offset of that REMOVED slot
-+ // so we can reuse it in case a "new" insertion (i.e. not an update)
-+ // is possible.
-+ // finding a matching value means that we've found that our desired
-+ // key is already in the table
-+
-+ if (states[index] != REMOVED) {
-+ // starting at the natural offset, probe until we find an
-+ // offset that isn't full.
-+ do {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ } while (states[index] == FULL && set[index] != val);
-+ }
-+
-+ // if the index we found was removed: continue probing until we
-+ // locate a free location or an element which equal()s the
-+ // one we have.
-+ if (states[index] == REMOVED) {
-+ int firstRemoved = index;
-+ while (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val)) {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ }
-+ return states[index] == FULL ? -index -1 : firstRemoved;
-+ }
-+ // if it's full, the key is already stored
-+ return states[index] == FULL ? -index -1 : index;
-+ }
-+ }
-+
-+ /**
-+ * Default implementation of TIntHashingStrategy:
-+ * delegates hashing to HashFunctions.hash(int).
-+ *
-+ * @param val the value to hash
-+ * @return the hashcode.
-+ */
-+ public final int computeHashCode(int val) {
-+ return HashFunctions.hash(val);
-+ }
-+} // TIntHash
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntHashingStrategy.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,49 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.Serializable;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface to support pluggable hashing strategies in maps and sets.
-+ * Implementors can use this interface to make the trove hashing
-+ * algorithms use an optimal strategy when computing hashcodes.
-+ *
-+ * Created: Sun Nov 4 08:56:06 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PHashingStrategy.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TIntHashingStrategy extends Serializable {
-+ /**
-+ * Computes a hash code for the specified int. Implementors
-+ * can use the int's own value or a custom scheme designed to
-+ * minimize collisions for a known set of input.
-+ *
-+ * @param val int for which the hashcode is to be computed
-+ * @return the hashCode
-+ */
-+ public int computeHashCode(int val);
-+} // TIntHashingStrategy
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntHashSet.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,371 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+import java.util.Arrays;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed set implementation for int primitives.
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+
-+public class TIntHashSet extends TIntHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /**
-+ * Creates a new <code>TIntHashSet</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TIntHashSet() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntHashSet</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TIntHashSet(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntHashSet</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TIntHashSet(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntHashSet</code> instance containing the
-+ * elements of <tt>array</tt>.
-+ *
-+ * @param array an array of <code>int</code> primitives
-+ */
-+ public TIntHashSet(int[] array) {
-+ this(array.length);
-+ addAll(array);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntHash</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntHashSet(TIntHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntHashSet(int initialCapacity, TIntHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntHashSet(int initialCapacity, float loadFactor, TIntHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntHashSet</code> instance containing the
-+ * elements of <tt>array</tt>.
-+ *
-+ * @param array an array of <code>int</code> primitives
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntHashSet(int[] array, TIntHashingStrategy strategy) {
-+ this(array.length, strategy);
-+ addAll(array);
-+ }
-+
-+ /**
-+ * @return a TIntIterator with access to the values in this set
-+ */
-+ public TIntIterator iterator() {
-+ return new TIntIterator(this);
-+ }
-+
-+ /**
-+ * Inserts a value into the set.
-+ *
-+ * @param val an <code>int</code> value
-+ * @return true if the set was modified by the add operation
-+ */
-+ public boolean add(int val) {
-+ int index = insertionIndex(val);
-+
-+ if (index < 0) {
-+ return false; // already present in set, nothing to add
-+ }
-+
-+ byte previousState = _states[index];
-+ _set[index] = val;
-+ _states[index] = FULL;
-+ postInsertHook(previousState == FREE);
-+
-+ return true; // yes, we added something
-+ }
-+
-+ /**
-+ * Expands the set to accomodate new values.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ int oldSet[] = _set;
-+ byte oldStates[] = _states;
-+
-+ _set = new int[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ int o = oldSet[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Returns a new array containing the values in the set.
-+ *
-+ * @return an <code>int[]</code> value
-+ */
-+ public int[] toArray() {
-+ int[] result = new int[size()];
-+ int[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = states.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ result[j++] = set[i];
-+ }
-+ }
-+ return result;
-+ }
-+
-+ /**
-+ * Empties the set.
-+ */
-+ public void clear() {
-+ super.clear();
-+ int[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = set.length; i-- > 0;) {
-+ set[i] = (int)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Compares this set with another set for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TIntHashSet)) {
-+ return false;
-+ }
-+ final TIntHashSet that = (TIntHashSet)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEach(new TIntProcedure() {
-+ public final boolean execute(int value) {
-+ return that.contains(value);
-+ }
-+ });
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEach(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TIntProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(int key) {
-+ h += _hashingStrategy.computeHashCode(key);
-+ return true;
-+ }
-+ }
-+
-+ /**
-+ * Removes <tt>val</tt> from the set.
-+ *
-+ * @param val an <code>int</code> value
-+ * @return true if the set was modified by the remove operation.
-+ */
-+ public boolean remove(int val) {
-+ int index = index(val);
-+ if (index >= 0) {
-+ removeAt(index);
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Tests the set to determine if all of the elements in
-+ * <tt>array</tt> are present.
-+ *
-+ * @param array an <code>array</code> of int primitives.
-+ * @return true if all elements were present in the set.
-+ */
-+ public boolean containsAll(int[] array) {
-+ for (int i = array.length; i-- > 0;) {
-+ if (! contains(array[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Adds all of the elements in <tt>array</tt> to the set.
-+ *
-+ * @param array an <code>array</code> of int primitives.
-+ * @return true if the set was modified by the add all operation.
-+ */
-+ public boolean addAll(int[] array) {
-+ boolean changed = false;
-+ for (int i = array.length; i-- > 0;) {
-+ if (add(array[i])) {
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+ /**
-+ * Removes all of the elements in <tt>array</tt> from the set.
-+ *
-+ * @param array an <code>array</code> of int primitives.
-+ * @return true if the set was modified by the remove all operation.
-+ */
-+ public boolean removeAll(int[] array) {
-+ boolean changed = false;
-+ for (int i = array.length; i-- > 0;) {
-+ if (remove(array[i])) {
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+ /**
-+ * Removes any values in the set which are not contained in
-+ * <tt>array</tt>.
-+ *
-+ * @param array an <code>array</code> of int primitives.
-+ * @return true if the set was modified by the retain all operation
-+ */
-+ public boolean retainAll(int[] array) {
-+ boolean changed = false;
-+ Arrays.sort(array);
-+ int[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = set.length; i-- > 0;) {
-+ if (states[i] == FULL && (Arrays.binarySearch(array,set[i]) < 0)) {
-+ remove(set[i]);
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure(out);
-+ if (! forEach(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+
-+ // ENTRIES
-+ setUp(size);
-+ while (size-- > 0) {
-+ int val = in.readInt();
-+ add(val);
-+ }
-+ }
-+} // TIntHashSet
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntIntHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for int keys and int values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TIntIntHashMap extends TIntHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient int[] _values;
-+
-+ /**
-+ * Creates a new <code>TIntIntHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TIntIntHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntIntHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TIntIntHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntIntHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TIntIntHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntIntHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntIntHashMap(TIntHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntIntHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntIntHashMap(int initialCapacity, TIntHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntIntHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntIntHashMap(int initialCapacity, float loadFactor, TIntHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TIntIntHashMap m = (TIntIntHashMap)super.clone();
-+ m._values = (int[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TIntIntIterator with access to this map's keys and values
-+ */
-+ public TIntIntIterator iterator() {
-+ return new TIntIntIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new int[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @param value an <code>int</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (int)0 if none was found.
-+ */
-+ public int put(int key, int value) {
-+ byte previousState;
-+ int previous = (int)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ int oldKeys[] = _set;
-+ int oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new int[newCapacity];
-+ _values = new int[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ int o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>int</code> value
-+ * @return the value of <tt>key</tt> or (int)0 if no such mapping exists.
-+ */
-+ public int get(int key) {
-+ int index = index(key);
-+ return index < 0 ? (int)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ int[] keys = _set;
-+ int[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (int)0;
-+ vals[i] = (int)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @return an <code>int</code> value, or (int)0 if no mapping for key exists
-+ */
-+ public int remove(int key) {
-+ int prev = (int)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TIntIntHashMap)) {
-+ return false;
-+ }
-+ TIntIntHashMap that = (TIntIntHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TIntIntProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(int key, int value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TIntIntProcedure {
-+ private final TIntIntHashMap _otherMap;
-+
-+ EqProcedure(TIntIntHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(int key, int value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two ints for equality.
-+ */
-+ private final boolean eq(int v1, int v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (int)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public int[] getValues() {
-+ int[] vals = new int[size()];
-+ int[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public int[] keys() {
-+ int[] keys = new int[size()];
-+ int[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>int</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(int val) {
-+ byte[] states = _states;
-+ int[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(int key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TIntProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TIntProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TIntProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TIntProcedure procedure) {
-+ byte[] states = _states;
-+ int[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOIntIntProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TIntIntProcedure procedure) {
-+ byte[] states = _states;
-+ int[] keys = _set;
-+ int[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TIntIntProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ int[] keys = _set;
-+ int[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TIntFunction</code> value
-+ */
-+ public void transformValues(TIntFunction function) {
-+ byte[] states = _states;
-+ int[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(int key) {
-+ return adjustValue(key, (int)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(int key, int amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ int key = in.readInt();
-+ int val = in.readInt();
-+ put(key, val);
-+ }
-+ }
-+} // TIntIntHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntIntIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type int and int.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TIntIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TIntIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TIntIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TIntIntIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TIntIntIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TIntIntHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TIntIntIterator(TIntIntHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public int key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public int value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public int setValue(int val) {
-+ int old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TIntIntIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntIntProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type int and int.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TIntIntProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>int</code> value
-+ * @param b a <code>int</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(int a, int b);
-+}// TIntIntProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,56 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for int collections.
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TIntIterator extends TPrimitiveIterator {
-+ /** the collection on which the iterator operates */
-+ private final TIntHash _hash;
-+
-+ /**
-+ * Creates a TIntIterator for the elements in the specified collection.
-+ */
-+ public TIntIterator(TIntHash hash) {
-+ super(hash);
-+ this._hash = hash;
-+ }
-+
-+ /**
-+ * Advances the iterator to the next element in the underlying collection
-+ * and returns it.
-+ *
-+ * @return the next int in the collection
-+ * @exception NoSuchElementException if the iterator is already exhausted
-+ */
-+ public int next() {
-+ moveToNextIndex();
-+ return _hash._set[_index];
-+ }
-+}// TIntIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntLongHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for int keys and long values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TIntLongHashMap extends TIntHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient long[] _values;
-+
-+ /**
-+ * Creates a new <code>TIntLongHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TIntLongHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntLongHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TIntLongHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntLongHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TIntLongHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntLongHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntLongHashMap(TIntHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntLongHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntLongHashMap(int initialCapacity, TIntHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntLongHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntLongHashMap(int initialCapacity, float loadFactor, TIntHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TIntLongHashMap m = (TIntLongHashMap)super.clone();
-+ m._values = (long[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TIntLongIterator with access to this map's keys and values
-+ */
-+ public TIntLongIterator iterator() {
-+ return new TIntLongIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new long[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @param value an <code>long</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (int)0 if none was found.
-+ */
-+ public long put(int key, long value) {
-+ byte previousState;
-+ long previous = (long)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ int oldKeys[] = _set;
-+ long oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new int[newCapacity];
-+ _values = new long[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ int o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>int</code> value
-+ * @return the value of <tt>key</tt> or (int)0 if no such mapping exists.
-+ */
-+ public long get(int key) {
-+ int index = index(key);
-+ return index < 0 ? (long)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ int[] keys = _set;
-+ long[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (int)0;
-+ vals[i] = (long)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @return an <code>long</code> value, or (int)0 if no mapping for key exists
-+ */
-+ public long remove(int key) {
-+ long prev = (long)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TIntLongHashMap)) {
-+ return false;
-+ }
-+ TIntLongHashMap that = (TIntLongHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TIntLongProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(int key, long value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TIntLongProcedure {
-+ private final TIntLongHashMap _otherMap;
-+
-+ EqProcedure(TIntLongHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(int key, long value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two longs for equality.
-+ */
-+ private final boolean eq(long v1, long v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (long)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public long[] getValues() {
-+ long[] vals = new long[size()];
-+ long[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public int[] keys() {
-+ int[] keys = new int[size()];
-+ int[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>long</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(long val) {
-+ byte[] states = _states;
-+ long[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(int key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TIntProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TIntProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TLongProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TLongProcedure procedure) {
-+ byte[] states = _states;
-+ long[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOIntLongProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TIntLongProcedure procedure) {
-+ byte[] states = _states;
-+ int[] keys = _set;
-+ long[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TIntLongProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ int[] keys = _set;
-+ long[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TLongFunction</code> value
-+ */
-+ public void transformValues(TLongFunction function) {
-+ byte[] states = _states;
-+ long[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(int key) {
-+ return adjustValue(key, (long)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(int key, long amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ int key = in.readInt();
-+ long val = in.readLong();
-+ put(key, val);
-+ }
-+ }
-+} // TIntLongHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntLongIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type int and long.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TIntLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TIntLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TIntLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TIntLongIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TIntLongIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TIntLongHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TIntLongIterator(TIntLongHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public int key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public long value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public long setValue(long val) {
-+ long old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TIntLongIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntLongProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type int and long.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TIntLongProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>int</code> value
-+ * @param b a <code>long</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(int a, long b);
-+}// TIntLongProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntObjectHashMap.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,507 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for int keys and Object values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TIntObjectHashMap<V> extends TIntHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient V[] _values;
-+
-+ /**
-+ * Creates a new <code>TIntObjectHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TIntObjectHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntObjectHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TIntObjectHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntObjectHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TIntObjectHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntObjectHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntObjectHashMap(TIntHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntObjectHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntObjectHashMap(int initialCapacity, TIntHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntObjectHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntObjectHashMap(int initialCapacity, float loadFactor, TIntHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public TIntObjectHashMap<V> clone() {
-+ TIntObjectHashMap<V> m = (TIntObjectHashMap<V>)super.clone();
-+ m._values = (V[]) this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TIntObjectIterator with access to this map's keys and values
-+ */
-+ public TIntObjectIterator<V> iterator() {
-+ return new TIntObjectIterator<V>(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = (V[]) new Object[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (int)0 if none was found.
-+ */
-+ public V put(int key, V value) {
-+ byte previousState;
-+ V previous = null;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ int oldKeys[] = _set;
-+ V oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new int[newCapacity];
-+ _values = (V[]) new Object[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ int o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>int</code> value
-+ * @return the value of <tt>key</tt> or (int)0 if no such mapping exists.
-+ */
-+ public V get(int key) {
-+ int index = index(key);
-+ return index < 0 ? null : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ int[] keys = _set;
-+ Object[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (int)0;
-+ vals[i] = null;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @return an <code>Object</code> value or (int)0 if no such mapping exists.
-+ */
-+ public V remove(int key) {
-+ V prev = null;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TIntObjectHashMap)) {
-+ return false;
-+ }
-+ TIntObjectHashMap that = (TIntObjectHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TIntObjectProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(int key, Object value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TIntObjectProcedure {
-+ private final TIntObjectHashMap _otherMap;
-+
-+ EqProcedure(TIntObjectHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(int key, Object value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two objects for equality.
-+ */
-+ private final boolean eq(Object o1, Object o2) {
-+ return o1 == o2 || ((o1 != null) && o1.equals(o2));
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = null;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public Object[] getValues() {
-+ Object[] vals = new Object[size()];
-+ V[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public int[] keys() {
-+ int[] keys = new int[size()];
-+ int[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(V val) {
-+ byte[] states = _states;
-+ V[] vals = _values;
-+
-+ // special case null values so that we don't have to
-+ // perform null checks before every call to equals()
-+ if (null == val) {
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL &&
-+ val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ } else {
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL &&
-+ (val == vals[i] || val.equals(vals[i]))) {
-+ return true;
-+ }
-+ }
-+ } // end of else
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(int key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TIntProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TIntProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TObjectProcedure<V> procedure) {
-+ byte[] states = _states;
-+ V[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOIntObjectProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TIntObjectProcedure<V> procedure) {
-+ byte[] states = _states;
-+ int[] keys = _set;
-+ V[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TIntObjectProcedure<V> procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ int[] keys = _set;
-+ V[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TObjectFunction</code> value
-+ */
-+ public void transformValues(TObjectFunction<V,V> function) {
-+ byte[] states = _states;
-+ V[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ int key = in.readInt();
-+ V val = (V) in.readObject();
-+ put(key, val);
-+ }
-+ }
-+} // TIntObjectHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntObjectIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,151 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type int and Object.
-+ * <p/>
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ * <p/>
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ * <p/>
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ * <p/>
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ * <p/>
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TIntObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TIntObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TIntObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TIntObjectIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2OIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TIntObjectIterator<V> extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TIntObjectHashMap<V> _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TIntObjectIterator(TIntObjectHashMap<V> map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException
-+ * if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public int key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public V value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public V setValue(V val) {
-+ V old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TIntObjectIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntObjectProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type int and Object.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2OProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TIntObjectProcedure<T> {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>int</code> value
-+ * @param b an <code>Object</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(int a, T b);
-+}// TIntObjectProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,46 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures with one int paramater.
-+ *
-+ * Created: Mon Nov 5 21:45:49 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TIntProcedure {
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param value a value of type <code>int</code>
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(int value);
-+}// TIntProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntShortHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for int keys and short values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TIntShortHashMap extends TIntHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient short[] _values;
-+
-+ /**
-+ * Creates a new <code>TIntShortHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TIntShortHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntShortHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TIntShortHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntShortHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TIntShortHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntShortHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntShortHashMap(TIntHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntShortHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntShortHashMap(int initialCapacity, TIntHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TIntShortHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TIntShortHashMap(int initialCapacity, float loadFactor, TIntHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TIntShortHashMap m = (TIntShortHashMap)super.clone();
-+ m._values = (short[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TIntShortIterator with access to this map's keys and values
-+ */
-+ public TIntShortIterator iterator() {
-+ return new TIntShortIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new short[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @param value an <code>short</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (int)0 if none was found.
-+ */
-+ public short put(int key, short value) {
-+ byte previousState;
-+ short previous = (short)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ int oldKeys[] = _set;
-+ short oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new int[newCapacity];
-+ _values = new short[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ int o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>int</code> value
-+ * @return the value of <tt>key</tt> or (int)0 if no such mapping exists.
-+ */
-+ public short get(int key) {
-+ int index = index(key);
-+ return index < 0 ? (short)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ int[] keys = _set;
-+ short[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (int)0;
-+ vals[i] = (short)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @return an <code>short</code> value, or (int)0 if no mapping for key exists
-+ */
-+ public short remove(int key) {
-+ short prev = (short)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TIntShortHashMap)) {
-+ return false;
-+ }
-+ TIntShortHashMap that = (TIntShortHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TIntShortProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(int key, short value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TIntShortProcedure {
-+ private final TIntShortHashMap _otherMap;
-+
-+ EqProcedure(TIntShortHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(int key, short value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two shorts for equality.
-+ */
-+ private final boolean eq(short v1, short v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (short)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public short[] getValues() {
-+ short[] vals = new short[size()];
-+ short[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public int[] keys() {
-+ int[] keys = new int[size()];
-+ int[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>short</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(short val) {
-+ byte[] states = _states;
-+ short[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>int</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(int key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TIntProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TIntProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TShortProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TShortProcedure procedure) {
-+ byte[] states = _states;
-+ short[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOIntShortProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TIntShortProcedure procedure) {
-+ byte[] states = _states;
-+ int[] keys = _set;
-+ short[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TIntShortProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ int[] keys = _set;
-+ short[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TShortFunction</code> value
-+ */
-+ public void transformValues(TShortFunction function) {
-+ byte[] states = _states;
-+ short[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(int key) {
-+ return adjustValue(key, (short)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(int key, short amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ int key = in.readInt();
-+ short val = in.readShort();
-+ put(key, val);
-+ }
-+ }
-+} // TIntShortHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntShortIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type int and short.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TIntShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TIntShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TIntShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TIntShortIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TIntShortIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TIntShortHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TIntShortIterator(TIntShortHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public int key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public short value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public short setValue(short val) {
-+ short old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TIntShortIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TIntShortProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type int and short.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TIntShortProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>int</code> value
-+ * @param b a <code>short</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(int a, short b);
-+}// TIntShortProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongArrayList.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,905 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.Externalizable;
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.util.Arrays;
-+import java.util.Random;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * A resizable, array-backed list of long primitives.
-+ *
-+ * Created: Sat Dec 29 14:21:12 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+
-+public class TLongArrayList implements Externalizable, Cloneable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the data of the list */
-+ protected long[] _data;
-+
-+ /** the index after the last entry in the list */
-+ protected int _pos;
-+
-+ /** the default capacity for new lists */
-+ protected static final int DEFAULT_CAPACITY = 10;
-+
-+ /**
-+ * Creates a new <code>TLongArrayList</code> instance with the
-+ * default capacity.
-+ */
-+ public TLongArrayList() {
-+ this(DEFAULT_CAPACITY);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongArrayList</code> instance with the
-+ * specified capacity.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public TLongArrayList(int capacity) {
-+ _data = new long[capacity];
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongArrayList</code> instance whose
-+ * capacity is the greater of the length of <tt>values</tt> and
-+ * DEFAULT_CAPACITY and whose initial contents are the specified
-+ * values.
-+ *
-+ * @param values an <code>long[]</code> value
-+ */
-+ public TLongArrayList(long[] values) {
-+ this(Math.max(values.length, DEFAULT_CAPACITY));
-+ add(values);
-+ }
-+
-+ // sizing
-+
-+ /**
-+ * Grow the internal array as needed to accomodate the specified
-+ * number of elements. The size of the array longs on each
-+ * resize unless <tt>capacity</tt> requires more than twice the
-+ * current capacity.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public void ensureCapacity(int capacity) {
-+ if (capacity > _data.length) {
-+ int newCap = Math.max(_data.length << 1, capacity);
-+ long[] tmp = new long[newCap];
-+ System.arraycopy(_data, 0, tmp, 0, _data.length);
-+ _data = tmp;
-+ }
-+ }
-+
-+ /**
-+ * Returns the number of values in the list.
-+ *
-+ * @return the number of values in the list.
-+ */
-+ public int size() {
-+ return _pos;
-+ }
-+
-+ /**
-+ * Tests whether this list contains any values.
-+ *
-+ * @return true if the list is empty.
-+ */
-+ public boolean isEmpty() {
-+ return _pos == 0;
-+ }
-+
-+ /**
-+ * Sheds any excess capacity above and beyond the current size of
-+ * the list.
-+ */
-+ public void trimToSize() {
-+ if (_data.length > size()) {
-+ long[] tmp = new long[size()];
-+ toNativeArray(tmp, 0, tmp.length);
-+ _data = tmp;
-+ }
-+ }
-+
-+ // modifying
-+
-+ /**
-+ * Adds <tt>val</tt> to the end of the list, growing as needed.
-+ *
-+ * @param val an <code>long</code> value
-+ */
-+ public void add(long val) {
-+ ensureCapacity(_pos + 1);
-+ _data[_pos++] = val;
-+ }
-+
-+ /**
-+ * Adds the values in the array <tt>vals</tt> to the end of the
-+ * list, in order.
-+ *
-+ * @param vals an <code>long[]</code> value
-+ */
-+ public void add(long[] vals) {
-+ add(vals, 0, vals.length);
-+ }
-+
-+ /**
-+ * Adds a subset of the values in the array <tt>vals</tt> to the
-+ * end of the list, in order.
-+ *
-+ * @param vals an <code>long[]</code> value
-+ * @param offset the offset at which to start copying
-+ * @param length the number of values to copy.
-+ */
-+ public void add(long[] vals, int offset, int length) {
-+ ensureCapacity(_pos + length);
-+ System.arraycopy(vals, offset, _data, _pos, length);
-+ _pos += length;
-+ }
-+
-+ /**
-+ * Inserts <tt>value</tt> into the list at <tt>offset</tt>. All
-+ * values including and to the right of <tt>offset</tt> are shifted
-+ * to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param value an <code>long</code> value
-+ */
-+ public void insert(int offset, long value) {
-+ if (offset == _pos) {
-+ add(value);
-+ return;
-+ }
-+ ensureCapacity(_pos + 1);
-+ // shift right
-+ System.arraycopy(_data, offset, _data, offset + 1, _pos - offset);
-+ // insert
-+ _data[offset] = value;
-+ _pos++;
-+ }
-+
-+ /**
-+ * Inserts the array of <tt>values</tt> into the list at
-+ * <tt>offset</tt>. All values including and to the right of
-+ * <tt>offset</tt> are shifted to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param values an <code>long[]</code> value
-+ */
-+ public void insert(int offset, long[] values) {
-+ insert(offset, values, 0, values.length);
-+ }
-+
-+ /**
-+ * Inserts a slice of the array of <tt>values</tt> into the list
-+ * at <tt>offset</tt>. All values including and to the right of
-+ * <tt>offset</tt> are shifted to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param values an <code>long[]</code> value
-+ * @param valOffset the offset in the values array at which to
-+ * start copying.
-+ * @param len the number of values to copy from the values array
-+ */
-+ public void insert(int offset, long[] values, int valOffset, int len) {
-+ if (offset == _pos) {
-+ add(values, valOffset, len);
-+ return;
-+ }
-+
-+ ensureCapacity(_pos + len);
-+ // shift right
-+ System.arraycopy(_data, offset, _data, offset + len, _pos - offset);
-+ // insert
-+ System.arraycopy(values, valOffset, _data, offset, len);
-+ _pos += len;
-+ }
-+
-+ /**
-+ * Returns the value at the specified offset.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return an <code>long</code> value
-+ */
-+ public long get(int offset) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ return _data[offset];
-+ }
-+
-+ /**
-+ * Returns the value at the specified offset without doing any
-+ * bounds checking.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return an <code>long</code> value
-+ */
-+ public long getQuick(int offset) {
-+ return _data[offset];
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>long</code> value
-+ */
-+ public void set(int offset, long val) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ _data[offset] = val;
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset and returns the
-+ * previously stored value.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>long</code> value
-+ * @return the value previously stored at offset.
-+ */
-+ public long getSet(int offset, long val) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ long old = _data[offset];
-+ _data[offset] = val;
-+ return old;
-+ }
-+
-+ /**
-+ * Replace the values in the list starting at <tt>offset</tt> with
-+ * the contents of the <tt>values</tt> array.
-+ *
-+ * @param offset the first offset to replace
-+ * @param values the source of the new values
-+ */
-+ public void set(int offset, long[] values) {
-+ set(offset, values, 0, values.length);
-+ }
-+
-+ /**
-+ * Replace the values in the list starting at <tt>offset</tt> with
-+ * <tt>length</tt> values from the <tt>values</tt> array, starting
-+ * at valOffset.
-+ *
-+ * @param offset the first offset to replace
-+ * @param values the source of the new values
-+ * @param valOffset the first value to copy from the values array
-+ * @param length the number of values to copy
-+ */
-+ public void set(int offset, long[] values, int valOffset, int length) {
-+ if (offset < 0 || offset + length > _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ System.arraycopy(values, valOffset, _data, offset, length);
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset without doing any bounds
-+ * checking.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>long</code> value
-+ */
-+ public void setQuick(int offset, long val) {
-+ _data[offset] = val;
-+ }
-+
-+ /**
-+ * Flushes the internal state of the list, resetting the capacity
-+ * to the default.
-+ */
-+ public void clear() {
-+ clear(DEFAULT_CAPACITY);
-+ }
-+
-+ /**
-+ * Flushes the internal state of the list, setting the capacity of
-+ * the empty list to <tt>capacity</tt>.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public void clear(int capacity) {
-+ _data = new long[capacity];
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Sets the size of the list to 0, but does not change its
-+ * capacity. This method can be used as an alternative to the
-+ * {@link #clear clear} method if you want to recyle a list without
-+ * allocating new backing arrays.
-+ *
-+ * @see #clear
-+ */
-+ public void reset() {
-+ _pos = 0;
-+ fill((long)0);
-+ }
-+
-+ /**
-+ * Sets the size of the list to 0, but does not change its
-+ * capacity. This method can be used as an alternative to the
-+ * {@link #clear clear} method if you want to recyle a list
-+ * without allocating new backing arrays. This method differs
-+ * from {@link #reset reset} in that it does not clear the old
-+ * values in the backing array. Thus, it is possible for {@link
-+ * #getQuick getQuick} to return stale data if this method is used
-+ * and the caller is careless about bounds checking.
-+ *
-+ * @see #reset
-+ * @see #clear
-+ * @see #getQuick
-+ */
-+ public void resetQuick() {
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Removes the value at <tt>offset</tt> from the list.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return the value previously stored at offset.
-+ */
-+ public long remove(int offset) {
-+ long old = get(offset);
-+ remove(offset, 1);
-+ return old;
-+ }
-+
-+ /**
-+ * Removes <tt>length</tt> values from the list, starting at
-+ * <tt>offset</tt>
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param length an <code>int</code> value
-+ */
-+ public void remove(int offset, int length) {
-+ if (offset < 0 || offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+
-+ if (offset == 0) {
-+ // data at the front
-+ System.arraycopy(_data, length, _data, 0, _pos - length);
-+ } else if (_pos - length == offset) {
-+ // no copy to make, decrementing pos "deletes" values at
-+ // the end
-+ } else {
-+ // data in the middle
-+ System.arraycopy(_data, offset + length,
-+ _data, offset, _pos - (offset + length));
-+ }
-+ _pos -= length;
-+ // no need to clear old values beyond _pos, because this is a
-+ // primitive collection and 0 takes as much room as any other
-+ // value
-+ }
-+
-+ /**
-+ * Transform each value in the list using the specified function.
-+ *
-+ * @param function a <code>TLongFunction</code> value
-+ */
-+ public void transformValues(TLongFunction function) {
-+ for (int i = _pos; i-- > 0;) {
-+ _data[i] = function.execute(_data[i]);
-+ }
-+ }
-+
-+ /**
-+ * Reverse the order of the elements in the list.
-+ */
-+ public void reverse() {
-+ reverse(0, _pos);
-+ }
-+
-+ /**
-+ * Reverse the order of the elements in the range of the list.
-+ *
-+ * @param from the inclusive index at which to start reversing
-+ * @param to the exclusive index at which to stop reversing
-+ */
-+ public void reverse(int from, int to) {
-+ if (from == to) {
-+ return; // nothing to do
-+ }
-+ if (from > to) {
-+ throw new IllegalArgumentException("from cannot be greater than to");
-+ }
-+ for (int i = from, j = to - 1; i < j; i++, j--) {
-+ swap(i, j);
-+ }
-+ }
-+
-+ /**
-+ * Shuffle the elements of the list using the specified random
-+ * number generator.
-+ *
-+ * @param rand a <code>Random</code> value
-+ */
-+ public void shuffle(Random rand) {
-+ for (int i = _pos; i-- > 1;) {
-+ swap(i, rand.nextInt(i));
-+ }
-+ }
-+
-+ /**
-+ * Swap the values at offsets <tt>i</tt> and <tt>j</tt>.
-+ *
-+ * @param i an offset into the data array
-+ * @param j an offset into the data array
-+ */
-+ private final void swap(int i, int j) {
-+ long tmp = _data[i];
-+ _data[i] = _data[j];
-+ _data[j] = tmp;
-+ }
-+
-+ // copying
-+
-+ /**
-+ * Returns a clone of this list. Since this is a primitive
-+ * collection, this will be a deep clone.
-+ *
-+ * @return a deep clone of the list.
-+ */
-+ public Object clone() {
-+ TLongArrayList list = null;
-+ try {
-+ list = (TLongArrayList) super.clone();
-+ list._data = toNativeArray();
-+ } catch (CloneNotSupportedException e) {
-+ // it's supported
-+ } // end of try-catch
-+ return list;
-+ }
-+
-+ /**
-+ * Copies the contents of the list into a native array.
-+ *
-+ * @return an <code>long[]</code> value
-+ */
-+ public long[] toNativeArray() {
-+ return toNativeArray(0, _pos);
-+ }
-+
-+ /**
-+ * Copies a slice of the list into a native array.
-+ *
-+ * @param offset the offset at which to start copying
-+ * @param len the number of values to copy.
-+ * @return an <code>long[]</code> value
-+ */
-+ public long[] toNativeArray(int offset, int len) {
-+ long[] rv = new long[len];
-+ toNativeArray(rv, offset, len);
-+ return rv;
-+ }
-+
-+ /**
-+ * Copies a slice of the list into a native array.
-+ *
-+ * @param dest the array to copy into.
-+ * @param offset the offset of the first value to copy
-+ * @param len the number of values to copy.
-+ */
-+ public void toNativeArray(long[] dest, int offset, int len) {
-+ if (len == 0) {
-+ return; // nothing to copy
-+ }
-+ if (offset < 0 || offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ System.arraycopy(_data, offset, dest, 0, len);
-+ }
-+
-+ // comparing
-+
-+ /**
-+ * Compares this list to another list, value by value.
-+ *
-+ * @param other the object to compare against
-+ * @return true if other is a TLongArrayList and has exactly the
-+ * same values.
-+ */
-+ public boolean equals(Object other) {
-+ if (other == this) {
-+ return true;
-+ } else if (other instanceof TLongArrayList) {
-+ TLongArrayList that = (TLongArrayList)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ } else {
-+ for (int i = _pos; i-- > 0;) {
-+ if (this._data[i] != that._data[i]) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public int hashCode() {
-+ int h = 0;
-+ for (int i = _pos; i-- > 0;) {
-+ h += HashFunctions.hash(_data[i]);
-+ }
-+ return h;
-+ }
-+
-+ // procedures
-+
-+ /**
-+ * Applies the procedure to each value in the list in ascending
-+ * (front to back) order.
-+ *
-+ * @param procedure a <code>TLongProcedure</code> value
-+ * @return true if the procedure did not terminate prematurely.
-+ */
-+ public boolean forEach(TLongProcedure procedure) {
-+ for (int i = 0; i < _pos; i++) {
-+ if (! procedure.execute(_data[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Applies the procedure to each value in the list in descending
-+ * (back to front) order.
-+ *
-+ * @param procedure a <code>TLongProcedure</code> value
-+ * @return true if the procedure did not terminate prematurely.
-+ */
-+ public boolean forEachDescending(TLongProcedure procedure) {
-+ for (int i = _pos; i-- > 0;) {
-+ if (! procedure.execute(_data[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ // sorting
-+
-+ /**
-+ * Sort the values in the list (ascending) using the Sun quicksort
-+ * implementation.
-+ *
-+ * @see java.util.Arrays#sort
-+ */
-+ public void sort() {
-+ Arrays.sort(_data, 0, _pos);
-+ }
-+
-+ /**
-+ * Sort a slice of the list (ascending) using the Sun quicksort
-+ * implementation.
-+ *
-+ * @param fromIndex the index at which to start sorting (inclusive)
-+ * @param toIndex the index at which to stop sorting (exclusive)
-+ * @see java.util.Arrays#sort
-+ */
-+ public void sort(int fromIndex, int toIndex) {
-+ Arrays.sort(_data, fromIndex, toIndex);
-+ }
-+
-+ // filling
-+
-+ /**
-+ * Fills every slot in the list with the specified value.
-+ *
-+ * @param val the value to use when filling
-+ */
-+ public void fill(long val) {
-+ Arrays.fill(_data, 0, _pos, val);
-+ }
-+
-+ /**
-+ * Fills a range in the list with the specified value.
-+ *
-+ * @param fromIndex the offset at which to start filling (inclusive)
-+ * @param toIndex the offset at which to stop filling (exclusive)
-+ * @param val the value to use when filling
-+ */
-+ public void fill(int fromIndex, int toIndex, long val) {
-+ if (toIndex > _pos) {
-+ ensureCapacity(toIndex);
-+ _pos = toIndex;
-+ }
-+ Arrays.fill(_data, fromIndex, toIndex, val);
-+ }
-+
-+ // searching
-+
-+ /**
-+ * Performs a binary search for <tt>value</tt> in the entire list.
-+ * Note that you <b>must</b> @{link #sort sort} the list before
-+ * doing a search.
-+ *
-+ * @param value the value to search for
-+ * @return the absolute offset in the list of the value, or its
-+ * negative insertion point into the sorted list.
-+ */
-+ public int binarySearch(long value) {
-+ return binarySearch(value, 0, _pos);
-+ }
-+
-+ /**
-+ * Performs a binary search for <tt>value</tt> in the specified
-+ * range. Note that you <b>must</b> @{link #sort sort} the list
-+ * or the range before doing a search.
-+ *
-+ * @param value the value to search for
-+ * @param fromIndex the lower boundary of the range (inclusive)
-+ * @param toIndex the upper boundary of the range (exclusive)
-+ * @return the absolute offset in the list of the value, or its
-+ * negative insertion point into the sorted list.
-+ */
-+ public int binarySearch(long value, int fromIndex, int toIndex) {
-+ if (fromIndex < 0) {
-+ throw new ArrayIndexOutOfBoundsException(fromIndex);
-+ }
-+ if (toIndex > _pos) {
-+ throw new ArrayIndexOutOfBoundsException(toIndex);
-+ }
-+
-+ int low = fromIndex;
-+ int high = toIndex - 1;
-+
-+ while (low <= high) {
-+ int mid = (low + high) >> 1;
-+ long midVal = _data[mid];
-+
-+ if (midVal < value) {
-+ low = mid + 1;
-+ } else if (midVal > value) {
-+ high = mid - 1;
-+ } else {
-+ return mid; // value found
-+ }
-+ }
-+ return -(low + 1); // value not found.
-+ }
-+
-+ /**
-+ * Searches the list front to back for the index of
-+ * <tt>value</tt>.
-+ *
-+ * @param value an <code>long</code> value
-+ * @return the first offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int indexOf(long value) {
-+ return indexOf(0, value);
-+ }
-+
-+ /**
-+ * Searches the list front to back for the index of
-+ * <tt>value</tt>, starting at <tt>offset</tt>.
-+ *
-+ * @param offset the offset at which to start the linear search
-+ * (inclusive)
-+ * @param value an <code>long</code> value
-+ * @return the first offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int indexOf(int offset, long value) {
-+ for (int i = offset; i < _pos; i++) {
-+ if (_data[i] == value) {
-+ return i;
-+ }
-+ }
-+ return -1;
-+ }
-+
-+ /**
-+ * Searches the list back to front for the last index of
-+ * <tt>value</tt>.
-+ *
-+ * @param value an <code>long</code> value
-+ * @return the last offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int lastIndexOf(long value) {
-+ return lastIndexOf(_pos, value);
-+ }
-+
-+ /**
-+ * Searches the list back to front for the last index of
-+ * <tt>value</tt>, starting at <tt>offset</tt>.
-+ *
-+ * @param offset the offset at which to start the linear search
-+ * (exclusive)
-+ * @param value an <code>long</code> value
-+ * @return the last offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int lastIndexOf(int offset, long value) {
-+ for (int i = offset; i-- > 0;) {
-+ if (_data[i] == value) {
-+ return i;
-+ }
-+ }
-+ return -1;
-+ }
-+
-+ /**
-+ * Searches the list for <tt>value</tt>
-+ *
-+ * @param value an <code>long</code> value
-+ * @return true if value is in the list.
-+ */
-+ public boolean contains(long value) {
-+ return lastIndexOf(value) >= 0;
-+ }
-+
-+ /**
-+ * Searches the list for values satisfying <tt>condition</tt> in
-+ * the manner of the *nix <tt>grep</tt> utility.
-+ *
-+ * @param condition a condition to apply to each element in the list
-+ * @return a list of values which match the condition.
-+ */
-+ public TLongArrayList grep(TLongProcedure condition) {
-+ TLongArrayList list = new TLongArrayList();
-+ for (int i = 0; i < _pos; i++) {
-+ if (condition.execute(_data[i])) {
-+ list.add(_data[i]);
-+ }
-+ }
-+ return list;
-+ }
-+
-+ /**
-+ * Searches the list for values which do <b>not</b> satisfy
-+ * <tt>condition</tt>. This is akin to *nix <code>grep -v</code>.
-+ *
-+ * @param condition a condition to apply to each element in the list
-+ * @return a list of values which do not match the condition.
-+ */
-+ public TLongArrayList inverseGrep(TLongProcedure condition) {
-+ TLongArrayList list = new TLongArrayList();
-+ for (int i = 0; i < _pos; i++) {
-+ if (! condition.execute(_data[i])) {
-+ list.add(_data[i]);
-+ }
-+ }
-+ return list;
-+ }
-+
-+ /**
-+ * Finds the maximum value in the list.
-+ *
-+ * @return the largest value in the list.
-+ * @exception IllegalStateException if the list is empty
-+ */
-+ public long max() {
-+ if (size() == 0) {
-+ throw new IllegalStateException("cannot find maximum of an empty list");
-+ }
-+ long max = _data[_pos - 1];
-+ for (int i = _pos - 1; i-- > 0;) {
-+ if ( _data[_pos] > max ) {
-+ max = _data[_pos];
-+ }
-+ }
-+ return max;
-+ }
-+
-+ /**
-+ * Finds the minimum value in the list.
-+ *
-+ * @return the smallest value in the list.
-+ * @exception IllegalStateException if the list is empty
-+ */
-+ public long min() {
-+ if (size() == 0) {
-+ throw new IllegalStateException("cannot find minimum of an empty list");
-+ }
-+ long min = _data[_pos - 1];
-+ for (int i = _pos - 1; i-- > 0;) {
-+ if ( _data[_pos] > min ) {
-+ min = _data[_pos];
-+ }
-+ }
-+ return min;
-+ }
-+
-+ // stringification
-+
-+ /**
-+ * Returns a String representation of the list, front to back.
-+ *
-+ * @return a <code>String</code> value
-+ */
-+ public String toString() {
-+ final StringBuffer buf = new StringBuffer("{");
-+ for (int i = 0, end = _pos - 1; i < end; i++) {
-+ buf.append(_data[i]);
-+ buf.append(", ");
-+ }
-+ if (size() > 0) {
-+ buf.append(_data[_pos - 1]);
-+ }
-+ buf.append("}");
-+ return buf.toString();
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // POSITION
-+ out.writeInt( _pos );
-+
-+ // ENTRIES
-+ int len = _data.length;
-+ out.writeInt( len );
-+ for( int i = 0; i < len; i++ ) {
-+ out.writeLong( _data[ i ] );
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // POSITION
-+ _pos = in.readInt();
-+
-+ // ENTRIES
-+ int len = in.readInt();
-+ _data = new long[ len ];
-+ for( int i = 0; i < len; i++ ) {
-+ _data[ i ] = in.readLong();
-+ }
-+ }
-+} // TLongArrayList
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongByteHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for long keys and byte values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TLongByteHashMap extends TLongHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient byte[] _values;
-+
-+ /**
-+ * Creates a new <code>TLongByteHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TLongByteHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongByteHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TLongByteHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongByteHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TLongByteHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongByteHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongByteHashMap(TLongHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongByteHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongByteHashMap(int initialCapacity, TLongHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongByteHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongByteHashMap(int initialCapacity, float loadFactor, TLongHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TLongByteHashMap m = (TLongByteHashMap)super.clone();
-+ m._values = (byte[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TLongByteIterator with access to this map's keys and values
-+ */
-+ public TLongByteIterator iterator() {
-+ return new TLongByteIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new byte[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @param value an <code>byte</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (long)0 if none was found.
-+ */
-+ public byte put(long key, byte value) {
-+ byte previousState;
-+ byte previous = (byte)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ long oldKeys[] = _set;
-+ byte oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new long[newCapacity];
-+ _values = new byte[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ long o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>long</code> value
-+ * @return the value of <tt>key</tt> or (long)0 if no such mapping exists.
-+ */
-+ public byte get(long key) {
-+ int index = index(key);
-+ return index < 0 ? (byte)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ long[] keys = _set;
-+ byte[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (long)0;
-+ vals[i] = (byte)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @return an <code>byte</code> value, or (long)0 if no mapping for key exists
-+ */
-+ public byte remove(long key) {
-+ byte prev = (byte)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TLongByteHashMap)) {
-+ return false;
-+ }
-+ TLongByteHashMap that = (TLongByteHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TLongByteProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(long key, byte value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TLongByteProcedure {
-+ private final TLongByteHashMap _otherMap;
-+
-+ EqProcedure(TLongByteHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(long key, byte value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two bytes for equality.
-+ */
-+ private final boolean eq(byte v1, byte v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (byte)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public byte[] getValues() {
-+ byte[] vals = new byte[size()];
-+ byte[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public long[] keys() {
-+ long[] keys = new long[size()];
-+ long[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>byte</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(byte val) {
-+ byte[] states = _states;
-+ byte[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(long key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TLongProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TLongProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TByteProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TByteProcedure procedure) {
-+ byte[] states = _states;
-+ byte[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOLongByteProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TLongByteProcedure procedure) {
-+ byte[] states = _states;
-+ long[] keys = _set;
-+ byte[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TLongByteProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ long[] keys = _set;
-+ byte[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TByteFunction</code> value
-+ */
-+ public void transformValues(TByteFunction function) {
-+ byte[] states = _states;
-+ byte[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(long key) {
-+ return adjustValue(key, (byte)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(long key, byte amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ long key = in.readLong();
-+ byte val = in.readByte();
-+ put(key, val);
-+ }
-+ }
-+} // TLongByteHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongByteIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type long and byte.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TLongByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TLongByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TLongByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TLongByteIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TLongByteIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TLongByteHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TLongByteIterator(TLongByteHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public long key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public byte value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public byte setValue(byte val) {
-+ byte old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TLongByteIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongByteProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type long and byte.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TLongByteProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>long</code> value
-+ * @param b a <code>byte</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(long a, byte b);
-+}// TLongByteProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongDoubleHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for long keys and double values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TLongDoubleHashMap extends TLongHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient double[] _values;
-+
-+ /**
-+ * Creates a new <code>TLongDoubleHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TLongDoubleHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongDoubleHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TLongDoubleHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongDoubleHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TLongDoubleHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongDoubleHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongDoubleHashMap(TLongHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongDoubleHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongDoubleHashMap(int initialCapacity, TLongHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongDoubleHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongDoubleHashMap(int initialCapacity, float loadFactor, TLongHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TLongDoubleHashMap m = (TLongDoubleHashMap)super.clone();
-+ m._values = (double[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TLongDoubleIterator with access to this map's keys and values
-+ */
-+ public TLongDoubleIterator iterator() {
-+ return new TLongDoubleIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new double[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @param value an <code>double</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (long)0 if none was found.
-+ */
-+ public double put(long key, double value) {
-+ byte previousState;
-+ double previous = (double)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ long oldKeys[] = _set;
-+ double oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new long[newCapacity];
-+ _values = new double[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ long o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>long</code> value
-+ * @return the value of <tt>key</tt> or (long)0 if no such mapping exists.
-+ */
-+ public double get(long key) {
-+ int index = index(key);
-+ return index < 0 ? (double)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ long[] keys = _set;
-+ double[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (long)0;
-+ vals[i] = (double)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @return an <code>double</code> value, or (long)0 if no mapping for key exists
-+ */
-+ public double remove(long key) {
-+ double prev = (double)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TLongDoubleHashMap)) {
-+ return false;
-+ }
-+ TLongDoubleHashMap that = (TLongDoubleHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TLongDoubleProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(long key, double value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TLongDoubleProcedure {
-+ private final TLongDoubleHashMap _otherMap;
-+
-+ EqProcedure(TLongDoubleHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(long key, double value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two doubles for equality.
-+ */
-+ private final boolean eq(double v1, double v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (double)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public double[] getValues() {
-+ double[] vals = new double[size()];
-+ double[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public long[] keys() {
-+ long[] keys = new long[size()];
-+ long[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>double</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(double val) {
-+ byte[] states = _states;
-+ double[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(long key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TLongProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TLongProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TDoubleProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TDoubleProcedure procedure) {
-+ byte[] states = _states;
-+ double[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOLongDoubleProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TLongDoubleProcedure procedure) {
-+ byte[] states = _states;
-+ long[] keys = _set;
-+ double[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TLongDoubleProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ long[] keys = _set;
-+ double[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TDoubleFunction</code> value
-+ */
-+ public void transformValues(TDoubleFunction function) {
-+ byte[] states = _states;
-+ double[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(long key) {
-+ return adjustValue(key, (double)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(long key, double amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ long key = in.readLong();
-+ double val = in.readDouble();
-+ put(key, val);
-+ }
-+ }
-+} // TLongDoubleHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongDoubleIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type long and double.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TLongDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TLongDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TLongDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TLongDoubleIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TLongDoubleIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TLongDoubleHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TLongDoubleIterator(TLongDoubleHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public long key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public double value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public double setValue(double val) {
-+ double old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TLongDoubleIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongDoubleProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type long and double.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TLongDoubleProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>long</code> value
-+ * @param b a <code>double</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(long a, double b);
-+}// TLongDoubleProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongFloatHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for long keys and float values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TLongFloatHashMap extends TLongHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient float[] _values;
-+
-+ /**
-+ * Creates a new <code>TLongFloatHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TLongFloatHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongFloatHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TLongFloatHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongFloatHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TLongFloatHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongFloatHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongFloatHashMap(TLongHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongFloatHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongFloatHashMap(int initialCapacity, TLongHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongFloatHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongFloatHashMap(int initialCapacity, float loadFactor, TLongHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TLongFloatHashMap m = (TLongFloatHashMap)super.clone();
-+ m._values = (float[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TLongFloatIterator with access to this map's keys and values
-+ */
-+ public TLongFloatIterator iterator() {
-+ return new TLongFloatIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new float[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @param value an <code>float</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (long)0 if none was found.
-+ */
-+ public float put(long key, float value) {
-+ byte previousState;
-+ float previous = (float)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ long oldKeys[] = _set;
-+ float oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new long[newCapacity];
-+ _values = new float[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ long o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>long</code> value
-+ * @return the value of <tt>key</tt> or (long)0 if no such mapping exists.
-+ */
-+ public float get(long key) {
-+ int index = index(key);
-+ return index < 0 ? (float)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ long[] keys = _set;
-+ float[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (long)0;
-+ vals[i] = (float)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @return an <code>float</code> value, or (long)0 if no mapping for key exists
-+ */
-+ public float remove(long key) {
-+ float prev = (float)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TLongFloatHashMap)) {
-+ return false;
-+ }
-+ TLongFloatHashMap that = (TLongFloatHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TLongFloatProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(long key, float value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TLongFloatProcedure {
-+ private final TLongFloatHashMap _otherMap;
-+
-+ EqProcedure(TLongFloatHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(long key, float value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two floats for equality.
-+ */
-+ private final boolean eq(float v1, float v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (float)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public float[] getValues() {
-+ float[] vals = new float[size()];
-+ float[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public long[] keys() {
-+ long[] keys = new long[size()];
-+ long[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>float</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(float val) {
-+ byte[] states = _states;
-+ float[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(long key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TLongProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TLongProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TFloatProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TFloatProcedure procedure) {
-+ byte[] states = _states;
-+ float[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOLongFloatProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TLongFloatProcedure procedure) {
-+ byte[] states = _states;
-+ long[] keys = _set;
-+ float[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TLongFloatProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ long[] keys = _set;
-+ float[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TFloatFunction</code> value
-+ */
-+ public void transformValues(TFloatFunction function) {
-+ byte[] states = _states;
-+ float[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(long key) {
-+ return adjustValue(key, (float)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(long key, float amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ long key = in.readLong();
-+ float val = in.readFloat();
-+ put(key, val);
-+ }
-+ }
-+} // TLongFloatHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongFloatIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type long and float.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TLongFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TLongFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TLongFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TLongFloatIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TLongFloatIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TLongFloatHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TLongFloatIterator(TLongFloatHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public long key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public float value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public float setValue(float val) {
-+ float old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TLongFloatIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongFloatProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type long and float.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TLongFloatProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>long</code> value
-+ * @param b a <code>float</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(long a, float b);
-+}// TLongFloatProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongFunction.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,43 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for functions that accept and return one long primitive.
-+ *
-+ * Created: Mon Nov 5 22:19:36 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PFunction.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TLongFunction {
-+ /**
-+ * Execute this function with <tt>value</tt>
-+ *
-+ * @param value a <code>long</code> input
-+ * @return a <code>long</code> result
-+ */
-+ public long execute(long value);
-+}// TLongFunction
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongHash.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,289 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed hashing implementation for long primitives.
-+ *
-+ * Created: Sun Nov 4 08:56:06 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PHash.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+abstract public class TLongHash extends TPrimitiveHash implements TLongHashingStrategy {
-+
-+ /** the set of longs */
-+ protected transient long[] _set;
-+
-+ /** strategy used to hash values in this collection */
-+ protected TLongHashingStrategy _hashingStrategy;
-+
-+ /**
-+ * Creates a new <code>TLongHash</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TLongHash() {
-+ super();
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TLongHash(int initialCapacity) {
-+ super(initialCapacity);
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ */
-+ public TLongHash(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongHash</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongHash(TLongHashingStrategy strategy) {
-+ super();
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongHash(int initialCapacity, TLongHashingStrategy strategy) {
-+ super(initialCapacity);
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongHash(int initialCapacity, float loadFactor, TLongHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor);
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TLongHash h = (TLongHash)super.clone();
-+ h._set = (long[])this._set.clone();
-+ return h;
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _set = new long[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Searches the set for <tt>val</tt>
-+ *
-+ * @param val an <code>long</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean contains(long val) {
-+ return index(val) >= 0;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each element in the set.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the set terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEach(TLongProcedure procedure) {
-+ byte[] states = _states;
-+ long[] set = _set;
-+ for (int i = set.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(set[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Releases the element currently stored at <tt>index</tt>.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _set[index] = (long)0;
-+ super.removeAt(index);
-+ }
-+
-+ /**
-+ * Locates the index of <tt>val</tt>.
-+ *
-+ * @param val an <code>long</code> value
-+ * @return the index of <tt>val</tt> or -1 if it isn't in the set.
-+ */
-+ protected int index(long val) {
-+ int hash, probe, index, length;
-+ long[] set;
-+ byte[] states;
-+
-+ states = _states;
-+ set = _set;
-+ length = states.length;
-+ hash = _hashingStrategy.computeHashCode(val) & 0x7fffffff;
-+ index = hash % length;
-+
-+ if (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val)) {
-+ // see Knuth, p. 529
-+ probe = 1 + (hash % (length - 2));
-+
-+ do {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ } while (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val));
-+ }
-+
-+ return states[index] == FREE ? -1 : index;
-+ }
-+
-+ /**
-+ * Locates the index at which <tt>val</tt> can be inserted. if
-+ * there is already a value equal()ing <tt>val</tt> in the set,
-+ * returns that value as a negative integer.
-+ *
-+ * @param val an <code>long</code> value
-+ * @return an <code>int</code> value
-+ */
-+ protected int insertionIndex(long val) {
-+ int hash, probe, index, length;
-+ long[] set;
-+ byte[] states;
-+
-+ states = _states;
-+ set = _set;
-+ length = states.length;
-+ hash = _hashingStrategy.computeHashCode(val) & 0x7fffffff;
-+ index = hash % length;
-+
-+ if (states[index] == FREE) {
-+ return index; // empty, all done
-+ } else if (states[index] == FULL && set[index] == val) {
-+ return -index -1; // already stored
-+ } else { // already FULL or REMOVED, must probe
-+ // compute the double hash
-+ probe = 1 + (hash % (length - 2));
-+
-+ // if the slot we landed on is FULL (but not removed), probe
-+ // until we find an empty slot, a REMOVED slot, or an element
-+ // equal to the one we are trying to insert.
-+ // finding an empty slot means that the value is not present
-+ // and that we should use that slot as the insertion point;
-+ // finding a REMOVED slot means that we need to keep searching,
-+ // however we want to remember the offset of that REMOVED slot
-+ // so we can reuse it in case a "new" insertion (i.e. not an update)
-+ // is possible.
-+ // finding a matching value means that we've found that our desired
-+ // key is already in the table
-+
-+ if (states[index] != REMOVED) {
-+ // starting at the natural offset, probe until we find an
-+ // offset that isn't full.
-+ do {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ } while (states[index] == FULL && set[index] != val);
-+ }
-+
-+ // if the index we found was removed: continue probing until we
-+ // locate a free location or an element which equal()s the
-+ // one we have.
-+ if (states[index] == REMOVED) {
-+ int firstRemoved = index;
-+ while (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val)) {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ }
-+ return states[index] == FULL ? -index -1 : firstRemoved;
-+ }
-+ // if it's full, the key is already stored
-+ return states[index] == FULL ? -index -1 : index;
-+ }
-+ }
-+
-+ /**
-+ * Default implementation of TLongHashingStrategy:
-+ * delegates hashing to HashFunctions.hash(long).
-+ *
-+ * @param val the value to hash
-+ * @return the hashcode.
-+ */
-+ public final int computeHashCode(long val) {
-+ return HashFunctions.hash(val);
-+ }
-+} // TLongHash
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongHashingStrategy.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,49 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.Serializable;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface to support pluggable hashing strategies in maps and sets.
-+ * Implementors can use this interface to make the trove hashing
-+ * algorithms use an optimal strategy when computing hashcodes.
-+ *
-+ * Created: Sun Nov 4 08:56:06 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PHashingStrategy.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TLongHashingStrategy extends Serializable {
-+ /**
-+ * Computes a hash code for the specified long. Implementors
-+ * can use the long's own value or a custom scheme designed to
-+ * minimize collisions for a known set of input.
-+ *
-+ * @param val long for which the hashcode is to be computed
-+ * @return the hashCode
-+ */
-+ public int computeHashCode(long val);
-+} // TLongHashingStrategy
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongHashSet.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,371 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+import java.util.Arrays;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed set implementation for long primitives.
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+
-+public class TLongHashSet extends TLongHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /**
-+ * Creates a new <code>TLongHashSet</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TLongHashSet() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongHashSet</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TLongHashSet(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongHashSet</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TLongHashSet(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongHashSet</code> instance containing the
-+ * elements of <tt>array</tt>.
-+ *
-+ * @param array an array of <code>long</code> primitives
-+ */
-+ public TLongHashSet(long[] array) {
-+ this(array.length);
-+ addAll(array);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongHash</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongHashSet(TLongHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongHashSet(int initialCapacity, TLongHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongHashSet(int initialCapacity, float loadFactor, TLongHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongHashSet</code> instance containing the
-+ * elements of <tt>array</tt>.
-+ *
-+ * @param array an array of <code>long</code> primitives
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongHashSet(long[] array, TLongHashingStrategy strategy) {
-+ this(array.length, strategy);
-+ addAll(array);
-+ }
-+
-+ /**
-+ * @return a TLongIterator with access to the values in this set
-+ */
-+ public TLongIterator iterator() {
-+ return new TLongIterator(this);
-+ }
-+
-+ /**
-+ * Inserts a value into the set.
-+ *
-+ * @param val an <code>long</code> value
-+ * @return true if the set was modified by the add operation
-+ */
-+ public boolean add(long val) {
-+ int index = insertionIndex(val);
-+
-+ if (index < 0) {
-+ return false; // already present in set, nothing to add
-+ }
-+
-+ byte previousState = _states[index];
-+ _set[index] = val;
-+ _states[index] = FULL;
-+ postInsertHook(previousState == FREE);
-+
-+ return true; // yes, we added something
-+ }
-+
-+ /**
-+ * Expands the set to accomodate new values.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ long oldSet[] = _set;
-+ byte oldStates[] = _states;
-+
-+ _set = new long[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ long o = oldSet[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Returns a new array containing the values in the set.
-+ *
-+ * @return an <code>long[]</code> value
-+ */
-+ public long[] toArray() {
-+ long[] result = new long[size()];
-+ long[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = states.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ result[j++] = set[i];
-+ }
-+ }
-+ return result;
-+ }
-+
-+ /**
-+ * Empties the set.
-+ */
-+ public void clear() {
-+ super.clear();
-+ long[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = set.length; i-- > 0;) {
-+ set[i] = (long)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Compares this set with another set for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TLongHashSet)) {
-+ return false;
-+ }
-+ final TLongHashSet that = (TLongHashSet)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEach(new TLongProcedure() {
-+ public final boolean execute(long value) {
-+ return that.contains(value);
-+ }
-+ });
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEach(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TLongProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(long key) {
-+ h += _hashingStrategy.computeHashCode(key);
-+ return true;
-+ }
-+ }
-+
-+ /**
-+ * Removes <tt>val</tt> from the set.
-+ *
-+ * @param val an <code>long</code> value
-+ * @return true if the set was modified by the remove operation.
-+ */
-+ public boolean remove(long val) {
-+ int index = index(val);
-+ if (index >= 0) {
-+ removeAt(index);
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Tests the set to determine if all of the elements in
-+ * <tt>array</tt> are present.
-+ *
-+ * @param array an <code>array</code> of long primitives.
-+ * @return true if all elements were present in the set.
-+ */
-+ public boolean containsAll(long[] array) {
-+ for (int i = array.length; i-- > 0;) {
-+ if (! contains(array[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Adds all of the elements in <tt>array</tt> to the set.
-+ *
-+ * @param array an <code>array</code> of long primitives.
-+ * @return true if the set was modified by the add all operation.
-+ */
-+ public boolean addAll(long[] array) {
-+ boolean changed = false;
-+ for (int i = array.length; i-- > 0;) {
-+ if (add(array[i])) {
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+ /**
-+ * Removes all of the elements in <tt>array</tt> from the set.
-+ *
-+ * @param array an <code>array</code> of long primitives.
-+ * @return true if the set was modified by the remove all operation.
-+ */
-+ public boolean removeAll(long[] array) {
-+ boolean changed = false;
-+ for (int i = array.length; i-- > 0;) {
-+ if (remove(array[i])) {
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+ /**
-+ * Removes any values in the set which are not contained in
-+ * <tt>array</tt>.
-+ *
-+ * @param array an <code>array</code> of long primitives.
-+ * @return true if the set was modified by the retain all operation
-+ */
-+ public boolean retainAll(long[] array) {
-+ boolean changed = false;
-+ Arrays.sort(array);
-+ long[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = set.length; i-- > 0;) {
-+ if (states[i] == FULL && (Arrays.binarySearch(array,set[i]) < 0)) {
-+ remove(set[i]);
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure(out);
-+ if (! forEach(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+
-+ // ENTRIES
-+ setUp(size);
-+ while (size-- > 0) {
-+ long val = in.readLong();
-+ add(val);
-+ }
-+ }
-+} // TLongHashSet
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongIntHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for long keys and int values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TLongIntHashMap extends TLongHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient int[] _values;
-+
-+ /**
-+ * Creates a new <code>TLongIntHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TLongIntHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongIntHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TLongIntHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongIntHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TLongIntHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongIntHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongIntHashMap(TLongHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongIntHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongIntHashMap(int initialCapacity, TLongHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongIntHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongIntHashMap(int initialCapacity, float loadFactor, TLongHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TLongIntHashMap m = (TLongIntHashMap)super.clone();
-+ m._values = (int[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TLongIntIterator with access to this map's keys and values
-+ */
-+ public TLongIntIterator iterator() {
-+ return new TLongIntIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new int[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @param value an <code>int</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (long)0 if none was found.
-+ */
-+ public int put(long key, int value) {
-+ byte previousState;
-+ int previous = (int)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ long oldKeys[] = _set;
-+ int oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new long[newCapacity];
-+ _values = new int[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ long o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>long</code> value
-+ * @return the value of <tt>key</tt> or (long)0 if no such mapping exists.
-+ */
-+ public int get(long key) {
-+ int index = index(key);
-+ return index < 0 ? (int)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ long[] keys = _set;
-+ int[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (long)0;
-+ vals[i] = (int)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @return an <code>int</code> value, or (long)0 if no mapping for key exists
-+ */
-+ public int remove(long key) {
-+ int prev = (int)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TLongIntHashMap)) {
-+ return false;
-+ }
-+ TLongIntHashMap that = (TLongIntHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TLongIntProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(long key, int value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TLongIntProcedure {
-+ private final TLongIntHashMap _otherMap;
-+
-+ EqProcedure(TLongIntHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(long key, int value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two ints for equality.
-+ */
-+ private final boolean eq(int v1, int v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (int)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public int[] getValues() {
-+ int[] vals = new int[size()];
-+ int[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public long[] keys() {
-+ long[] keys = new long[size()];
-+ long[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>int</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(int val) {
-+ byte[] states = _states;
-+ int[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(long key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TLongProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TLongProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TIntProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TIntProcedure procedure) {
-+ byte[] states = _states;
-+ int[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOLongIntProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TLongIntProcedure procedure) {
-+ byte[] states = _states;
-+ long[] keys = _set;
-+ int[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TLongIntProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ long[] keys = _set;
-+ int[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TIntFunction</code> value
-+ */
-+ public void transformValues(TIntFunction function) {
-+ byte[] states = _states;
-+ int[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(long key) {
-+ return adjustValue(key, (int)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(long key, int amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ long key = in.readLong();
-+ int val = in.readInt();
-+ put(key, val);
-+ }
-+ }
-+} // TLongIntHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongIntIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type long and int.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TLongIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TLongIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TLongIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TLongIntIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TLongIntIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TLongIntHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TLongIntIterator(TLongIntHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public long key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public int value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public int setValue(int val) {
-+ int old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TLongIntIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongIntProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type long and int.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TLongIntProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>long</code> value
-+ * @param b a <code>int</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(long a, int b);
-+}// TLongIntProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,56 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for long collections.
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TLongIterator extends TPrimitiveIterator {
-+ /** the collection on which the iterator operates */
-+ private final TLongHash _hash;
-+
-+ /**
-+ * Creates a TLongIterator for the elements in the specified collection.
-+ */
-+ public TLongIterator(TLongHash hash) {
-+ super(hash);
-+ this._hash = hash;
-+ }
-+
-+ /**
-+ * Advances the iterator to the next element in the underlying collection
-+ * and returns it.
-+ *
-+ * @return the next long in the collection
-+ * @exception NoSuchElementException if the iterator is already exhausted
-+ */
-+ public long next() {
-+ moveToNextIndex();
-+ return _hash._set[_index];
-+ }
-+}// TLongIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongLongHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for long keys and long values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TLongLongHashMap extends TLongHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient long[] _values;
-+
-+ /**
-+ * Creates a new <code>TLongLongHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TLongLongHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongLongHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TLongLongHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongLongHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TLongLongHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongLongHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongLongHashMap(TLongHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongLongHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongLongHashMap(int initialCapacity, TLongHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongLongHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongLongHashMap(int initialCapacity, float loadFactor, TLongHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TLongLongHashMap m = (TLongLongHashMap)super.clone();
-+ m._values = (long[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TLongLongIterator with access to this map's keys and values
-+ */
-+ public TLongLongIterator iterator() {
-+ return new TLongLongIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new long[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @param value an <code>long</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (long)0 if none was found.
-+ */
-+ public long put(long key, long value) {
-+ byte previousState;
-+ long previous = (long)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ long oldKeys[] = _set;
-+ long oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new long[newCapacity];
-+ _values = new long[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ long o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>long</code> value
-+ * @return the value of <tt>key</tt> or (long)0 if no such mapping exists.
-+ */
-+ public long get(long key) {
-+ int index = index(key);
-+ return index < 0 ? (long)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ long[] keys = _set;
-+ long[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (long)0;
-+ vals[i] = (long)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @return an <code>long</code> value, or (long)0 if no mapping for key exists
-+ */
-+ public long remove(long key) {
-+ long prev = (long)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TLongLongHashMap)) {
-+ return false;
-+ }
-+ TLongLongHashMap that = (TLongLongHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TLongLongProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(long key, long value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TLongLongProcedure {
-+ private final TLongLongHashMap _otherMap;
-+
-+ EqProcedure(TLongLongHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(long key, long value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two longs for equality.
-+ */
-+ private final boolean eq(long v1, long v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (long)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public long[] getValues() {
-+ long[] vals = new long[size()];
-+ long[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public long[] keys() {
-+ long[] keys = new long[size()];
-+ long[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>long</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(long val) {
-+ byte[] states = _states;
-+ long[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(long key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TLongProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TLongProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TLongProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TLongProcedure procedure) {
-+ byte[] states = _states;
-+ long[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOLongLongProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TLongLongProcedure procedure) {
-+ byte[] states = _states;
-+ long[] keys = _set;
-+ long[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TLongLongProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ long[] keys = _set;
-+ long[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TLongFunction</code> value
-+ */
-+ public void transformValues(TLongFunction function) {
-+ byte[] states = _states;
-+ long[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(long key) {
-+ return adjustValue(key, (long)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(long key, long amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ long key = in.readLong();
-+ long val = in.readLong();
-+ put(key, val);
-+ }
-+ }
-+} // TLongLongHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongLongIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type long and long.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TLongLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TLongLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TLongLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TLongLongIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TLongLongIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TLongLongHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TLongLongIterator(TLongLongHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public long key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public long value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public long setValue(long val) {
-+ long old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TLongLongIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongLongProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type long and long.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TLongLongProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>long</code> value
-+ * @param b a <code>long</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(long a, long b);
-+}// TLongLongProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongObjectHashMap.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,507 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for long keys and Object values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TLongObjectHashMap<V> extends TLongHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient V[] _values;
-+
-+ /**
-+ * Creates a new <code>TLongObjectHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TLongObjectHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongObjectHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TLongObjectHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongObjectHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TLongObjectHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongObjectHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongObjectHashMap(TLongHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongObjectHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongObjectHashMap(int initialCapacity, TLongHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongObjectHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongObjectHashMap(int initialCapacity, float loadFactor, TLongHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public TLongObjectHashMap<V> clone() {
-+ TLongObjectHashMap<V> m = (TLongObjectHashMap<V>)super.clone();
-+ m._values = (V[]) this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TLongObjectIterator with access to this map's keys and values
-+ */
-+ public TLongObjectIterator<V> iterator() {
-+ return new TLongObjectIterator<V>(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = (V[]) new Object[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (long)0 if none was found.
-+ */
-+ public V put(long key, V value) {
-+ byte previousState;
-+ V previous = null;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ long oldKeys[] = _set;
-+ V oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new long[newCapacity];
-+ _values = (V[]) new Object[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ long o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>long</code> value
-+ * @return the value of <tt>key</tt> or (long)0 if no such mapping exists.
-+ */
-+ public V get(long key) {
-+ int index = index(key);
-+ return index < 0 ? null : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ long[] keys = _set;
-+ Object[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (long)0;
-+ vals[i] = null;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @return an <code>Object</code> value or (long)0 if no such mapping exists.
-+ */
-+ public V remove(long key) {
-+ V prev = null;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TLongObjectHashMap)) {
-+ return false;
-+ }
-+ TLongObjectHashMap that = (TLongObjectHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TLongObjectProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(long key, Object value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TLongObjectProcedure {
-+ private final TLongObjectHashMap _otherMap;
-+
-+ EqProcedure(TLongObjectHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(long key, Object value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two objects for equality.
-+ */
-+ private final boolean eq(Object o1, Object o2) {
-+ return o1 == o2 || ((o1 != null) && o1.equals(o2));
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = null;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public Object[] getValues() {
-+ Object[] vals = new Object[size()];
-+ V[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public long[] keys() {
-+ long[] keys = new long[size()];
-+ long[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(V val) {
-+ byte[] states = _states;
-+ V[] vals = _values;
-+
-+ // special case null values so that we don't have to
-+ // perform null checks before every call to equals()
-+ if (null == val) {
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL &&
-+ val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ } else {
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL &&
-+ (val == vals[i] || val.equals(vals[i]))) {
-+ return true;
-+ }
-+ }
-+ } // end of else
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(long key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TLongProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TLongProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TObjectProcedure<V> procedure) {
-+ byte[] states = _states;
-+ V[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOLongObjectProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TLongObjectProcedure<V> procedure) {
-+ byte[] states = _states;
-+ long[] keys = _set;
-+ V[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TLongObjectProcedure<V> procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ long[] keys = _set;
-+ V[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TObjectFunction</code> value
-+ */
-+ public void transformValues(TObjectFunction<V,V> function) {
-+ byte[] states = _states;
-+ V[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ long key = in.readLong();
-+ V val = (V) in.readObject();
-+ put(key, val);
-+ }
-+ }
-+} // TLongObjectHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongObjectIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,151 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type long and Object.
-+ * <p/>
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ * <p/>
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ * <p/>
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ * <p/>
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ * <p/>
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TLongObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TLongObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TLongObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TLongObjectIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2OIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TLongObjectIterator<V> extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TLongObjectHashMap<V> _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TLongObjectIterator(TLongObjectHashMap<V> map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException
-+ * if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public long key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public V value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public V setValue(V val) {
-+ V old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TLongObjectIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongObjectProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type long and Object.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2OProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TLongObjectProcedure<T> {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>long</code> value
-+ * @param b an <code>Object</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(long a, T b);
-+}// TLongObjectProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,46 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures with one long paramater.
-+ *
-+ * Created: Mon Nov 5 21:45:49 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TLongProcedure {
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param value a value of type <code>long</code>
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(long value);
-+}// TLongProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongShortHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for long keys and short values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TLongShortHashMap extends TLongHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient short[] _values;
-+
-+ /**
-+ * Creates a new <code>TLongShortHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TLongShortHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongShortHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TLongShortHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongShortHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TLongShortHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongShortHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongShortHashMap(TLongHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongShortHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongShortHashMap(int initialCapacity, TLongHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TLongShortHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TLongShortHashMap(int initialCapacity, float loadFactor, TLongHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TLongShortHashMap m = (TLongShortHashMap)super.clone();
-+ m._values = (short[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TLongShortIterator with access to this map's keys and values
-+ */
-+ public TLongShortIterator iterator() {
-+ return new TLongShortIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new short[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @param value an <code>short</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (long)0 if none was found.
-+ */
-+ public short put(long key, short value) {
-+ byte previousState;
-+ short previous = (short)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ long oldKeys[] = _set;
-+ short oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new long[newCapacity];
-+ _values = new short[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ long o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>long</code> value
-+ * @return the value of <tt>key</tt> or (long)0 if no such mapping exists.
-+ */
-+ public short get(long key) {
-+ int index = index(key);
-+ return index < 0 ? (short)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ long[] keys = _set;
-+ short[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (long)0;
-+ vals[i] = (short)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @return an <code>short</code> value, or (long)0 if no mapping for key exists
-+ */
-+ public short remove(long key) {
-+ short prev = (short)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TLongShortHashMap)) {
-+ return false;
-+ }
-+ TLongShortHashMap that = (TLongShortHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TLongShortProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(long key, short value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TLongShortProcedure {
-+ private final TLongShortHashMap _otherMap;
-+
-+ EqProcedure(TLongShortHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(long key, short value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two shorts for equality.
-+ */
-+ private final boolean eq(short v1, short v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (short)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public short[] getValues() {
-+ short[] vals = new short[size()];
-+ short[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public long[] keys() {
-+ long[] keys = new long[size()];
-+ long[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>short</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(short val) {
-+ byte[] states = _states;
-+ short[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>long</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(long key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TLongProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TLongProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TShortProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TShortProcedure procedure) {
-+ byte[] states = _states;
-+ short[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOLongShortProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TLongShortProcedure procedure) {
-+ byte[] states = _states;
-+ long[] keys = _set;
-+ short[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TLongShortProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ long[] keys = _set;
-+ short[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TShortFunction</code> value
-+ */
-+ public void transformValues(TShortFunction function) {
-+ byte[] states = _states;
-+ short[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(long key) {
-+ return adjustValue(key, (short)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(long key, short amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ long key = in.readLong();
-+ short val = in.readShort();
-+ put(key, val);
-+ }
-+ }
-+} // TLongShortHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongShortIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type long and short.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TLongShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TLongShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TLongShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TLongShortIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TLongShortIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TLongShortHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TLongShortIterator(TLongShortHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public long key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public short value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public short setValue(short val) {
-+ short old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TLongShortIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TLongShortProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type long and short.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TLongShortProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>long</code> value
-+ * @param b a <code>short</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(long a, short b);
-+}// TLongShortProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectByteHashMap.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,531 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+import java.util.Arrays;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for Object keys and byte values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TObjectByteHashMap<K> extends TObjectHash<K> implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient byte[] _values;
-+
-+ /**
-+ * Creates a new <code>TObjectByteHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TObjectByteHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectByteHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TObjectByteHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectByteHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TObjectByteHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectByteHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectByteHashMap(TObjectHashingStrategy<K> strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectByteHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectByteHashMap(int initialCapacity, TObjectHashingStrategy<K> strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectByteHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectByteHashMap(int initialCapacity, float loadFactor, TObjectHashingStrategy<K> strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return an iterator over the entries in this map
-+ */
-+ public TObjectByteIterator<K> iterator() {
-+ return new TObjectByteIterator<K>(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new byte[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>byte</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (byte)0 if none was found.
-+ */
-+ public byte put(K key, byte value) {
-+ byte previous = (byte)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ K oldKey = (K) _set[index];
-+ _set[index] = key;
-+ _values[index] = value;
-+
-+ if (isNewMapping) {
-+ postInsertHook(oldKey == FREE);
-+ }
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ K oldKeys[] = (K[]) _set;
-+ byte oldVals[] = _values;
-+
-+ _set = new Object[newCapacity];
-+ Arrays.fill(_set, FREE);
-+ _values = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldKeys[i] != FREE && oldKeys[i] != REMOVED) {
-+ K o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ if (index < 0) {
-+ throwObjectContractViolation(_set[(-index -1)], o);
-+ }
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or (byte)0 if no such mapping exists.
-+ */
-+ public byte get(K key) {
-+ int index = index(key);
-+ return index < 0 ? (byte)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ Object[] keys = _set;
-+ byte[] vals = _values;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = FREE;
-+ vals[i] = (byte)0;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return an <code>byte</code> value or (byte)0 if no such mapping exists.
-+ */
-+ public byte remove(K key) {
-+ byte prev = (byte)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TObjectByteHashMap)) {
-+ return false;
-+ }
-+ TObjectByteHashMap that = (TObjectByteHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ @Override
-+ public TObjectByteHashMap<K> clone() {
-+ TObjectByteHashMap<K> clone = ( TObjectByteHashMap<K> ) super.clone();
-+ clone._values = new byte[_values.length];
-+ for( int i = 0 ; i < clone._values.length; i++ ) {
-+ clone._values[i] = _values[i];
-+ }
-+ return clone;
-+ }
-+
-+
-+ private static final class EqProcedure implements TObjectByteProcedure {
-+ private final TObjectByteHashMap _otherMap;
-+
-+ EqProcedure(TObjectByteHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(Object key, byte value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two bytes for equality.
-+ */
-+ private final boolean eq(byte v1, byte v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = 0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public byte[] getValues() {
-+ byte[] vals = new byte[size()];
-+ byte[] v = _values;
-+ Object[] keys = _set;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Object[] keys() {
-+ Object[] keys = new Object[size()];
-+ K[] k = (K[]) _set;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (k[i] != FREE && k[i] != REMOVED) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @param a the array into which the elements of the list are to
-+ * be stored, if it is big enough; otherwise, a new array of the
-+ * same runtime type is allocated for this purpose.
-+ * @return a <code>Set</code> value
-+ */
-+ public K[] keys(K[] a) {
-+ int size = size();
-+ if (a.length < size) {
-+ a = (K[]) java.lang.reflect.Array.newInstance(
-+ a.getClass().getComponentType(), size);
-+ }
-+
-+ K[] k = (K[]) _set;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (k[i] != FREE && k[i] != REMOVED) {
-+ a[j++] = k[i];
-+ }
-+ }
-+ return a;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>byte</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(byte val) {
-+ Object[] keys = _set;
-+ byte[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(K key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TObjectProcedure<K> procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TByteProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TByteProcedure procedure) {
-+ Object[] keys = _set;
-+ byte[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED
-+ && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOObjectByteProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TObjectByteProcedure<K> procedure) {
-+ K[] keys = (K[]) _set;
-+ byte[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (keys[i] != FREE
-+ && keys[i] != REMOVED
-+ && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TObjectByteProcedure<K> procedure) {
-+ boolean modified = false;
-+ K[] keys = (K[]) _set;
-+ byte[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (keys[i] != FREE
-+ && keys[i] != REMOVED
-+ && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TByteFunction</code> value
-+ */
-+ public void transformValues(TByteFunction function) {
-+ Object[] keys = _set;
-+ byte[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (keys[i] != null && keys[i] != REMOVED) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(K key) {
-+ return adjustValue(key, (byte)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(K key, byte amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ K key = (K) in.readObject();
-+ byte val = in.readByte();
-+ put(key, val);
-+ }
-+ }
-+} // TObjectByteHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectByteIterator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,166 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.util.ConcurrentModificationException;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type Object and byte.
-+ * <p/>
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ * <p/>
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ * <p/>
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ * <p/>
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ * <p/>
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TObjectByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TObjectByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TObjectByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TObjectByteIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: O2PIterator.template,v 1.2 2006/11/30 22:06:22 robeden Exp $
-+ */
-+
-+public class TObjectByteIterator<K> extends TIterator {
-+ private final TObjectByteHashMap<K> _map;
-+
-+ public TObjectByteIterator(TObjectByteHashMap<K> map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Returns the index of the next value in the data structure
-+ * or a negative value if the iterator is exhausted.
-+ *
-+ * @return an <code>byte</code> value
-+ */
-+ protected final int nextIndex() {
-+ if (_expectedSize != _hash.size()) {
-+ throw new ConcurrentModificationException();
-+ }
-+
-+ Object[] set = _map._set;
-+ int i = _index;
-+ while (i-- > 0 && (set[i] == null || set[i] == TObjectHash.REMOVED ||
-+ set[i] == TObjectHash.FREE)) ;
-+ return i;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public K key() {
-+ return (K) _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public byte value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public byte setValue(byte val) {
-+ byte old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TObjectByteIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectByteProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type Object and byte.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: O2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TObjectByteProcedure<K> {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a an <code>Object</code> value
-+ * @param b a <code>byte</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(K a, byte b);
-+}// TObjectByteProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectDoubleHashMap.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,531 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+import java.util.Arrays;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for Object keys and double values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TObjectDoubleHashMap<K> extends TObjectHash<K> implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient double[] _values;
-+
-+ /**
-+ * Creates a new <code>TObjectDoubleHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TObjectDoubleHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectDoubleHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TObjectDoubleHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectDoubleHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TObjectDoubleHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectDoubleHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectDoubleHashMap(TObjectHashingStrategy<K> strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectDoubleHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectDoubleHashMap(int initialCapacity, TObjectHashingStrategy<K> strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectDoubleHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectDoubleHashMap(int initialCapacity, float loadFactor, TObjectHashingStrategy<K> strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return an iterator over the entries in this map
-+ */
-+ public TObjectDoubleIterator<K> iterator() {
-+ return new TObjectDoubleIterator<K>(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new double[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>double</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (double)0 if none was found.
-+ */
-+ public double put(K key, double value) {
-+ double previous = (double)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ K oldKey = (K) _set[index];
-+ _set[index] = key;
-+ _values[index] = value;
-+
-+ if (isNewMapping) {
-+ postInsertHook(oldKey == FREE);
-+ }
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ K oldKeys[] = (K[]) _set;
-+ double oldVals[] = _values;
-+
-+ _set = new Object[newCapacity];
-+ Arrays.fill(_set, FREE);
-+ _values = new double[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldKeys[i] != FREE && oldKeys[i] != REMOVED) {
-+ K o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ if (index < 0) {
-+ throwObjectContractViolation(_set[(-index -1)], o);
-+ }
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or (double)0 if no such mapping exists.
-+ */
-+ public double get(K key) {
-+ int index = index(key);
-+ return index < 0 ? (double)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ Object[] keys = _set;
-+ double[] vals = _values;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = FREE;
-+ vals[i] = (double)0;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return an <code>double</code> value or (double)0 if no such mapping exists.
-+ */
-+ public double remove(K key) {
-+ double prev = (double)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TObjectDoubleHashMap)) {
-+ return false;
-+ }
-+ TObjectDoubleHashMap that = (TObjectDoubleHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ @Override
-+ public TObjectDoubleHashMap<K> clone() {
-+ TObjectDoubleHashMap<K> clone = ( TObjectDoubleHashMap<K> ) super.clone();
-+ clone._values = new double[_values.length];
-+ for( int i = 0 ; i < clone._values.length; i++ ) {
-+ clone._values[i] = _values[i];
-+ }
-+ return clone;
-+ }
-+
-+
-+ private static final class EqProcedure implements TObjectDoubleProcedure {
-+ private final TObjectDoubleHashMap _otherMap;
-+
-+ EqProcedure(TObjectDoubleHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(Object key, double value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two doubles for equality.
-+ */
-+ private final boolean eq(double v1, double v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = 0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public double[] getValues() {
-+ double[] vals = new double[size()];
-+ double[] v = _values;
-+ Object[] keys = _set;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Object[] keys() {
-+ Object[] keys = new Object[size()];
-+ K[] k = (K[]) _set;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (k[i] != FREE && k[i] != REMOVED) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @param a the array into which the elements of the list are to
-+ * be stored, if it is big enough; otherwise, a new array of the
-+ * same runtime type is allocated for this purpose.
-+ * @return a <code>Set</code> value
-+ */
-+ public K[] keys(K[] a) {
-+ int size = size();
-+ if (a.length < size) {
-+ a = (K[]) java.lang.reflect.Array.newInstance(
-+ a.getClass().getComponentType(), size);
-+ }
-+
-+ K[] k = (K[]) _set;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (k[i] != FREE && k[i] != REMOVED) {
-+ a[j++] = k[i];
-+ }
-+ }
-+ return a;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>double</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(double val) {
-+ Object[] keys = _set;
-+ double[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(K key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TObjectProcedure<K> procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TDoubleProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TDoubleProcedure procedure) {
-+ Object[] keys = _set;
-+ double[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED
-+ && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOObjectDoubleProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TObjectDoubleProcedure<K> procedure) {
-+ K[] keys = (K[]) _set;
-+ double[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (keys[i] != FREE
-+ && keys[i] != REMOVED
-+ && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TObjectDoubleProcedure<K> procedure) {
-+ boolean modified = false;
-+ K[] keys = (K[]) _set;
-+ double[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (keys[i] != FREE
-+ && keys[i] != REMOVED
-+ && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TDoubleFunction</code> value
-+ */
-+ public void transformValues(TDoubleFunction function) {
-+ Object[] keys = _set;
-+ double[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (keys[i] != null && keys[i] != REMOVED) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(K key) {
-+ return adjustValue(key, (double)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(K key, double amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ K key = (K) in.readObject();
-+ double val = in.readDouble();
-+ put(key, val);
-+ }
-+ }
-+} // TObjectDoubleHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectDoubleIterator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,166 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.util.ConcurrentModificationException;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type Object and double.
-+ * <p/>
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ * <p/>
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ * <p/>
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ * <p/>
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ * <p/>
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TObjectDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TObjectDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TObjectDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TObjectDoubleIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: O2PIterator.template,v 1.2 2006/11/30 22:06:22 robeden Exp $
-+ */
-+
-+public class TObjectDoubleIterator<K> extends TIterator {
-+ private final TObjectDoubleHashMap<K> _map;
-+
-+ public TObjectDoubleIterator(TObjectDoubleHashMap<K> map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Returns the index of the next value in the data structure
-+ * or a negative value if the iterator is exhausted.
-+ *
-+ * @return an <code>double</code> value
-+ */
-+ protected final int nextIndex() {
-+ if (_expectedSize != _hash.size()) {
-+ throw new ConcurrentModificationException();
-+ }
-+
-+ Object[] set = _map._set;
-+ int i = _index;
-+ while (i-- > 0 && (set[i] == null || set[i] == TObjectHash.REMOVED ||
-+ set[i] == TObjectHash.FREE)) ;
-+ return i;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public K key() {
-+ return (K) _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public double value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public double setValue(double val) {
-+ double old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TObjectDoubleIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectDoubleProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type Object and double.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: O2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TObjectDoubleProcedure<K> {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a an <code>Object</code> value
-+ * @param b a <code>double</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(K a, double b);
-+}// TObjectDoubleProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectFloatHashMap.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,531 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+import java.util.Arrays;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for Object keys and float values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TObjectFloatHashMap<K> extends TObjectHash<K> implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient float[] _values;
-+
-+ /**
-+ * Creates a new <code>TObjectFloatHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TObjectFloatHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectFloatHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TObjectFloatHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectFloatHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TObjectFloatHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectFloatHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectFloatHashMap(TObjectHashingStrategy<K> strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectFloatHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectFloatHashMap(int initialCapacity, TObjectHashingStrategy<K> strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectFloatHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectFloatHashMap(int initialCapacity, float loadFactor, TObjectHashingStrategy<K> strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return an iterator over the entries in this map
-+ */
-+ public TObjectFloatIterator<K> iterator() {
-+ return new TObjectFloatIterator<K>(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new float[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>float</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (float)0 if none was found.
-+ */
-+ public float put(K key, float value) {
-+ float previous = (float)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ K oldKey = (K) _set[index];
-+ _set[index] = key;
-+ _values[index] = value;
-+
-+ if (isNewMapping) {
-+ postInsertHook(oldKey == FREE);
-+ }
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ K oldKeys[] = (K[]) _set;
-+ float oldVals[] = _values;
-+
-+ _set = new Object[newCapacity];
-+ Arrays.fill(_set, FREE);
-+ _values = new float[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldKeys[i] != FREE && oldKeys[i] != REMOVED) {
-+ K o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ if (index < 0) {
-+ throwObjectContractViolation(_set[(-index -1)], o);
-+ }
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or (float)0 if no such mapping exists.
-+ */
-+ public float get(K key) {
-+ int index = index(key);
-+ return index < 0 ? (float)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ Object[] keys = _set;
-+ float[] vals = _values;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = FREE;
-+ vals[i] = (float)0;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return an <code>float</code> value or (float)0 if no such mapping exists.
-+ */
-+ public float remove(K key) {
-+ float prev = (float)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TObjectFloatHashMap)) {
-+ return false;
-+ }
-+ TObjectFloatHashMap that = (TObjectFloatHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ @Override
-+ public TObjectFloatHashMap<K> clone() {
-+ TObjectFloatHashMap<K> clone = ( TObjectFloatHashMap<K> ) super.clone();
-+ clone._values = new float[_values.length];
-+ for( int i = 0 ; i < clone._values.length; i++ ) {
-+ clone._values[i] = _values[i];
-+ }
-+ return clone;
-+ }
-+
-+
-+ private static final class EqProcedure implements TObjectFloatProcedure {
-+ private final TObjectFloatHashMap _otherMap;
-+
-+ EqProcedure(TObjectFloatHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(Object key, float value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two floats for equality.
-+ */
-+ private final boolean eq(float v1, float v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = 0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public float[] getValues() {
-+ float[] vals = new float[size()];
-+ float[] v = _values;
-+ Object[] keys = _set;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Object[] keys() {
-+ Object[] keys = new Object[size()];
-+ K[] k = (K[]) _set;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (k[i] != FREE && k[i] != REMOVED) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @param a the array into which the elements of the list are to
-+ * be stored, if it is big enough; otherwise, a new array of the
-+ * same runtime type is allocated for this purpose.
-+ * @return a <code>Set</code> value
-+ */
-+ public K[] keys(K[] a) {
-+ int size = size();
-+ if (a.length < size) {
-+ a = (K[]) java.lang.reflect.Array.newInstance(
-+ a.getClass().getComponentType(), size);
-+ }
-+
-+ K[] k = (K[]) _set;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (k[i] != FREE && k[i] != REMOVED) {
-+ a[j++] = k[i];
-+ }
-+ }
-+ return a;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>float</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(float val) {
-+ Object[] keys = _set;
-+ float[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(K key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TObjectProcedure<K> procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TFloatProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TFloatProcedure procedure) {
-+ Object[] keys = _set;
-+ float[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED
-+ && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOObjectFloatProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TObjectFloatProcedure<K> procedure) {
-+ K[] keys = (K[]) _set;
-+ float[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (keys[i] != FREE
-+ && keys[i] != REMOVED
-+ && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TObjectFloatProcedure<K> procedure) {
-+ boolean modified = false;
-+ K[] keys = (K[]) _set;
-+ float[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (keys[i] != FREE
-+ && keys[i] != REMOVED
-+ && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TFloatFunction</code> value
-+ */
-+ public void transformValues(TFloatFunction function) {
-+ Object[] keys = _set;
-+ float[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (keys[i] != null && keys[i] != REMOVED) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(K key) {
-+ return adjustValue(key, (float)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(K key, float amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ K key = (K) in.readObject();
-+ float val = in.readFloat();
-+ put(key, val);
-+ }
-+ }
-+} // TObjectFloatHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectFloatIterator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,166 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.util.ConcurrentModificationException;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type Object and float.
-+ * <p/>
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ * <p/>
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ * <p/>
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ * <p/>
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ * <p/>
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TObjectFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TObjectFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TObjectFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TObjectFloatIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: O2PIterator.template,v 1.2 2006/11/30 22:06:22 robeden Exp $
-+ */
-+
-+public class TObjectFloatIterator<K> extends TIterator {
-+ private final TObjectFloatHashMap<K> _map;
-+
-+ public TObjectFloatIterator(TObjectFloatHashMap<K> map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Returns the index of the next value in the data structure
-+ * or a negative value if the iterator is exhausted.
-+ *
-+ * @return an <code>float</code> value
-+ */
-+ protected final int nextIndex() {
-+ if (_expectedSize != _hash.size()) {
-+ throw new ConcurrentModificationException();
-+ }
-+
-+ Object[] set = _map._set;
-+ int i = _index;
-+ while (i-- > 0 && (set[i] == null || set[i] == TObjectHash.REMOVED ||
-+ set[i] == TObjectHash.FREE)) ;
-+ return i;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public K key() {
-+ return (K) _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public float value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public float setValue(float val) {
-+ float old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TObjectFloatIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectFloatProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type Object and float.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: O2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TObjectFloatProcedure<K> {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a an <code>Object</code> value
-+ * @param b a <code>float</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(K a, float b);
-+}// TObjectFloatProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectIntHashMap.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,531 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+import java.util.Arrays;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for Object keys and int values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TObjectIntHashMap<K> extends TObjectHash<K> implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient int[] _values;
-+
-+ /**
-+ * Creates a new <code>TObjectIntHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TObjectIntHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectIntHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TObjectIntHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectIntHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TObjectIntHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectIntHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectIntHashMap(TObjectHashingStrategy<K> strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectIntHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectIntHashMap(int initialCapacity, TObjectHashingStrategy<K> strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectIntHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectIntHashMap(int initialCapacity, float loadFactor, TObjectHashingStrategy<K> strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return an iterator over the entries in this map
-+ */
-+ public TObjectIntIterator<K> iterator() {
-+ return new TObjectIntIterator<K>(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new int[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>int</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (int)0 if none was found.
-+ */
-+ public int put(K key, int value) {
-+ int previous = (int)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ K oldKey = (K) _set[index];
-+ _set[index] = key;
-+ _values[index] = value;
-+
-+ if (isNewMapping) {
-+ postInsertHook(oldKey == FREE);
-+ }
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ K oldKeys[] = (K[]) _set;
-+ int oldVals[] = _values;
-+
-+ _set = new Object[newCapacity];
-+ Arrays.fill(_set, FREE);
-+ _values = new int[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldKeys[i] != FREE && oldKeys[i] != REMOVED) {
-+ K o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ if (index < 0) {
-+ throwObjectContractViolation(_set[(-index -1)], o);
-+ }
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or (int)0 if no such mapping exists.
-+ */
-+ public int get(K key) {
-+ int index = index(key);
-+ return index < 0 ? (int)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ Object[] keys = _set;
-+ int[] vals = _values;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = FREE;
-+ vals[i] = (int)0;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return an <code>int</code> value or (int)0 if no such mapping exists.
-+ */
-+ public int remove(K key) {
-+ int prev = (int)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TObjectIntHashMap)) {
-+ return false;
-+ }
-+ TObjectIntHashMap that = (TObjectIntHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ @Override
-+ public TObjectIntHashMap<K> clone() {
-+ TObjectIntHashMap<K> clone = ( TObjectIntHashMap<K> ) super.clone();
-+ clone._values = new int[_values.length];
-+ for( int i = 0 ; i < clone._values.length; i++ ) {
-+ clone._values[i] = _values[i];
-+ }
-+ return clone;
-+ }
-+
-+
-+ private static final class EqProcedure implements TObjectIntProcedure {
-+ private final TObjectIntHashMap _otherMap;
-+
-+ EqProcedure(TObjectIntHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(Object key, int value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two ints for equality.
-+ */
-+ private final boolean eq(int v1, int v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = 0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public int[] getValues() {
-+ int[] vals = new int[size()];
-+ int[] v = _values;
-+ Object[] keys = _set;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Object[] keys() {
-+ Object[] keys = new Object[size()];
-+ K[] k = (K[]) _set;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (k[i] != FREE && k[i] != REMOVED) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @param a the array into which the elements of the list are to
-+ * be stored, if it is big enough; otherwise, a new array of the
-+ * same runtime type is allocated for this purpose.
-+ * @return a <code>Set</code> value
-+ */
-+ public K[] keys(K[] a) {
-+ int size = size();
-+ if (a.length < size) {
-+ a = (K[]) java.lang.reflect.Array.newInstance(
-+ a.getClass().getComponentType(), size);
-+ }
-+
-+ K[] k = (K[]) _set;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (k[i] != FREE && k[i] != REMOVED) {
-+ a[j++] = k[i];
-+ }
-+ }
-+ return a;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>int</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(int val) {
-+ Object[] keys = _set;
-+ int[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(K key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TObjectProcedure<K> procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TIntProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TIntProcedure procedure) {
-+ Object[] keys = _set;
-+ int[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED
-+ && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOObjectIntProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TObjectIntProcedure<K> procedure) {
-+ K[] keys = (K[]) _set;
-+ int[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (keys[i] != FREE
-+ && keys[i] != REMOVED
-+ && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TObjectIntProcedure<K> procedure) {
-+ boolean modified = false;
-+ K[] keys = (K[]) _set;
-+ int[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (keys[i] != FREE
-+ && keys[i] != REMOVED
-+ && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TIntFunction</code> value
-+ */
-+ public void transformValues(TIntFunction function) {
-+ Object[] keys = _set;
-+ int[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (keys[i] != null && keys[i] != REMOVED) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(K key) {
-+ return adjustValue(key, (int)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(K key, int amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ K key = (K) in.readObject();
-+ int val = in.readInt();
-+ put(key, val);
-+ }
-+ }
-+} // TObjectIntHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectIntIterator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,166 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.util.ConcurrentModificationException;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type Object and int.
-+ * <p/>
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ * <p/>
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ * <p/>
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ * <p/>
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ * <p/>
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TObjectIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TObjectIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TObjectIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TObjectIntIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: O2PIterator.template,v 1.2 2006/11/30 22:06:22 robeden Exp $
-+ */
-+
-+public class TObjectIntIterator<K> extends TIterator {
-+ private final TObjectIntHashMap<K> _map;
-+
-+ public TObjectIntIterator(TObjectIntHashMap<K> map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Returns the index of the next value in the data structure
-+ * or a negative value if the iterator is exhausted.
-+ *
-+ * @return an <code>int</code> value
-+ */
-+ protected final int nextIndex() {
-+ if (_expectedSize != _hash.size()) {
-+ throw new ConcurrentModificationException();
-+ }
-+
-+ Object[] set = _map._set;
-+ int i = _index;
-+ while (i-- > 0 && (set[i] == null || set[i] == TObjectHash.REMOVED ||
-+ set[i] == TObjectHash.FREE)) ;
-+ return i;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public K key() {
-+ return (K) _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public int value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public int setValue(int val) {
-+ int old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TObjectIntIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectIntProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type Object and int.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: O2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TObjectIntProcedure<K> {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a an <code>Object</code> value
-+ * @param b a <code>int</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(K a, int b);
-+}// TObjectIntProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectLongHashMap.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,531 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+import java.util.Arrays;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for Object keys and long values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TObjectLongHashMap<K> extends TObjectHash<K> implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient long[] _values;
-+
-+ /**
-+ * Creates a new <code>TObjectLongHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TObjectLongHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectLongHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TObjectLongHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectLongHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TObjectLongHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectLongHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectLongHashMap(TObjectHashingStrategy<K> strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectLongHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectLongHashMap(int initialCapacity, TObjectHashingStrategy<K> strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectLongHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectLongHashMap(int initialCapacity, float loadFactor, TObjectHashingStrategy<K> strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return an iterator over the entries in this map
-+ */
-+ public TObjectLongIterator<K> iterator() {
-+ return new TObjectLongIterator<K>(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new long[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>long</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (long)0 if none was found.
-+ */
-+ public long put(K key, long value) {
-+ long previous = (long)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ K oldKey = (K) _set[index];
-+ _set[index] = key;
-+ _values[index] = value;
-+
-+ if (isNewMapping) {
-+ postInsertHook(oldKey == FREE);
-+ }
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ K oldKeys[] = (K[]) _set;
-+ long oldVals[] = _values;
-+
-+ _set = new Object[newCapacity];
-+ Arrays.fill(_set, FREE);
-+ _values = new long[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldKeys[i] != FREE && oldKeys[i] != REMOVED) {
-+ K o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ if (index < 0) {
-+ throwObjectContractViolation(_set[(-index -1)], o);
-+ }
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or (long)0 if no such mapping exists.
-+ */
-+ public long get(K key) {
-+ int index = index(key);
-+ return index < 0 ? (long)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ Object[] keys = _set;
-+ long[] vals = _values;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = FREE;
-+ vals[i] = (long)0;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return an <code>long</code> value or (long)0 if no such mapping exists.
-+ */
-+ public long remove(K key) {
-+ long prev = (long)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TObjectLongHashMap)) {
-+ return false;
-+ }
-+ TObjectLongHashMap that = (TObjectLongHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ @Override
-+ public TObjectLongHashMap<K> clone() {
-+ TObjectLongHashMap<K> clone = ( TObjectLongHashMap<K> ) super.clone();
-+ clone._values = new long[_values.length];
-+ for( int i = 0 ; i < clone._values.length; i++ ) {
-+ clone._values[i] = _values[i];
-+ }
-+ return clone;
-+ }
-+
-+
-+ private static final class EqProcedure implements TObjectLongProcedure {
-+ private final TObjectLongHashMap _otherMap;
-+
-+ EqProcedure(TObjectLongHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(Object key, long value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two longs for equality.
-+ */
-+ private final boolean eq(long v1, long v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = 0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public long[] getValues() {
-+ long[] vals = new long[size()];
-+ long[] v = _values;
-+ Object[] keys = _set;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Object[] keys() {
-+ Object[] keys = new Object[size()];
-+ K[] k = (K[]) _set;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (k[i] != FREE && k[i] != REMOVED) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @param a the array into which the elements of the list are to
-+ * be stored, if it is big enough; otherwise, a new array of the
-+ * same runtime type is allocated for this purpose.
-+ * @return a <code>Set</code> value
-+ */
-+ public K[] keys(K[] a) {
-+ int size = size();
-+ if (a.length < size) {
-+ a = (K[]) java.lang.reflect.Array.newInstance(
-+ a.getClass().getComponentType(), size);
-+ }
-+
-+ K[] k = (K[]) _set;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (k[i] != FREE && k[i] != REMOVED) {
-+ a[j++] = k[i];
-+ }
-+ }
-+ return a;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>long</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(long val) {
-+ Object[] keys = _set;
-+ long[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(K key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TObjectProcedure<K> procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TLongProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TLongProcedure procedure) {
-+ Object[] keys = _set;
-+ long[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED
-+ && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOObjectLongProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TObjectLongProcedure<K> procedure) {
-+ K[] keys = (K[]) _set;
-+ long[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (keys[i] != FREE
-+ && keys[i] != REMOVED
-+ && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TObjectLongProcedure<K> procedure) {
-+ boolean modified = false;
-+ K[] keys = (K[]) _set;
-+ long[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (keys[i] != FREE
-+ && keys[i] != REMOVED
-+ && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TLongFunction</code> value
-+ */
-+ public void transformValues(TLongFunction function) {
-+ Object[] keys = _set;
-+ long[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (keys[i] != null && keys[i] != REMOVED) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(K key) {
-+ return adjustValue(key, (long)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(K key, long amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ K key = (K) in.readObject();
-+ long val = in.readLong();
-+ put(key, val);
-+ }
-+ }
-+} // TObjectLongHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectLongIterator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,166 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.util.ConcurrentModificationException;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type Object and long.
-+ * <p/>
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ * <p/>
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ * <p/>
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ * <p/>
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ * <p/>
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TObjectLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TObjectLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TObjectLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TObjectLongIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: O2PIterator.template,v 1.2 2006/11/30 22:06:22 robeden Exp $
-+ */
-+
-+public class TObjectLongIterator<K> extends TIterator {
-+ private final TObjectLongHashMap<K> _map;
-+
-+ public TObjectLongIterator(TObjectLongHashMap<K> map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Returns the index of the next value in the data structure
-+ * or a negative value if the iterator is exhausted.
-+ *
-+ * @return an <code>long</code> value
-+ */
-+ protected final int nextIndex() {
-+ if (_expectedSize != _hash.size()) {
-+ throw new ConcurrentModificationException();
-+ }
-+
-+ Object[] set = _map._set;
-+ int i = _index;
-+ while (i-- > 0 && (set[i] == null || set[i] == TObjectHash.REMOVED ||
-+ set[i] == TObjectHash.FREE)) ;
-+ return i;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public K key() {
-+ return (K) _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public long value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public long setValue(long val) {
-+ long old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TObjectLongIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectLongProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type Object and long.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: O2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TObjectLongProcedure<K> {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a an <code>Object</code> value
-+ * @param b a <code>long</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(K a, long b);
-+}// TObjectLongProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectShortHashMap.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,531 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+import java.util.Arrays;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for Object keys and short values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TObjectShortHashMap<K> extends TObjectHash<K> implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient short[] _values;
-+
-+ /**
-+ * Creates a new <code>TObjectShortHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TObjectShortHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectShortHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TObjectShortHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectShortHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TObjectShortHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectShortHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectShortHashMap(TObjectHashingStrategy<K> strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectShortHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectShortHashMap(int initialCapacity, TObjectHashingStrategy<K> strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TObjectShortHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TObjectShortHashMap(int initialCapacity, float loadFactor, TObjectHashingStrategy<K> strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return an iterator over the entries in this map
-+ */
-+ public TObjectShortIterator<K> iterator() {
-+ return new TObjectShortIterator<K>(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new short[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @param value an <code>short</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (short)0 if none was found.
-+ */
-+ public short put(K key, short value) {
-+ short previous = (short)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ K oldKey = (K) _set[index];
-+ _set[index] = key;
-+ _values[index] = value;
-+
-+ if (isNewMapping) {
-+ postInsertHook(oldKey == FREE);
-+ }
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ K oldKeys[] = (K[]) _set;
-+ short oldVals[] = _values;
-+
-+ _set = new Object[newCapacity];
-+ Arrays.fill(_set, FREE);
-+ _values = new short[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldKeys[i] != FREE && oldKeys[i] != REMOVED) {
-+ K o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ if (index < 0) {
-+ throwObjectContractViolation(_set[(-index -1)], o);
-+ }
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return the value of <tt>key</tt> or (short)0 if no such mapping exists.
-+ */
-+ public short get(K key) {
-+ int index = index(key);
-+ return index < 0 ? (short)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ Object[] keys = _set;
-+ short[] vals = _values;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = FREE;
-+ vals[i] = (short)0;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return an <code>short</code> value or (short)0 if no such mapping exists.
-+ */
-+ public short remove(K key) {
-+ short prev = (short)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TObjectShortHashMap)) {
-+ return false;
-+ }
-+ TObjectShortHashMap that = (TObjectShortHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ @Override
-+ public TObjectShortHashMap<K> clone() {
-+ TObjectShortHashMap<K> clone = ( TObjectShortHashMap<K> ) super.clone();
-+ clone._values = new short[_values.length];
-+ for( int i = 0 ; i < clone._values.length; i++ ) {
-+ clone._values[i] = _values[i];
-+ }
-+ return clone;
-+ }
-+
-+
-+ private static final class EqProcedure implements TObjectShortProcedure {
-+ private final TObjectShortHashMap _otherMap;
-+
-+ EqProcedure(TObjectShortHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(Object key, short value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two shorts for equality.
-+ */
-+ private final boolean eq(short v1, short v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = 0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public short[] getValues() {
-+ short[] vals = new short[size()];
-+ short[] v = _values;
-+ Object[] keys = _set;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public Object[] keys() {
-+ Object[] keys = new Object[size()];
-+ K[] k = (K[]) _set;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (k[i] != FREE && k[i] != REMOVED) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @param a the array into which the elements of the list are to
-+ * be stored, if it is big enough; otherwise, a new array of the
-+ * same runtime type is allocated for this purpose.
-+ * @return a <code>Set</code> value
-+ */
-+ public K[] keys(K[] a) {
-+ int size = size();
-+ if (a.length < size) {
-+ a = (K[]) java.lang.reflect.Array.newInstance(
-+ a.getClass().getComponentType(), size);
-+ }
-+
-+ K[] k = (K[]) _set;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (k[i] != FREE && k[i] != REMOVED) {
-+ a[j++] = k[i];
-+ }
-+ }
-+ return a;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>short</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(short val) {
-+ Object[] keys = _set;
-+ short[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(K key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TObjectProcedure<K> procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TShortProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TShortProcedure procedure) {
-+ Object[] keys = _set;
-+ short[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (keys[i] != FREE && keys[i] != REMOVED
-+ && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOObjectShortProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TObjectShortProcedure<K> procedure) {
-+ K[] keys = (K[]) _set;
-+ short[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (keys[i] != FREE
-+ && keys[i] != REMOVED
-+ && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TObjectShortProcedure<K> procedure) {
-+ boolean modified = false;
-+ K[] keys = (K[]) _set;
-+ short[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (keys[i] != FREE
-+ && keys[i] != REMOVED
-+ && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TShortFunction</code> value
-+ */
-+ public void transformValues(TShortFunction function) {
-+ Object[] keys = _set;
-+ short[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (keys[i] != null && keys[i] != REMOVED) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(K key) {
-+ return adjustValue(key, (short)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(K key, short amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ K key = (K) in.readObject();
-+ short val = in.readShort();
-+ put(key, val);
-+ }
-+ }
-+} // TObjectShortHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectShortIterator.java 2007-04-18 06:49:35.000000000 +0000
-@@ -0,0 +1,166 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.util.ConcurrentModificationException;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type Object and short.
-+ * <p/>
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ * <p/>
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ * <p/>
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ * <p/>
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ * <p/>
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TObjectShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TObjectShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TObjectShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.forward();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TObjectShortIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: O2PIterator.template,v 1.2 2006/11/30 22:06:22 robeden Exp $
-+ */
-+
-+public class TObjectShortIterator<K> extends TIterator {
-+ private final TObjectShortHashMap<K> _map;
-+
-+ public TObjectShortIterator(TObjectShortHashMap<K> map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Returns the index of the next value in the data structure
-+ * or a negative value if the iterator is exhausted.
-+ *
-+ * @return an <code>short</code> value
-+ */
-+ protected final int nextIndex() {
-+ if (_expectedSize != _hash.size()) {
-+ throw new ConcurrentModificationException();
-+ }
-+
-+ Object[] set = _map._set;
-+ int i = _index;
-+ while (i-- > 0 && (set[i] == null || set[i] == TObjectHash.REMOVED ||
-+ set[i] == TObjectHash.FREE)) ;
-+ return i;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public K key() {
-+ return (K) _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public short value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public short setValue(short val) {
-+ short old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TObjectShortIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TObjectShortProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type Object and short.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: O2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TObjectShortProcedure<K> {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a an <code>Object</code> value
-+ * @param b a <code>short</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(K a, short b);
-+}// TObjectShortProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortArrayList.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,905 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.Externalizable;
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.util.Arrays;
-+import java.util.Random;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * A resizable, array-backed list of short primitives.
-+ *
-+ * Created: Sat Dec 29 14:21:12 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+
-+public class TShortArrayList implements Externalizable, Cloneable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the data of the list */
-+ protected short[] _data;
-+
-+ /** the index after the last entry in the list */
-+ protected int _pos;
-+
-+ /** the default capacity for new lists */
-+ protected static final int DEFAULT_CAPACITY = 10;
-+
-+ /**
-+ * Creates a new <code>TShortArrayList</code> instance with the
-+ * default capacity.
-+ */
-+ public TShortArrayList() {
-+ this(DEFAULT_CAPACITY);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortArrayList</code> instance with the
-+ * specified capacity.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public TShortArrayList(int capacity) {
-+ _data = new short[capacity];
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortArrayList</code> instance whose
-+ * capacity is the greater of the length of <tt>values</tt> and
-+ * DEFAULT_CAPACITY and whose initial contents are the specified
-+ * values.
-+ *
-+ * @param values an <code>short[]</code> value
-+ */
-+ public TShortArrayList(short[] values) {
-+ this(Math.max(values.length, DEFAULT_CAPACITY));
-+ add(values);
-+ }
-+
-+ // sizing
-+
-+ /**
-+ * Grow the internal array as needed to accomodate the specified
-+ * number of elements. The size of the array shorts on each
-+ * resize unless <tt>capacity</tt> requires more than twice the
-+ * current capacity.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public void ensureCapacity(int capacity) {
-+ if (capacity > _data.length) {
-+ int newCap = Math.max(_data.length << 1, capacity);
-+ short[] tmp = new short[newCap];
-+ System.arraycopy(_data, 0, tmp, 0, _data.length);
-+ _data = tmp;
-+ }
-+ }
-+
-+ /**
-+ * Returns the number of values in the list.
-+ *
-+ * @return the number of values in the list.
-+ */
-+ public int size() {
-+ return _pos;
-+ }
-+
-+ /**
-+ * Tests whether this list contains any values.
-+ *
-+ * @return true if the list is empty.
-+ */
-+ public boolean isEmpty() {
-+ return _pos == 0;
-+ }
-+
-+ /**
-+ * Sheds any excess capacity above and beyond the current size of
-+ * the list.
-+ */
-+ public void trimToSize() {
-+ if (_data.length > size()) {
-+ short[] tmp = new short[size()];
-+ toNativeArray(tmp, 0, tmp.length);
-+ _data = tmp;
-+ }
-+ }
-+
-+ // modifying
-+
-+ /**
-+ * Adds <tt>val</tt> to the end of the list, growing as needed.
-+ *
-+ * @param val an <code>short</code> value
-+ */
-+ public void add(short val) {
-+ ensureCapacity(_pos + 1);
-+ _data[_pos++] = val;
-+ }
-+
-+ /**
-+ * Adds the values in the array <tt>vals</tt> to the end of the
-+ * list, in order.
-+ *
-+ * @param vals an <code>short[]</code> value
-+ */
-+ public void add(short[] vals) {
-+ add(vals, 0, vals.length);
-+ }
-+
-+ /**
-+ * Adds a subset of the values in the array <tt>vals</tt> to the
-+ * end of the list, in order.
-+ *
-+ * @param vals an <code>short[]</code> value
-+ * @param offset the offset at which to start copying
-+ * @param length the number of values to copy.
-+ */
-+ public void add(short[] vals, int offset, int length) {
-+ ensureCapacity(_pos + length);
-+ System.arraycopy(vals, offset, _data, _pos, length);
-+ _pos += length;
-+ }
-+
-+ /**
-+ * Inserts <tt>value</tt> into the list at <tt>offset</tt>. All
-+ * values including and to the right of <tt>offset</tt> are shifted
-+ * to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param value an <code>short</code> value
-+ */
-+ public void insert(int offset, short value) {
-+ if (offset == _pos) {
-+ add(value);
-+ return;
-+ }
-+ ensureCapacity(_pos + 1);
-+ // shift right
-+ System.arraycopy(_data, offset, _data, offset + 1, _pos - offset);
-+ // insert
-+ _data[offset] = value;
-+ _pos++;
-+ }
-+
-+ /**
-+ * Inserts the array of <tt>values</tt> into the list at
-+ * <tt>offset</tt>. All values including and to the right of
-+ * <tt>offset</tt> are shifted to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param values an <code>short[]</code> value
-+ */
-+ public void insert(int offset, short[] values) {
-+ insert(offset, values, 0, values.length);
-+ }
-+
-+ /**
-+ * Inserts a slice of the array of <tt>values</tt> into the list
-+ * at <tt>offset</tt>. All values including and to the right of
-+ * <tt>offset</tt> are shifted to the right.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param values an <code>short[]</code> value
-+ * @param valOffset the offset in the values array at which to
-+ * start copying.
-+ * @param len the number of values to copy from the values array
-+ */
-+ public void insert(int offset, short[] values, int valOffset, int len) {
-+ if (offset == _pos) {
-+ add(values, valOffset, len);
-+ return;
-+ }
-+
-+ ensureCapacity(_pos + len);
-+ // shift right
-+ System.arraycopy(_data, offset, _data, offset + len, _pos - offset);
-+ // insert
-+ System.arraycopy(values, valOffset, _data, offset, len);
-+ _pos += len;
-+ }
-+
-+ /**
-+ * Returns the value at the specified offset.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return an <code>short</code> value
-+ */
-+ public short get(int offset) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ return _data[offset];
-+ }
-+
-+ /**
-+ * Returns the value at the specified offset without doing any
-+ * bounds checking.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return an <code>short</code> value
-+ */
-+ public short getQuick(int offset) {
-+ return _data[offset];
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>short</code> value
-+ */
-+ public void set(int offset, short val) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ _data[offset] = val;
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset and returns the
-+ * previously stored value.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>short</code> value
-+ * @return the value previously stored at offset.
-+ */
-+ public short getSet(int offset, short val) {
-+ if (offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ short old = _data[offset];
-+ _data[offset] = val;
-+ return old;
-+ }
-+
-+ /**
-+ * Replace the values in the list starting at <tt>offset</tt> with
-+ * the contents of the <tt>values</tt> array.
-+ *
-+ * @param offset the first offset to replace
-+ * @param values the source of the new values
-+ */
-+ public void set(int offset, short[] values) {
-+ set(offset, values, 0, values.length);
-+ }
-+
-+ /**
-+ * Replace the values in the list starting at <tt>offset</tt> with
-+ * <tt>length</tt> values from the <tt>values</tt> array, starting
-+ * at valOffset.
-+ *
-+ * @param offset the first offset to replace
-+ * @param values the source of the new values
-+ * @param valOffset the first value to copy from the values array
-+ * @param length the number of values to copy
-+ */
-+ public void set(int offset, short[] values, int valOffset, int length) {
-+ if (offset < 0 || offset + length > _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ System.arraycopy(values, valOffset, _data, offset, length);
-+ }
-+
-+ /**
-+ * Sets the value at the specified offset without doing any bounds
-+ * checking.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param val an <code>short</code> value
-+ */
-+ public void setQuick(int offset, short val) {
-+ _data[offset] = val;
-+ }
-+
-+ /**
-+ * Flushes the internal state of the list, resetting the capacity
-+ * to the default.
-+ */
-+ public void clear() {
-+ clear(DEFAULT_CAPACITY);
-+ }
-+
-+ /**
-+ * Flushes the internal state of the list, setting the capacity of
-+ * the empty list to <tt>capacity</tt>.
-+ *
-+ * @param capacity an <code>int</code> value
-+ */
-+ public void clear(int capacity) {
-+ _data = new short[capacity];
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Sets the size of the list to 0, but does not change its
-+ * capacity. This method can be used as an alternative to the
-+ * {@link #clear clear} method if you want to recyle a list without
-+ * allocating new backing arrays.
-+ *
-+ * @see #clear
-+ */
-+ public void reset() {
-+ _pos = 0;
-+ fill((short)0);
-+ }
-+
-+ /**
-+ * Sets the size of the list to 0, but does not change its
-+ * capacity. This method can be used as an alternative to the
-+ * {@link #clear clear} method if you want to recyle a list
-+ * without allocating new backing arrays. This method differs
-+ * from {@link #reset reset} in that it does not clear the old
-+ * values in the backing array. Thus, it is possible for {@link
-+ * #getQuick getQuick} to return stale data if this method is used
-+ * and the caller is careless about bounds checking.
-+ *
-+ * @see #reset
-+ * @see #clear
-+ * @see #getQuick
-+ */
-+ public void resetQuick() {
-+ _pos = 0;
-+ }
-+
-+ /**
-+ * Removes the value at <tt>offset</tt> from the list.
-+ *
-+ * @param offset an <code>int</code> value
-+ * @return the value previously stored at offset.
-+ */
-+ public short remove(int offset) {
-+ short old = get(offset);
-+ remove(offset, 1);
-+ return old;
-+ }
-+
-+ /**
-+ * Removes <tt>length</tt> values from the list, starting at
-+ * <tt>offset</tt>
-+ *
-+ * @param offset an <code>int</code> value
-+ * @param length an <code>int</code> value
-+ */
-+ public void remove(int offset, int length) {
-+ if (offset < 0 || offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+
-+ if (offset == 0) {
-+ // data at the front
-+ System.arraycopy(_data, length, _data, 0, _pos - length);
-+ } else if (_pos - length == offset) {
-+ // no copy to make, decrementing pos "deletes" values at
-+ // the end
-+ } else {
-+ // data in the middle
-+ System.arraycopy(_data, offset + length,
-+ _data, offset, _pos - (offset + length));
-+ }
-+ _pos -= length;
-+ // no need to clear old values beyond _pos, because this is a
-+ // primitive collection and 0 takes as much room as any other
-+ // value
-+ }
-+
-+ /**
-+ * Transform each value in the list using the specified function.
-+ *
-+ * @param function a <code>TShortFunction</code> value
-+ */
-+ public void transformValues(TShortFunction function) {
-+ for (int i = _pos; i-- > 0;) {
-+ _data[i] = function.execute(_data[i]);
-+ }
-+ }
-+
-+ /**
-+ * Reverse the order of the elements in the list.
-+ */
-+ public void reverse() {
-+ reverse(0, _pos);
-+ }
-+
-+ /**
-+ * Reverse the order of the elements in the range of the list.
-+ *
-+ * @param from the inclusive index at which to start reversing
-+ * @param to the exclusive index at which to stop reversing
-+ */
-+ public void reverse(int from, int to) {
-+ if (from == to) {
-+ return; // nothing to do
-+ }
-+ if (from > to) {
-+ throw new IllegalArgumentException("from cannot be greater than to");
-+ }
-+ for (int i = from, j = to - 1; i < j; i++, j--) {
-+ swap(i, j);
-+ }
-+ }
-+
-+ /**
-+ * Shuffle the elements of the list using the specified random
-+ * number generator.
-+ *
-+ * @param rand a <code>Random</code> value
-+ */
-+ public void shuffle(Random rand) {
-+ for (int i = _pos; i-- > 1;) {
-+ swap(i, rand.nextInt(i));
-+ }
-+ }
-+
-+ /**
-+ * Swap the values at offsets <tt>i</tt> and <tt>j</tt>.
-+ *
-+ * @param i an offset into the data array
-+ * @param j an offset into the data array
-+ */
-+ private final void swap(int i, int j) {
-+ short tmp = _data[i];
-+ _data[i] = _data[j];
-+ _data[j] = tmp;
-+ }
-+
-+ // copying
-+
-+ /**
-+ * Returns a clone of this list. Since this is a primitive
-+ * collection, this will be a deep clone.
-+ *
-+ * @return a deep clone of the list.
-+ */
-+ public Object clone() {
-+ TShortArrayList list = null;
-+ try {
-+ list = (TShortArrayList) super.clone();
-+ list._data = toNativeArray();
-+ } catch (CloneNotSupportedException e) {
-+ // it's supported
-+ } // end of try-catch
-+ return list;
-+ }
-+
-+ /**
-+ * Copies the contents of the list into a native array.
-+ *
-+ * @return an <code>short[]</code> value
-+ */
-+ public short[] toNativeArray() {
-+ return toNativeArray(0, _pos);
-+ }
-+
-+ /**
-+ * Copies a slice of the list into a native array.
-+ *
-+ * @param offset the offset at which to start copying
-+ * @param len the number of values to copy.
-+ * @return an <code>short[]</code> value
-+ */
-+ public short[] toNativeArray(int offset, int len) {
-+ short[] rv = new short[len];
-+ toNativeArray(rv, offset, len);
-+ return rv;
-+ }
-+
-+ /**
-+ * Copies a slice of the list into a native array.
-+ *
-+ * @param dest the array to copy into.
-+ * @param offset the offset of the first value to copy
-+ * @param len the number of values to copy.
-+ */
-+ public void toNativeArray(short[] dest, int offset, int len) {
-+ if (len == 0) {
-+ return; // nothing to copy
-+ }
-+ if (offset < 0 || offset >= _pos) {
-+ throw new ArrayIndexOutOfBoundsException(offset);
-+ }
-+ System.arraycopy(_data, offset, dest, 0, len);
-+ }
-+
-+ // comparing
-+
-+ /**
-+ * Compares this list to another list, value by value.
-+ *
-+ * @param other the object to compare against
-+ * @return true if other is a TShortArrayList and has exactly the
-+ * same values.
-+ */
-+ public boolean equals(Object other) {
-+ if (other == this) {
-+ return true;
-+ } else if (other instanceof TShortArrayList) {
-+ TShortArrayList that = (TShortArrayList)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ } else {
-+ for (int i = _pos; i-- > 0;) {
-+ if (this._data[i] != that._data[i]) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public int hashCode() {
-+ int h = 0;
-+ for (int i = _pos; i-- > 0;) {
-+ h += HashFunctions.hash(_data[i]);
-+ }
-+ return h;
-+ }
-+
-+ // procedures
-+
-+ /**
-+ * Applies the procedure to each value in the list in ascending
-+ * (front to back) order.
-+ *
-+ * @param procedure a <code>TShortProcedure</code> value
-+ * @return true if the procedure did not terminate prematurely.
-+ */
-+ public boolean forEach(TShortProcedure procedure) {
-+ for (int i = 0; i < _pos; i++) {
-+ if (! procedure.execute(_data[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Applies the procedure to each value in the list in descending
-+ * (back to front) order.
-+ *
-+ * @param procedure a <code>TShortProcedure</code> value
-+ * @return true if the procedure did not terminate prematurely.
-+ */
-+ public boolean forEachDescending(TShortProcedure procedure) {
-+ for (int i = _pos; i-- > 0;) {
-+ if (! procedure.execute(_data[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ // sorting
-+
-+ /**
-+ * Sort the values in the list (ascending) using the Sun quicksort
-+ * implementation.
-+ *
-+ * @see java.util.Arrays#sort
-+ */
-+ public void sort() {
-+ Arrays.sort(_data, 0, _pos);
-+ }
-+
-+ /**
-+ * Sort a slice of the list (ascending) using the Sun quicksort
-+ * implementation.
-+ *
-+ * @param fromIndex the index at which to start sorting (inclusive)
-+ * @param toIndex the index at which to stop sorting (exclusive)
-+ * @see java.util.Arrays#sort
-+ */
-+ public void sort(int fromIndex, int toIndex) {
-+ Arrays.sort(_data, fromIndex, toIndex);
-+ }
-+
-+ // filling
-+
-+ /**
-+ * Fills every slot in the list with the specified value.
-+ *
-+ * @param val the value to use when filling
-+ */
-+ public void fill(short val) {
-+ Arrays.fill(_data, 0, _pos, val);
-+ }
-+
-+ /**
-+ * Fills a range in the list with the specified value.
-+ *
-+ * @param fromIndex the offset at which to start filling (inclusive)
-+ * @param toIndex the offset at which to stop filling (exclusive)
-+ * @param val the value to use when filling
-+ */
-+ public void fill(int fromIndex, int toIndex, short val) {
-+ if (toIndex > _pos) {
-+ ensureCapacity(toIndex);
-+ _pos = toIndex;
-+ }
-+ Arrays.fill(_data, fromIndex, toIndex, val);
-+ }
-+
-+ // searching
-+
-+ /**
-+ * Performs a binary search for <tt>value</tt> in the entire list.
-+ * Note that you <b>must</b> @{link #sort sort} the list before
-+ * doing a search.
-+ *
-+ * @param value the value to search for
-+ * @return the absolute offset in the list of the value, or its
-+ * negative insertion point into the sorted list.
-+ */
-+ public int binarySearch(short value) {
-+ return binarySearch(value, 0, _pos);
-+ }
-+
-+ /**
-+ * Performs a binary search for <tt>value</tt> in the specified
-+ * range. Note that you <b>must</b> @{link #sort sort} the list
-+ * or the range before doing a search.
-+ *
-+ * @param value the value to search for
-+ * @param fromIndex the lower boundary of the range (inclusive)
-+ * @param toIndex the upper boundary of the range (exclusive)
-+ * @return the absolute offset in the list of the value, or its
-+ * negative insertion point into the sorted list.
-+ */
-+ public int binarySearch(short value, int fromIndex, int toIndex) {
-+ if (fromIndex < 0) {
-+ throw new ArrayIndexOutOfBoundsException(fromIndex);
-+ }
-+ if (toIndex > _pos) {
-+ throw new ArrayIndexOutOfBoundsException(toIndex);
-+ }
-+
-+ int low = fromIndex;
-+ int high = toIndex - 1;
-+
-+ while (low <= high) {
-+ int mid = (low + high) >> 1;
-+ short midVal = _data[mid];
-+
-+ if (midVal < value) {
-+ low = mid + 1;
-+ } else if (midVal > value) {
-+ high = mid - 1;
-+ } else {
-+ return mid; // value found
-+ }
-+ }
-+ return -(low + 1); // value not found.
-+ }
-+
-+ /**
-+ * Searches the list front to back for the index of
-+ * <tt>value</tt>.
-+ *
-+ * @param value an <code>short</code> value
-+ * @return the first offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int indexOf(short value) {
-+ return indexOf(0, value);
-+ }
-+
-+ /**
-+ * Searches the list front to back for the index of
-+ * <tt>value</tt>, starting at <tt>offset</tt>.
-+ *
-+ * @param offset the offset at which to start the linear search
-+ * (inclusive)
-+ * @param value an <code>short</code> value
-+ * @return the first offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int indexOf(int offset, short value) {
-+ for (int i = offset; i < _pos; i++) {
-+ if (_data[i] == value) {
-+ return i;
-+ }
-+ }
-+ return -1;
-+ }
-+
-+ /**
-+ * Searches the list back to front for the last index of
-+ * <tt>value</tt>.
-+ *
-+ * @param value an <code>short</code> value
-+ * @return the last offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int lastIndexOf(short value) {
-+ return lastIndexOf(_pos, value);
-+ }
-+
-+ /**
-+ * Searches the list back to front for the last index of
-+ * <tt>value</tt>, starting at <tt>offset</tt>.
-+ *
-+ * @param offset the offset at which to start the linear search
-+ * (exclusive)
-+ * @param value an <code>short</code> value
-+ * @return the last offset of the value, or -1 if it is not in
-+ * the list.
-+ * @see #binarySearch for faster searches on sorted lists
-+ */
-+ public int lastIndexOf(int offset, short value) {
-+ for (int i = offset; i-- > 0;) {
-+ if (_data[i] == value) {
-+ return i;
-+ }
-+ }
-+ return -1;
-+ }
-+
-+ /**
-+ * Searches the list for <tt>value</tt>
-+ *
-+ * @param value an <code>short</code> value
-+ * @return true if value is in the list.
-+ */
-+ public boolean contains(short value) {
-+ return lastIndexOf(value) >= 0;
-+ }
-+
-+ /**
-+ * Searches the list for values satisfying <tt>condition</tt> in
-+ * the manner of the *nix <tt>grep</tt> utility.
-+ *
-+ * @param condition a condition to apply to each element in the list
-+ * @return a list of values which match the condition.
-+ */
-+ public TShortArrayList grep(TShortProcedure condition) {
-+ TShortArrayList list = new TShortArrayList();
-+ for (int i = 0; i < _pos; i++) {
-+ if (condition.execute(_data[i])) {
-+ list.add(_data[i]);
-+ }
-+ }
-+ return list;
-+ }
-+
-+ /**
-+ * Searches the list for values which do <b>not</b> satisfy
-+ * <tt>condition</tt>. This is akin to *nix <code>grep -v</code>.
-+ *
-+ * @param condition a condition to apply to each element in the list
-+ * @return a list of values which do not match the condition.
-+ */
-+ public TShortArrayList inverseGrep(TShortProcedure condition) {
-+ TShortArrayList list = new TShortArrayList();
-+ for (int i = 0; i < _pos; i++) {
-+ if (! condition.execute(_data[i])) {
-+ list.add(_data[i]);
-+ }
-+ }
-+ return list;
-+ }
-+
-+ /**
-+ * Finds the maximum value in the list.
-+ *
-+ * @return the largest value in the list.
-+ * @exception IllegalStateException if the list is empty
-+ */
-+ public short max() {
-+ if (size() == 0) {
-+ throw new IllegalStateException("cannot find maximum of an empty list");
-+ }
-+ short max = _data[_pos - 1];
-+ for (int i = _pos - 1; i-- > 0;) {
-+ if ( _data[_pos] > max ) {
-+ max = _data[_pos];
-+ }
-+ }
-+ return max;
-+ }
-+
-+ /**
-+ * Finds the minimum value in the list.
-+ *
-+ * @return the smallest value in the list.
-+ * @exception IllegalStateException if the list is empty
-+ */
-+ public short min() {
-+ if (size() == 0) {
-+ throw new IllegalStateException("cannot find minimum of an empty list");
-+ }
-+ short min = _data[_pos - 1];
-+ for (int i = _pos - 1; i-- > 0;) {
-+ if ( _data[_pos] > min ) {
-+ min = _data[_pos];
-+ }
-+ }
-+ return min;
-+ }
-+
-+ // stringification
-+
-+ /**
-+ * Returns a String representation of the list, front to back.
-+ *
-+ * @return a <code>String</code> value
-+ */
-+ public String toString() {
-+ final StringBuffer buf = new StringBuffer("{");
-+ for (int i = 0, end = _pos - 1; i < end; i++) {
-+ buf.append(_data[i]);
-+ buf.append(", ");
-+ }
-+ if (size() > 0) {
-+ buf.append(_data[_pos - 1]);
-+ }
-+ buf.append("}");
-+ return buf.toString();
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // POSITION
-+ out.writeInt( _pos );
-+
-+ // ENTRIES
-+ int len = _data.length;
-+ out.writeInt( len );
-+ for( int i = 0; i < len; i++ ) {
-+ out.writeShort( _data[ i ] );
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // POSITION
-+ _pos = in.readInt();
-+
-+ // ENTRIES
-+ int len = in.readInt();
-+ _data = new short[ len ];
-+ for( int i = 0; i < len; i++ ) {
-+ _data[ i ] = in.readShort();
-+ }
-+ }
-+} // TShortArrayList
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortByteHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for short keys and byte values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TShortByteHashMap extends TShortHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient byte[] _values;
-+
-+ /**
-+ * Creates a new <code>TShortByteHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TShortByteHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortByteHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TShortByteHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortByteHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TShortByteHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortByteHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortByteHashMap(TShortHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortByteHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortByteHashMap(int initialCapacity, TShortHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortByteHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortByteHashMap(int initialCapacity, float loadFactor, TShortHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TShortByteHashMap m = (TShortByteHashMap)super.clone();
-+ m._values = (byte[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TShortByteIterator with access to this map's keys and values
-+ */
-+ public TShortByteIterator iterator() {
-+ return new TShortByteIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new byte[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @param value an <code>byte</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (short)0 if none was found.
-+ */
-+ public byte put(short key, byte value) {
-+ byte previousState;
-+ byte previous = (byte)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ short oldKeys[] = _set;
-+ byte oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new short[newCapacity];
-+ _values = new byte[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ short o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>short</code> value
-+ * @return the value of <tt>key</tt> or (short)0 if no such mapping exists.
-+ */
-+ public byte get(short key) {
-+ int index = index(key);
-+ return index < 0 ? (byte)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ short[] keys = _set;
-+ byte[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (short)0;
-+ vals[i] = (byte)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @return an <code>byte</code> value, or (short)0 if no mapping for key exists
-+ */
-+ public byte remove(short key) {
-+ byte prev = (byte)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TShortByteHashMap)) {
-+ return false;
-+ }
-+ TShortByteHashMap that = (TShortByteHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TShortByteProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(short key, byte value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TShortByteProcedure {
-+ private final TShortByteHashMap _otherMap;
-+
-+ EqProcedure(TShortByteHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(short key, byte value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two bytes for equality.
-+ */
-+ private final boolean eq(byte v1, byte v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (byte)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public byte[] getValues() {
-+ byte[] vals = new byte[size()];
-+ byte[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public short[] keys() {
-+ short[] keys = new short[size()];
-+ short[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>byte</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(byte val) {
-+ byte[] states = _states;
-+ byte[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(short key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TShortProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TShortProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TByteProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TByteProcedure procedure) {
-+ byte[] states = _states;
-+ byte[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOShortByteProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TShortByteProcedure procedure) {
-+ byte[] states = _states;
-+ short[] keys = _set;
-+ byte[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TShortByteProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ short[] keys = _set;
-+ byte[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TByteFunction</code> value
-+ */
-+ public void transformValues(TByteFunction function) {
-+ byte[] states = _states;
-+ byte[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(short key) {
-+ return adjustValue(key, (byte)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(short key, byte amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ short key = in.readShort();
-+ byte val = in.readByte();
-+ put(key, val);
-+ }
-+ }
-+} // TShortByteHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortByteIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type short and byte.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TShortByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TShortByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TShortByteIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TShortByteIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TShortByteIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TShortByteHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TShortByteIterator(TShortByteHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public short key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public byte value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public byte setValue(byte val) {
-+ byte old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TShortByteIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortByteProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type short and byte.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TShortByteProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>short</code> value
-+ * @param b a <code>byte</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(short a, byte b);
-+}// TShortByteProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortDoubleHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for short keys and double values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TShortDoubleHashMap extends TShortHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient double[] _values;
-+
-+ /**
-+ * Creates a new <code>TShortDoubleHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TShortDoubleHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortDoubleHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TShortDoubleHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortDoubleHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TShortDoubleHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortDoubleHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortDoubleHashMap(TShortHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortDoubleHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortDoubleHashMap(int initialCapacity, TShortHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortDoubleHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortDoubleHashMap(int initialCapacity, float loadFactor, TShortHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TShortDoubleHashMap m = (TShortDoubleHashMap)super.clone();
-+ m._values = (double[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TShortDoubleIterator with access to this map's keys and values
-+ */
-+ public TShortDoubleIterator iterator() {
-+ return new TShortDoubleIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new double[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @param value an <code>double</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (short)0 if none was found.
-+ */
-+ public double put(short key, double value) {
-+ byte previousState;
-+ double previous = (double)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ short oldKeys[] = _set;
-+ double oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new short[newCapacity];
-+ _values = new double[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ short o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>short</code> value
-+ * @return the value of <tt>key</tt> or (short)0 if no such mapping exists.
-+ */
-+ public double get(short key) {
-+ int index = index(key);
-+ return index < 0 ? (double)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ short[] keys = _set;
-+ double[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (short)0;
-+ vals[i] = (double)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @return an <code>double</code> value, or (short)0 if no mapping for key exists
-+ */
-+ public double remove(short key) {
-+ double prev = (double)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TShortDoubleHashMap)) {
-+ return false;
-+ }
-+ TShortDoubleHashMap that = (TShortDoubleHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TShortDoubleProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(short key, double value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TShortDoubleProcedure {
-+ private final TShortDoubleHashMap _otherMap;
-+
-+ EqProcedure(TShortDoubleHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(short key, double value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two doubles for equality.
-+ */
-+ private final boolean eq(double v1, double v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (double)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public double[] getValues() {
-+ double[] vals = new double[size()];
-+ double[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public short[] keys() {
-+ short[] keys = new short[size()];
-+ short[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>double</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(double val) {
-+ byte[] states = _states;
-+ double[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(short key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TShortProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TShortProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TDoubleProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TDoubleProcedure procedure) {
-+ byte[] states = _states;
-+ double[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOShortDoubleProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TShortDoubleProcedure procedure) {
-+ byte[] states = _states;
-+ short[] keys = _set;
-+ double[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TShortDoubleProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ short[] keys = _set;
-+ double[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TDoubleFunction</code> value
-+ */
-+ public void transformValues(TDoubleFunction function) {
-+ byte[] states = _states;
-+ double[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(short key) {
-+ return adjustValue(key, (double)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(short key, double amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ short key = in.readShort();
-+ double val = in.readDouble();
-+ put(key, val);
-+ }
-+ }
-+} // TShortDoubleHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortDoubleIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type short and double.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TShortDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TShortDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TShortDoubleIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TShortDoubleIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TShortDoubleIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TShortDoubleHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TShortDoubleIterator(TShortDoubleHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public short key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public double value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public double setValue(double val) {
-+ double old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TShortDoubleIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortDoubleProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type short and double.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TShortDoubleProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>short</code> value
-+ * @param b a <code>double</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(short a, double b);
-+}// TShortDoubleProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortFloatHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for short keys and float values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TShortFloatHashMap extends TShortHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient float[] _values;
-+
-+ /**
-+ * Creates a new <code>TShortFloatHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TShortFloatHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortFloatHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TShortFloatHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortFloatHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TShortFloatHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortFloatHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortFloatHashMap(TShortHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortFloatHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortFloatHashMap(int initialCapacity, TShortHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortFloatHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortFloatHashMap(int initialCapacity, float loadFactor, TShortHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TShortFloatHashMap m = (TShortFloatHashMap)super.clone();
-+ m._values = (float[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TShortFloatIterator with access to this map's keys and values
-+ */
-+ public TShortFloatIterator iterator() {
-+ return new TShortFloatIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new float[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @param value an <code>float</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (short)0 if none was found.
-+ */
-+ public float put(short key, float value) {
-+ byte previousState;
-+ float previous = (float)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ short oldKeys[] = _set;
-+ float oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new short[newCapacity];
-+ _values = new float[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ short o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>short</code> value
-+ * @return the value of <tt>key</tt> or (short)0 if no such mapping exists.
-+ */
-+ public float get(short key) {
-+ int index = index(key);
-+ return index < 0 ? (float)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ short[] keys = _set;
-+ float[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (short)0;
-+ vals[i] = (float)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @return an <code>float</code> value, or (short)0 if no mapping for key exists
-+ */
-+ public float remove(short key) {
-+ float prev = (float)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TShortFloatHashMap)) {
-+ return false;
-+ }
-+ TShortFloatHashMap that = (TShortFloatHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TShortFloatProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(short key, float value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TShortFloatProcedure {
-+ private final TShortFloatHashMap _otherMap;
-+
-+ EqProcedure(TShortFloatHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(short key, float value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two floats for equality.
-+ */
-+ private final boolean eq(float v1, float v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (float)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public float[] getValues() {
-+ float[] vals = new float[size()];
-+ float[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public short[] keys() {
-+ short[] keys = new short[size()];
-+ short[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>float</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(float val) {
-+ byte[] states = _states;
-+ float[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(short key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TShortProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TShortProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TFloatProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TFloatProcedure procedure) {
-+ byte[] states = _states;
-+ float[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOShortFloatProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TShortFloatProcedure procedure) {
-+ byte[] states = _states;
-+ short[] keys = _set;
-+ float[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TShortFloatProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ short[] keys = _set;
-+ float[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TFloatFunction</code> value
-+ */
-+ public void transformValues(TFloatFunction function) {
-+ byte[] states = _states;
-+ float[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(short key) {
-+ return adjustValue(key, (float)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(short key, float amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ short key = in.readShort();
-+ float val = in.readFloat();
-+ put(key, val);
-+ }
-+ }
-+} // TShortFloatHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortFloatIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type short and float.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TShortFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TShortFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TShortFloatIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TShortFloatIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TShortFloatIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TShortFloatHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TShortFloatIterator(TShortFloatHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public short key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public float value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public float setValue(float val) {
-+ float old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TShortFloatIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortFloatProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type short and float.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TShortFloatProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>short</code> value
-+ * @param b a <code>float</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(short a, float b);
-+}// TShortFloatProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortFunction.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,43 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for functions that accept and return one short primitive.
-+ *
-+ * Created: Mon Nov 5 22:19:36 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PFunction.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TShortFunction {
-+ /**
-+ * Execute this function with <tt>value</tt>
-+ *
-+ * @param value a <code>short</code> input
-+ * @return a <code>short</code> result
-+ */
-+ public short execute(short value);
-+}// TShortFunction
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortHash.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,289 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed hashing implementation for short primitives.
-+ *
-+ * Created: Sun Nov 4 08:56:06 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PHash.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+abstract public class TShortHash extends TPrimitiveHash implements TShortHashingStrategy {
-+
-+ /** the set of shorts */
-+ protected transient short[] _set;
-+
-+ /** strategy used to hash values in this collection */
-+ protected TShortHashingStrategy _hashingStrategy;
-+
-+ /**
-+ * Creates a new <code>TShortHash</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TShortHash() {
-+ super();
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TShortHash(int initialCapacity) {
-+ super(initialCapacity);
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ */
-+ public TShortHash(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ this._hashingStrategy = this;
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortHash</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortHash(TShortHashingStrategy strategy) {
-+ super();
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortHash(int initialCapacity, TShortHashingStrategy strategy) {
-+ super(initialCapacity);
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortHash(int initialCapacity, float loadFactor, TShortHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor);
-+ this._hashingStrategy = strategy;
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TShortHash h = (TShortHash)super.clone();
-+ h._set = (short[])this._set.clone();
-+ return h;
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _set = new short[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Searches the set for <tt>val</tt>
-+ *
-+ * @param val an <code>short</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean contains(short val) {
-+ return index(val) >= 0;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each element in the set.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the set terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEach(TShortProcedure procedure) {
-+ byte[] states = _states;
-+ short[] set = _set;
-+ for (int i = set.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(set[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Releases the element currently stored at <tt>index</tt>.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _set[index] = (short)0;
-+ super.removeAt(index);
-+ }
-+
-+ /**
-+ * Locates the index of <tt>val</tt>.
-+ *
-+ * @param val an <code>short</code> value
-+ * @return the index of <tt>val</tt> or -1 if it isn't in the set.
-+ */
-+ protected int index(short val) {
-+ int hash, probe, index, length;
-+ short[] set;
-+ byte[] states;
-+
-+ states = _states;
-+ set = _set;
-+ length = states.length;
-+ hash = _hashingStrategy.computeHashCode(val) & 0x7fffffff;
-+ index = hash % length;
-+
-+ if (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val)) {
-+ // see Knuth, p. 529
-+ probe = 1 + (hash % (length - 2));
-+
-+ do {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ } while (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val));
-+ }
-+
-+ return states[index] == FREE ? -1 : index;
-+ }
-+
-+ /**
-+ * Locates the index at which <tt>val</tt> can be inserted. if
-+ * there is already a value equal()ing <tt>val</tt> in the set,
-+ * returns that value as a negative integer.
-+ *
-+ * @param val an <code>short</code> value
-+ * @return an <code>int</code> value
-+ */
-+ protected int insertionIndex(short val) {
-+ int hash, probe, index, length;
-+ short[] set;
-+ byte[] states;
-+
-+ states = _states;
-+ set = _set;
-+ length = states.length;
-+ hash = _hashingStrategy.computeHashCode(val) & 0x7fffffff;
-+ index = hash % length;
-+
-+ if (states[index] == FREE) {
-+ return index; // empty, all done
-+ } else if (states[index] == FULL && set[index] == val) {
-+ return -index -1; // already stored
-+ } else { // already FULL or REMOVED, must probe
-+ // compute the double hash
-+ probe = 1 + (hash % (length - 2));
-+
-+ // if the slot we landed on is FULL (but not removed), probe
-+ // until we find an empty slot, a REMOVED slot, or an element
-+ // equal to the one we are trying to insert.
-+ // finding an empty slot means that the value is not present
-+ // and that we should use that slot as the insertion point;
-+ // finding a REMOVED slot means that we need to keep searching,
-+ // however we want to remember the offset of that REMOVED slot
-+ // so we can reuse it in case a "new" insertion (i.e. not an update)
-+ // is possible.
-+ // finding a matching value means that we've found that our desired
-+ // key is already in the table
-+
-+ if (states[index] != REMOVED) {
-+ // starting at the natural offset, probe until we find an
-+ // offset that isn't full.
-+ do {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ } while (states[index] == FULL && set[index] != val);
-+ }
-+
-+ // if the index we found was removed: continue probing until we
-+ // locate a free location or an element which equal()s the
-+ // one we have.
-+ if (states[index] == REMOVED) {
-+ int firstRemoved = index;
-+ while (states[index] != FREE &&
-+ (states[index] == REMOVED || set[index] != val)) {
-+ index -= probe;
-+ if (index < 0) {
-+ index += length;
-+ }
-+ }
-+ return states[index] == FULL ? -index -1 : firstRemoved;
-+ }
-+ // if it's full, the key is already stored
-+ return states[index] == FULL ? -index -1 : index;
-+ }
-+ }
-+
-+ /**
-+ * Default implementation of TShortHashingStrategy:
-+ * delegates hashing to HashFunctions.hash(short).
-+ *
-+ * @param val the value to hash
-+ * @return the hashcode.
-+ */
-+ public final int computeHashCode(short val) {
-+ return HashFunctions.hash(val);
-+ }
-+} // TShortHash
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortHashingStrategy.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,49 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2002, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.Serializable;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface to support pluggable hashing strategies in maps and sets.
-+ * Implementors can use this interface to make the trove hashing
-+ * algorithms use an optimal strategy when computing hashcodes.
-+ *
-+ * Created: Sun Nov 4 08:56:06 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PHashingStrategy.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TShortHashingStrategy extends Serializable {
-+ /**
-+ * Computes a hash code for the specified short. Implementors
-+ * can use the short's own value or a custom scheme designed to
-+ * minimize collisions for a known set of input.
-+ *
-+ * @param val short for which the hashcode is to be computed
-+ * @return the hashCode
-+ */
-+ public int computeHashCode(short val);
-+} // TShortHashingStrategy
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortHashSet.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,371 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+import java.util.Arrays;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed set implementation for short primitives.
-+ *
-+ * @author Eric D. Friedman
-+ * @author Rob Eden
-+ */
-+
-+public class TShortHashSet extends TShortHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /**
-+ * Creates a new <code>TShortHashSet</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TShortHashSet() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortHashSet</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TShortHashSet(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortHashSet</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TShortHashSet(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortHashSet</code> instance containing the
-+ * elements of <tt>array</tt>.
-+ *
-+ * @param array an array of <code>short</code> primitives
-+ */
-+ public TShortHashSet(short[] array) {
-+ this(array.length);
-+ addAll(array);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortHash</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortHashSet(TShortHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortHash</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortHashSet(int initialCapacity, TShortHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortHash</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortHashSet(int initialCapacity, float loadFactor, TShortHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortHashSet</code> instance containing the
-+ * elements of <tt>array</tt>.
-+ *
-+ * @param array an array of <code>short</code> primitives
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortHashSet(short[] array, TShortHashingStrategy strategy) {
-+ this(array.length, strategy);
-+ addAll(array);
-+ }
-+
-+ /**
-+ * @return a TShortIterator with access to the values in this set
-+ */
-+ public TShortIterator iterator() {
-+ return new TShortIterator(this);
-+ }
-+
-+ /**
-+ * Inserts a value into the set.
-+ *
-+ * @param val an <code>short</code> value
-+ * @return true if the set was modified by the add operation
-+ */
-+ public boolean add(short val) {
-+ int index = insertionIndex(val);
-+
-+ if (index < 0) {
-+ return false; // already present in set, nothing to add
-+ }
-+
-+ byte previousState = _states[index];
-+ _set[index] = val;
-+ _states[index] = FULL;
-+ postInsertHook(previousState == FREE);
-+
-+ return true; // yes, we added something
-+ }
-+
-+ /**
-+ * Expands the set to accomodate new values.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ short oldSet[] = _set;
-+ byte oldStates[] = _states;
-+
-+ _set = new short[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ short o = oldSet[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Returns a new array containing the values in the set.
-+ *
-+ * @return an <code>short[]</code> value
-+ */
-+ public short[] toArray() {
-+ short[] result = new short[size()];
-+ short[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = states.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ result[j++] = set[i];
-+ }
-+ }
-+ return result;
-+ }
-+
-+ /**
-+ * Empties the set.
-+ */
-+ public void clear() {
-+ super.clear();
-+ short[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = set.length; i-- > 0;) {
-+ set[i] = (short)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Compares this set with another set for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TShortHashSet)) {
-+ return false;
-+ }
-+ final TShortHashSet that = (TShortHashSet)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEach(new TShortProcedure() {
-+ public final boolean execute(short value) {
-+ return that.contains(value);
-+ }
-+ });
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEach(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TShortProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(short key) {
-+ h += _hashingStrategy.computeHashCode(key);
-+ return true;
-+ }
-+ }
-+
-+ /**
-+ * Removes <tt>val</tt> from the set.
-+ *
-+ * @param val an <code>short</code> value
-+ * @return true if the set was modified by the remove operation.
-+ */
-+ public boolean remove(short val) {
-+ int index = index(val);
-+ if (index >= 0) {
-+ removeAt(index);
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Tests the set to determine if all of the elements in
-+ * <tt>array</tt> are present.
-+ *
-+ * @param array an <code>array</code> of short primitives.
-+ * @return true if all elements were present in the set.
-+ */
-+ public boolean containsAll(short[] array) {
-+ for (int i = array.length; i-- > 0;) {
-+ if (! contains(array[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Adds all of the elements in <tt>array</tt> to the set.
-+ *
-+ * @param array an <code>array</code> of short primitives.
-+ * @return true if the set was modified by the add all operation.
-+ */
-+ public boolean addAll(short[] array) {
-+ boolean changed = false;
-+ for (int i = array.length; i-- > 0;) {
-+ if (add(array[i])) {
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+ /**
-+ * Removes all of the elements in <tt>array</tt> from the set.
-+ *
-+ * @param array an <code>array</code> of short primitives.
-+ * @return true if the set was modified by the remove all operation.
-+ */
-+ public boolean removeAll(short[] array) {
-+ boolean changed = false;
-+ for (int i = array.length; i-- > 0;) {
-+ if (remove(array[i])) {
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+ /**
-+ * Removes any values in the set which are not contained in
-+ * <tt>array</tt>.
-+ *
-+ * @param array an <code>array</code> of short primitives.
-+ * @return true if the set was modified by the retain all operation
-+ */
-+ public boolean retainAll(short[] array) {
-+ boolean changed = false;
-+ Arrays.sort(array);
-+ short[] set = _set;
-+ byte[] states = _states;
-+
-+ for (int i = set.length; i-- > 0;) {
-+ if (states[i] == FULL && (Arrays.binarySearch(array,set[i]) < 0)) {
-+ remove(set[i]);
-+ changed = true;
-+ }
-+ }
-+ return changed;
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure(out);
-+ if (! forEach(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+
-+ // ENTRIES
-+ setUp(size);
-+ while (size-- > 0) {
-+ short val = in.readShort();
-+ add(val);
-+ }
-+ }
-+} // TShortHashSet
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortIntHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for short keys and int values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TShortIntHashMap extends TShortHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient int[] _values;
-+
-+ /**
-+ * Creates a new <code>TShortIntHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TShortIntHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortIntHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TShortIntHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortIntHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TShortIntHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortIntHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortIntHashMap(TShortHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortIntHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortIntHashMap(int initialCapacity, TShortHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortIntHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortIntHashMap(int initialCapacity, float loadFactor, TShortHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TShortIntHashMap m = (TShortIntHashMap)super.clone();
-+ m._values = (int[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TShortIntIterator with access to this map's keys and values
-+ */
-+ public TShortIntIterator iterator() {
-+ return new TShortIntIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new int[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @param value an <code>int</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (short)0 if none was found.
-+ */
-+ public int put(short key, int value) {
-+ byte previousState;
-+ int previous = (int)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ short oldKeys[] = _set;
-+ int oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new short[newCapacity];
-+ _values = new int[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ short o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>short</code> value
-+ * @return the value of <tt>key</tt> or (short)0 if no such mapping exists.
-+ */
-+ public int get(short key) {
-+ int index = index(key);
-+ return index < 0 ? (int)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ short[] keys = _set;
-+ int[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (short)0;
-+ vals[i] = (int)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @return an <code>int</code> value, or (short)0 if no mapping for key exists
-+ */
-+ public int remove(short key) {
-+ int prev = (int)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TShortIntHashMap)) {
-+ return false;
-+ }
-+ TShortIntHashMap that = (TShortIntHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TShortIntProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(short key, int value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TShortIntProcedure {
-+ private final TShortIntHashMap _otherMap;
-+
-+ EqProcedure(TShortIntHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(short key, int value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two ints for equality.
-+ */
-+ private final boolean eq(int v1, int v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (int)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public int[] getValues() {
-+ int[] vals = new int[size()];
-+ int[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public short[] keys() {
-+ short[] keys = new short[size()];
-+ short[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>int</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(int val) {
-+ byte[] states = _states;
-+ int[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(short key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TShortProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TShortProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TIntProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TIntProcedure procedure) {
-+ byte[] states = _states;
-+ int[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOShortIntProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TShortIntProcedure procedure) {
-+ byte[] states = _states;
-+ short[] keys = _set;
-+ int[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TShortIntProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ short[] keys = _set;
-+ int[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TIntFunction</code> value
-+ */
-+ public void transformValues(TIntFunction function) {
-+ byte[] states = _states;
-+ int[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(short key) {
-+ return adjustValue(key, (int)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(short key, int amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ short key = in.readShort();
-+ int val = in.readInt();
-+ put(key, val);
-+ }
-+ }
-+} // TShortIntHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortIntIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type short and int.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TShortIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TShortIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TShortIntIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TShortIntIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TShortIntIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TShortIntHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TShortIntIterator(TShortIntHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public short key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public int value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public int setValue(int val) {
-+ int old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TShortIntIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortIntProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type short and int.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TShortIntProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>short</code> value
-+ * @param b a <code>int</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(short a, int b);
-+}// TShortIntProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,56 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for short collections.
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TShortIterator extends TPrimitiveIterator {
-+ /** the collection on which the iterator operates */
-+ private final TShortHash _hash;
-+
-+ /**
-+ * Creates a TShortIterator for the elements in the specified collection.
-+ */
-+ public TShortIterator(TShortHash hash) {
-+ super(hash);
-+ this._hash = hash;
-+ }
-+
-+ /**
-+ * Advances the iterator to the next element in the underlying collection
-+ * and returns it.
-+ *
-+ * @return the next short in the collection
-+ * @exception NoSuchElementException if the iterator is already exhausted
-+ */
-+ public short next() {
-+ moveToNextIndex();
-+ return _hash._set[_index];
-+ }
-+}// TShortIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortLongHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for short keys and long values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TShortLongHashMap extends TShortHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient long[] _values;
-+
-+ /**
-+ * Creates a new <code>TShortLongHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TShortLongHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortLongHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TShortLongHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortLongHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TShortLongHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortLongHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortLongHashMap(TShortHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortLongHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortLongHashMap(int initialCapacity, TShortHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortLongHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortLongHashMap(int initialCapacity, float loadFactor, TShortHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TShortLongHashMap m = (TShortLongHashMap)super.clone();
-+ m._values = (long[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TShortLongIterator with access to this map's keys and values
-+ */
-+ public TShortLongIterator iterator() {
-+ return new TShortLongIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new long[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @param value an <code>long</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (short)0 if none was found.
-+ */
-+ public long put(short key, long value) {
-+ byte previousState;
-+ long previous = (long)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ short oldKeys[] = _set;
-+ long oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new short[newCapacity];
-+ _values = new long[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ short o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>short</code> value
-+ * @return the value of <tt>key</tt> or (short)0 if no such mapping exists.
-+ */
-+ public long get(short key) {
-+ int index = index(key);
-+ return index < 0 ? (long)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ short[] keys = _set;
-+ long[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (short)0;
-+ vals[i] = (long)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @return an <code>long</code> value, or (short)0 if no mapping for key exists
-+ */
-+ public long remove(short key) {
-+ long prev = (long)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TShortLongHashMap)) {
-+ return false;
-+ }
-+ TShortLongHashMap that = (TShortLongHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TShortLongProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(short key, long value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TShortLongProcedure {
-+ private final TShortLongHashMap _otherMap;
-+
-+ EqProcedure(TShortLongHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(short key, long value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two longs for equality.
-+ */
-+ private final boolean eq(long v1, long v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (long)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public long[] getValues() {
-+ long[] vals = new long[size()];
-+ long[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public short[] keys() {
-+ short[] keys = new short[size()];
-+ short[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>long</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(long val) {
-+ byte[] states = _states;
-+ long[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(short key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TShortProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TShortProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TLongProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TLongProcedure procedure) {
-+ byte[] states = _states;
-+ long[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOShortLongProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TShortLongProcedure procedure) {
-+ byte[] states = _states;
-+ short[] keys = _set;
-+ long[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TShortLongProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ short[] keys = _set;
-+ long[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TLongFunction</code> value
-+ */
-+ public void transformValues(TLongFunction function) {
-+ byte[] states = _states;
-+ long[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(short key) {
-+ return adjustValue(key, (long)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(short key, long amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ short key = in.readShort();
-+ long val = in.readLong();
-+ put(key, val);
-+ }
-+ }
-+} // TShortLongHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortLongIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type short and long.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TShortLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TShortLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TShortLongIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TShortLongIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TShortLongIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TShortLongHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TShortLongIterator(TShortLongHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public short key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public long value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public long setValue(long val) {
-+ long old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TShortLongIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortLongProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type short and long.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TShortLongProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>short</code> value
-+ * @param b a <code>long</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(short a, long b);
-+}// TShortLongProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortObjectHashMap.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,507 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for short keys and Object values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TShortObjectHashMap<V> extends TShortHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient V[] _values;
-+
-+ /**
-+ * Creates a new <code>TShortObjectHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TShortObjectHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortObjectHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TShortObjectHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortObjectHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TShortObjectHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortObjectHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortObjectHashMap(TShortHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortObjectHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortObjectHashMap(int initialCapacity, TShortHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortObjectHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortObjectHashMap(int initialCapacity, float loadFactor, TShortHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public TShortObjectHashMap<V> clone() {
-+ TShortObjectHashMap<V> m = (TShortObjectHashMap<V>)super.clone();
-+ m._values = (V[]) this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TShortObjectIterator with access to this map's keys and values
-+ */
-+ public TShortObjectIterator<V> iterator() {
-+ return new TShortObjectIterator<V>(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = (V[]) new Object[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @param value an <code>Object</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (short)0 if none was found.
-+ */
-+ public V put(short key, V value) {
-+ byte previousState;
-+ V previous = null;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ short oldKeys[] = _set;
-+ V oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new short[newCapacity];
-+ _values = (V[]) new Object[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ short o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>short</code> value
-+ * @return the value of <tt>key</tt> or (short)0 if no such mapping exists.
-+ */
-+ public V get(short key) {
-+ int index = index(key);
-+ return index < 0 ? null : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ short[] keys = _set;
-+ Object[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (short)0;
-+ vals[i] = null;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @return an <code>Object</code> value or (short)0 if no such mapping exists.
-+ */
-+ public V remove(short key) {
-+ V prev = null;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TShortObjectHashMap)) {
-+ return false;
-+ }
-+ TShortObjectHashMap that = (TShortObjectHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TShortObjectProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(short key, Object value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TShortObjectProcedure {
-+ private final TShortObjectHashMap _otherMap;
-+
-+ EqProcedure(TShortObjectHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(short key, Object value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two objects for equality.
-+ */
-+ private final boolean eq(Object o1, Object o2) {
-+ return o1 == o2 || ((o1 != null) && o1.equals(o2));
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = null;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public Object[] getValues() {
-+ Object[] vals = new Object[size()];
-+ V[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public short[] keys() {
-+ short[] keys = new short[size()];
-+ short[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(V val) {
-+ byte[] states = _states;
-+ V[] vals = _values;
-+
-+ // special case null values so that we don't have to
-+ // perform null checks before every call to equals()
-+ if (null == val) {
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL &&
-+ val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ } else {
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL &&
-+ (val == vals[i] || val.equals(vals[i]))) {
-+ return true;
-+ }
-+ }
-+ } // end of else
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(short key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TShortProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TShortProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TObjectProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TObjectProcedure<V> procedure) {
-+ byte[] states = _states;
-+ V[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOShortObjectProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TShortObjectProcedure<V> procedure) {
-+ byte[] states = _states;
-+ short[] keys = _set;
-+ V[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TShortObjectProcedure<V> procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ short[] keys = _set;
-+ V[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TObjectFunction</code> value
-+ */
-+ public void transformValues(TObjectFunction<V,V> function) {
-+ byte[] states = _states;
-+ V[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ short key = in.readShort();
-+ V val = (V) in.readObject();
-+ put(key, val);
-+ }
-+ }
-+} // TShortObjectHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortObjectIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,151 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type short and Object.
-+ * <p/>
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ * <p/>
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ * <p/>
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ * <p/>
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ * <p/>
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TShortObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TShortObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TShortObjectIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ * <p/>
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TShortObjectIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2OIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TShortObjectIterator<V> extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TShortObjectHashMap<V> _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TShortObjectIterator(TShortObjectHashMap<V> map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException
-+ * if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public short key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public V value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public V setValue(V val) {
-+ V old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TShortObjectIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortObjectProcedure.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type short and Object.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2OProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TShortObjectProcedure<T> {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>short</code> value
-+ * @param b an <code>Object</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(short a, T b);
-+}// TShortObjectProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,46 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures with one short paramater.
-+ *
-+ * Created: Mon Nov 5 21:45:49 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TShortProcedure {
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param value a value of type <code>short</code>
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(short value);
-+}// TShortProcedure
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortShortHashMap.java 2007-04-18 06:49:38.000000000 +0000
-@@ -0,0 +1,520 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+import java.io.IOException;
-+import java.io.ObjectInput;
-+import java.io.ObjectOutput;
-+import java.io.Externalizable;
-+
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * An open addressed Map implementation for short keys and short values.
-+ *
-+ * Created: Sun Nov 4 08:52:45 2001
-+ *
-+ * @author Eric D. Friedman
-+ */
-+public class TShortShortHashMap extends TShortHash implements Externalizable {
-+ static final long serialVersionUID = 1L;
-+
-+ /** the values of the map */
-+ protected transient short[] _values;
-+
-+ /**
-+ * Creates a new <code>TShortShortHashMap</code> instance with the default
-+ * capacity and load factor.
-+ */
-+ public TShortShortHashMap() {
-+ super();
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortShortHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the default load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ */
-+ public TShortShortHashMap(int initialCapacity) {
-+ super(initialCapacity);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortShortHashMap</code> instance with a prime
-+ * capacity equal to or greater than <tt>initialCapacity</tt> and
-+ * with the specified load factor.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param loadFactor a <code>float</code> value
-+ */
-+ public TShortShortHashMap(int initialCapacity, float loadFactor) {
-+ super(initialCapacity, loadFactor);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortShortHashMap</code> instance with the default
-+ * capacity and load factor.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortShortHashMap(TShortHashingStrategy strategy) {
-+ super(strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortShortHashMap</code> instance whose capacity
-+ * is the next highest prime above <tt>initialCapacity + 1</tt>
-+ * unless that value is already prime.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortShortHashMap(int initialCapacity, TShortHashingStrategy strategy) {
-+ super(initialCapacity, strategy);
-+ }
-+
-+ /**
-+ * Creates a new <code>TShortShortHashMap</code> instance with a prime
-+ * value at or near the specified capacity and load factor.
-+ *
-+ * @param initialCapacity used to find a prime capacity for the table.
-+ * @param loadFactor used to calculate the threshold over which
-+ * rehashing takes place.
-+ * @param strategy used to compute hash codes and to compare keys.
-+ */
-+ public TShortShortHashMap(int initialCapacity, float loadFactor, TShortHashingStrategy strategy) {
-+ super(initialCapacity, loadFactor, strategy);
-+ }
-+
-+ /**
-+ * @return a deep clone of this collection
-+ */
-+ public Object clone() {
-+ TShortShortHashMap m = (TShortShortHashMap)super.clone();
-+ m._values = (short[])this._values.clone();
-+ return m;
-+ }
-+
-+ /**
-+ * @return a TShortShortIterator with access to this map's keys and values
-+ */
-+ public TShortShortIterator iterator() {
-+ return new TShortShortIterator(this);
-+ }
-+
-+ /**
-+ * initializes the hashtable to a prime capacity which is at least
-+ * <tt>initialCapacity + 1</tt>.
-+ *
-+ * @param initialCapacity an <code>int</code> value
-+ * @return the actual capacity chosen
-+ */
-+ protected int setUp(int initialCapacity) {
-+ int capacity;
-+
-+ capacity = super.setUp(initialCapacity);
-+ _values = new short[capacity];
-+ return capacity;
-+ }
-+
-+ /**
-+ * Inserts a key/value pair into the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @param value an <code>short</code> value
-+ * @return the previous value associated with <tt>key</tt>,
-+ * or (short)0 if none was found.
-+ */
-+ public short put(short key, short value) {
-+ byte previousState;
-+ short previous = (short)0;
-+ int index = insertionIndex(key);
-+ boolean isNewMapping = true;
-+ if (index < 0) {
-+ index = -index -1;
-+ previous = _values[index];
-+ isNewMapping = false;
-+ }
-+ previousState = _states[index];
-+ _set[index] = key;
-+ _states[index] = FULL;
-+ _values[index] = value;
-+ if (isNewMapping) {
-+ postInsertHook(previousState == FREE);
-+ }
-+
-+ return previous;
-+ }
-+
-+ /**
-+ * rehashes the map to the new capacity.
-+ *
-+ * @param newCapacity an <code>int</code> value
-+ */
-+ protected void rehash(int newCapacity) {
-+ int oldCapacity = _set.length;
-+ short oldKeys[] = _set;
-+ short oldVals[] = _values;
-+ byte oldStates[] = _states;
-+
-+ _set = new short[newCapacity];
-+ _values = new short[newCapacity];
-+ _states = new byte[newCapacity];
-+
-+ for (int i = oldCapacity; i-- > 0;) {
-+ if(oldStates[i] == FULL) {
-+ short o = oldKeys[i];
-+ int index = insertionIndex(o);
-+ _set[index] = o;
-+ _values[index] = oldVals[i];
-+ _states[index] = FULL;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * retrieves the value for <tt>key</tt>
-+ *
-+ * @param key an <code>short</code> value
-+ * @return the value of <tt>key</tt> or (short)0 if no such mapping exists.
-+ */
-+ public short get(short key) {
-+ int index = index(key);
-+ return index < 0 ? (short)0 : _values[index];
-+ }
-+
-+ /**
-+ * Empties the map.
-+ *
-+ */
-+ public void clear() {
-+ super.clear();
-+ short[] keys = _set;
-+ short[] vals = _values;
-+ byte[] states = _states;
-+
-+ for (int i = keys.length; i-- > 0;) {
-+ keys[i] = (short)0;
-+ vals[i] = (short)0;
-+ states[i] = FREE;
-+ }
-+ }
-+
-+ /**
-+ * Deletes a key/value pair from the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @return an <code>short</code> value, or (short)0 if no mapping for key exists
-+ */
-+ public short remove(short key) {
-+ short prev = (short)0;
-+ int index = index(key);
-+ if (index >= 0) {
-+ prev = _values[index];
-+ removeAt(index); // clear key,state; adjust size
-+ }
-+ return prev;
-+ }
-+
-+ /**
-+ * Compares this map with another map for equality of their stored
-+ * entries.
-+ *
-+ * @param other an <code>Object</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean equals(Object other) {
-+ if (! (other instanceof TShortShortHashMap)) {
-+ return false;
-+ }
-+ TShortShortHashMap that = (TShortShortHashMap)other;
-+ if (that.size() != this.size()) {
-+ return false;
-+ }
-+ return forEachEntry(new EqProcedure(that));
-+ }
-+
-+ public int hashCode() {
-+ HashProcedure p = new HashProcedure();
-+ forEachEntry(p);
-+ return p.getHashCode();
-+ }
-+
-+ private final class HashProcedure implements TShortShortProcedure {
-+ private int h = 0;
-+
-+ public int getHashCode() {
-+ return h;
-+ }
-+
-+ public final boolean execute(short key, short value) {
-+ h += (_hashingStrategy.computeHashCode(key) ^ HashFunctions.hash(value));
-+ return true;
-+ }
-+ }
-+
-+ private static final class EqProcedure implements TShortShortProcedure {
-+ private final TShortShortHashMap _otherMap;
-+
-+ EqProcedure(TShortShortHashMap otherMap) {
-+ _otherMap = otherMap;
-+ }
-+
-+ public final boolean execute(short key, short value) {
-+ int index = _otherMap.index(key);
-+ if (index >= 0 && eq(value, _otherMap.get(key))) {
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Compare two shorts for equality.
-+ */
-+ private final boolean eq(short v1, short v2) {
-+ return v1 == v2;
-+ }
-+
-+ }
-+
-+ /**
-+ * removes the mapping at <tt>index</tt> from the map.
-+ *
-+ * @param index an <code>int</code> value
-+ */
-+ protected void removeAt(int index) {
-+ _values[index] = (short)0;
-+ super.removeAt(index); // clear key, state; adjust size
-+ }
-+
-+ /**
-+ * Returns the values of the map.
-+ *
-+ * @return a <code>Collection</code> value
-+ */
-+ public short[] getValues() {
-+ short[] vals = new short[size()];
-+ short[] v = _values;
-+ byte[] states = _states;
-+
-+ for (int i = v.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ vals[j++] = v[i];
-+ }
-+ }
-+ return vals;
-+ }
-+
-+ /**
-+ * returns the keys of the map.
-+ *
-+ * @return a <code>Set</code> value
-+ */
-+ public short[] keys() {
-+ short[] keys = new short[size()];
-+ short[] k = _set;
-+ byte[] states = _states;
-+
-+ for (int i = k.length, j = 0; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ keys[j++] = k[i];
-+ }
-+ }
-+ return keys;
-+ }
-+
-+ /**
-+ * checks for the presence of <tt>val</tt> in the values of the map.
-+ *
-+ * @param val an <code>short</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsValue(short val) {
-+ byte[] states = _states;
-+ short[] vals = _values;
-+
-+ for (int i = vals.length; i-- > 0;) {
-+ if (states[i] == FULL && val == vals[i]) {
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ /**
-+ * checks for the present of <tt>key</tt> in the keys of the map.
-+ *
-+ * @param key an <code>short</code> value
-+ * @return a <code>boolean</code> value
-+ */
-+ public boolean containsKey(short key) {
-+ return contains(key);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key in the map.
-+ *
-+ * @param procedure a <code>TShortProcedure</code> value
-+ * @return false if the loop over the keys terminated because
-+ * the procedure returned false for some key.
-+ */
-+ public boolean forEachKey(TShortProcedure procedure) {
-+ return forEach(procedure);
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each value in the map.
-+ *
-+ * @param procedure a <code>TShortProcedure</code> value
-+ * @return false if the loop over the values terminated because
-+ * the procedure returned false for some value.
-+ */
-+ public boolean forEachValue(TShortProcedure procedure) {
-+ byte[] states = _states;
-+ short[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Executes <tt>procedure</tt> for each key/value entry in the
-+ * map.
-+ *
-+ * @param procedure a <code>TOShortShortProcedure</code> value
-+ * @return false if the loop over the entries terminated because
-+ * the procedure returned false for some entry.
-+ */
-+ public boolean forEachEntry(TShortShortProcedure procedure) {
-+ byte[] states = _states;
-+ short[] keys = _set;
-+ short[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ /**
-+ * Retains only those entries in the map for which the procedure
-+ * returns a true value.
-+ *
-+ * @param procedure determines which entries to keep
-+ * @return true if the map was modified.
-+ */
-+ public boolean retainEntries(TShortShortProcedure procedure) {
-+ boolean modified = false;
-+ byte[] states = _states;
-+ short[] keys = _set;
-+ short[] values = _values;
-+ for (int i = keys.length; i-- > 0;) {
-+ if (states[i] == FULL && ! procedure.execute(keys[i],values[i])) {
-+ removeAt(i);
-+ modified = true;
-+ }
-+ }
-+ return modified;
-+ }
-+
-+ /**
-+ * Transform the values in this map using <tt>function</tt>.
-+ *
-+ * @param function a <code>TShortFunction</code> value
-+ */
-+ public void transformValues(TShortFunction function) {
-+ byte[] states = _states;
-+ short[] values = _values;
-+ for (int i = values.length; i-- > 0;) {
-+ if (states[i] == FULL) {
-+ values[i] = function.execute(values[i]);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Increments the primitive value mapped to key by 1
-+ *
-+ * @param key the key of the value to increment
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean increment(short key) {
-+ return adjustValue(key, (short)1);
-+ }
-+
-+ /**
-+ * Adjusts the primitive value mapped to key.
-+ *
-+ * @param key the key of the value to increment
-+ * @param amount the amount to adjust the value by.
-+ * @return true if a mapping was found and modified.
-+ */
-+ public boolean adjustValue(short key, short amount) {
-+ int index = index(key);
-+ if (index < 0) {
-+ return false;
-+ } else {
-+ _values[index] += amount;
-+ return true;
-+ }
-+ }
-+
-+
-+ public void writeExternal( ObjectOutput out ) throws IOException {
-+ // VERSION
-+ out.writeByte( 0 );
-+
-+ // NUMBER OF ENTRIES
-+ out.writeInt( _size );
-+
-+ // ENTRIES
-+ SerializationProcedure writeProcedure = new SerializationProcedure( out );
-+ if (! forEachEntry(writeProcedure)) {
-+ throw writeProcedure.exception;
-+ }
-+ }
-+
-+ public void readExternal( ObjectInput in )
-+ throws IOException, ClassNotFoundException {
-+
-+ // VERSION
-+ in.readByte();
-+
-+ // NUMBER OF ENTRIES
-+ int size = in.readInt();
-+ setUp( size );
-+
-+ // ENTRIES
-+ while (size-- > 0) {
-+ short key = in.readShort();
-+ short val = in.readShort();
-+ put(key, val);
-+ }
-+ }
-+} // TShortShortHashMap
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortShortIterator.java 2007-04-18 06:49:36.000000000 +0000
-@@ -0,0 +1,150 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Iterator for maps of type short and short.
-+ *
-+ * <p>The iterator semantics for Trove's primitive maps is slightly different
-+ * from those defined in <tt>java.util.Iterator</tt>, but still well within
-+ * the scope of the pattern, as defined by Gamma, et al.</p>
-+ *
-+ * <p>This iterator does <b>not</b> implicitly advance to the next entry when
-+ * the value at the current position is retrieved. Rather, you must explicitly
-+ * ask the iterator to <tt>advance()</tt> and then retrieve either the <tt>key()</tt>,
-+ * the <tt>value()</tt> or both. This is done so that you have the option, but not
-+ * the obligation, to retrieve keys and/or values as your application requires, and
-+ * without introducing wrapper objects that would carry both. As the iteration is
-+ * stateful, access to the key/value parts of the current map entry happens in
-+ * constant time.</p>
-+ *
-+ * <p>In practice, the iterator is akin to a "search finger" that you move from
-+ * position to position. Read or write operations affect the current entry only and
-+ * do not assume responsibility for moving the finger.</p>
-+ *
-+ * <p>Here are some sample scenarios for this class of iterator:</p>
-+ *
-+ * <pre>
-+ * // accessing keys/values through an iterator:
-+ * for (TShortShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * doSomethingWithValue(it.value());
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // modifying values in-place through iteration:
-+ * for (TShortShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.setValue(newValueForKey(it.key()));
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // deleting entries during iteration:
-+ * for (TShortShortIterator it = map.iterator();
-+ * it.hasNext();) {
-+ * it.advance();
-+ * if (satisfiesCondition(it.key()) {
-+ * it.remove();
-+ * }
-+ * }
-+ * </pre>
-+ *
-+ * <pre>
-+ * // faster iteration by avoiding hasNext():
-+ * TShortShortIterator iterator = map.iterator();
-+ * for (int i = map.size(); i-- > 0;) {
-+ * iterator.advance();
-+ * doSomethingWithKeyAndValue(iterator.key(), iterator.value());
-+ * }
-+ * </pre>
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PIterator.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public class TShortShortIterator extends TPrimitiveIterator {
-+ /** the collection being iterated over */
-+ private final TShortShortHashMap _map;
-+
-+ /**
-+ * Creates an iterator over the specified map
-+ */
-+ public TShortShortIterator(TShortShortHashMap map) {
-+ super(map);
-+ this._map = map;
-+ }
-+
-+ /**
-+ * Moves the iterator forward to the next entry in the underlying map.
-+ *
-+ * @throws java.util.NoSuchElementException if the iterator is already exhausted
-+ */
-+ public void advance() {
-+ moveToNextIndex();
-+ }
-+
-+ /**
-+ * Provides access to the key of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the key of the entry at the iterator's current position.
-+ */
-+ public short key() {
-+ return _map._set[_index];
-+ }
-+
-+ /**
-+ * Provides access to the value of the mapping at the iterator's position.
-+ * Note that you must <tt>advance()</tt> the iterator at least once
-+ * before invoking this method.
-+ *
-+ * @return the value of the entry at the iterator's current position.
-+ */
-+ public short value() {
-+ return _map._values[_index];
-+ }
-+
-+ /**
-+ * Replace the value of the mapping at the iterator's position with the
-+ * specified value. Note that you must <tt>advance()</tt> the iterator at
-+ * least once before invoking this method.
-+ *
-+ * @param val the value to set in the current entry
-+ * @return the old value of the entry.
-+ */
-+ public short setValue(short val) {
-+ short old = value();
-+ _map._values[_index] = val;
-+ return old;
-+ }
-+}// TShortShortIterator
---- /dev/null 2006-09-11 12:55:45.000000000 +0000
-+++ output/gen_src/gnu/trove/TShortShortProcedure.java 2007-04-18 06:49:37.000000000 +0000
-@@ -0,0 +1,48 @@
-+///////////////////////////////////////////////////////////////////////////////
-+// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
-+//
-+// This library is free software; you can redistribute it and/or
-+// modify it under the terms of the GNU Lesser General Public
-+// License as published by the Free Software Foundation; either
-+// version 2.1 of the License, or (at your option) any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU Lesser General Public
-+// License along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+///////////////////////////////////////////////////////////////////////////////
-+
-+package gnu.trove;
-+
-+//////////////////////////////////////////////////
-+// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
-+//////////////////////////////////////////////////
-+
-+
-+/**
-+ * Interface for procedures that take two parameters of type short and short.
-+ *
-+ * Created: Mon Nov 5 22:03:30 2001
-+ *
-+ * @author Eric D. Friedman
-+ * @version $Id: P2PProcedure.template,v 1.1 2006/11/10 23:28:00 robeden Exp $
-+ */
-+
-+public interface TShortShortProcedure {
-+
-+ /**
-+ * Executes this procedure. A false return value indicates that
-+ * the application executing this procedure should not invoke this
-+ * procedure again.
-+ *
-+ * @param a a <code>short</code> value
-+ * @param b a <code>short</code> value
-+ * @return true if additional invocations of the procedure are
-+ * allowed.
-+ */
-+ public boolean execute(short a, short b);
-+}// TShortShortProcedure
diff --git a/debian/rules b/debian/rules
index 557e6ed..3de928f 100755
--- a/debian/rules
+++ b/debian/rules
@@ -1,35 +1,31 @@
#!/usr/bin/make -f
# debian/rules file for trove (uses cdbs)
-export VERSION = $(shell head -1 debian/changelog | cut -f2 -d\( | cut -f1 -d\) | cut -f1 -d\-)
-
include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/ant.mk
include /usr/share/cdbs/1/rules/simple-patchsys.mk
+VERSION := `expr match $(DEB_UPSTREAM_VERSION) '\(.*\)\.dfsg.*'`
+
JAVA_HOME_DIRS := /usr/lib/jvm/java-gcj/
ANT_HOME := /usr/share/ant
DEB_JARS :=
DEB_ANT_BUILD_TARGET := jar javadoc
-# override version number
-VERSION=2.0a2
-
-post-patches::
- -mkdir output
- -mv gen_src output
-
cleanbuilddir::
- -rm -rf output
+ $(RM) -r output
binary-post-install/libtrove-java::
- mv ./output/lib/trove.jar ./output/lib/trove-$(VERSION).jar
- dh_install -plibtrove-java ./output/lib/trove-$(VERSION).jar \
- usr/share/java/
- dh_link -plibtrove-java usr/share/java/trove-$(VERSION).jar \
- usr/share/java/trove.jar
+ dh_install -plibtrove-java output/lib/trove-$(VERSION).jar \
+ /usr/share/java/
+ dh_link -plibtrove-java /usr/share/java/trove-$(VERSION).jar \
+ /usr/share/java/trove.jar
binary-post-install/libtrove-java-doc::
dh_install -plibtrove-java-doc output/javadocs/* \
- usr/share/doc/libtrove-java-doc/api
+ /usr/share/doc/libtrove-java-doc/api
+
+get-orig-source:
+ uscan --upstream-version 0 --rename
+
diff --git a/debian/watch b/debian/watch
index 7396bb5..59951ee 100644
--- a/debian/watch
+++ b/debian/watch
@@ -1,7 +1,7 @@
# watch control file for uscan
version=2
-# Options
-# Site Version Script
opts=dversionmangle=s/\.dfsg\.\d+$// \
- http://heanet.dl.sourceforge.net/sourceforge/trove4j/trove-(.*)\.tar\.gz debian uupdate
+ http://heanet.dl.sourceforge.net/sourceforge/trove4j/trove-(\d\.\d\.\d)\.tar\.gz \
+ debian debian/orig-tar.sh
+
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/trove.git
More information about the pkg-java-commits
mailing list