[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