You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by tn...@apache.org on 2013/06/10 23:46:20 UTC

svn commit: r1491615 [1/2] - in /commons/proper/collections/trunk/src: main/java/org/apache/commons/collections4/trie/ main/java/org/apache/commons/collections4/trie/analyzer/ test/java/org/apache/commons/collections4/trie/ test/java/org/apache/commons...

Author: tn
Date: Mon Jun 10 21:46:19 2013
New Revision: 1491615

URL: http://svn.apache.org/r1491615
Log:
Cleanup of trie package.

Added:
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/ByteArrayKeyAnalyzer.java
      - copied, changed from r1491240, commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/ByteArrayKeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/ByteKeyAnalyzer.java
      - copied, changed from r1491240, commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/ByteKeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/CharArrayKeyAnalyzer.java
      - copied, changed from r1491240, commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/CharArrayKeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/CharacterKeyAnalyzer.java
      - copied, changed from r1491240, commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/CharacterKeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/IntegerKeyAnalyzer.java
      - copied, changed from r1491240, commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/IntegerKeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/LongKeyAnalyzer.java
      - copied, changed from r1491240, commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/LongKeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/ShortKeyAnalyzer.java
      - copied, changed from r1491240, commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/ShortKeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/StringKeyAnalyzer.java
      - copied, changed from r1491240, commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/StringKeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/package-info.java   (with props)
    commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/trie/analyzer/
    commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/trie/analyzer/ByteArrayKeyAnalyzerTest.java
      - copied, changed from r1491240, commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/trie/ByteArrayKeyAnalyzerTest.java
Removed:
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/AbstractKeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/ByteArrayKeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/ByteKeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/CharArrayKeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/CharacterKeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/IntegerKeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/LongKeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/ShortKeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/StringKeyAnalyzer.java
    commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/trie/ByteArrayKeyAnalyzerTest.java
Modified:
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/AbstractTrie.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/KeyAnalyzer.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/PatriciaTrie.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/PatriciaTrieBase.java
    commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/trie/PatriciaTrieTest.java

Modified: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/AbstractTrie.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/AbstractTrie.java?rev=1491615&r1=1491614&r2=1491615&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/AbstractTrie.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/AbstractTrie.java Mon Jun 10 21:46:19 2013
@@ -60,9 +60,6 @@ abstract class AbstractTrie<K, V> extend
         return keyAnalyzer;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public K selectKey(final K key) {
         final Map.Entry<K, V> entry = select(key);
         if (entry == null) {
@@ -71,9 +68,6 @@ abstract class AbstractTrie<K, V> extend
         return entry.getKey();
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public V selectValue(final K key) {
         final Map.Entry<K, V> entry = select(key);
         if (entry == null) {
@@ -94,12 +88,11 @@ abstract class AbstractTrie<K, V> extend
     }
 
     /**
-     * A utility method to cast keys. It actually doesn't
-     * cast anything. It's just fooling the compiler!
+     * A utility method to cast keys. It actually doesn't cast anything. It's just fooling the compiler!
      */
     @SuppressWarnings("unchecked")
     final K castKey(final Object key) {
-        return (K)key;
+        return (K) key;
     }
 
     /**
@@ -125,8 +118,7 @@ abstract class AbstractTrie<K, V> extend
     }
 
     /**
-     * Returns whether or not the given bit on the
-     * key is set or false if the key is null.
+     * Returns whether or not the given bit on the key is set or false if the key is null.
      *
      * @see KeyAnalyzer#isBitSet(Object, int, int)
      */
@@ -138,11 +130,10 @@ abstract class AbstractTrie<K, V> extend
     }
 
     /**
-     * Utility method for calling {@link KeyAnalyzer#bitIndex(Object, int, int, Object, int, int)}
+     * Utility method for calling {@link KeyAnalyzer#bitIndex(Object, int, int, Object, int, int)}.
      */
     final int bitIndex(final K key, final K foundKey) {
-        return keyAnalyzer.bitIndex(key, 0, lengthInBits(key),
-                foundKey, 0, lengthInBits(foundKey));
+        return keyAnalyzer.bitIndex(key, 0, lengthInBits(key), foundKey, 0, lengthInBits(foundKey));
     }
 
     /**
@@ -159,14 +150,14 @@ abstract class AbstractTrie<K, V> extend
     }
 
     /**
-     * Returns true if both values are either null or equal
+     * Returns true if both values are either null or equal.
      */
     static boolean compare(final Object a, final Object b) {
         return a == null ? b == null : a.equals(b);
     }
 
     /**
-     * A basic implementation of {@link Entry}
+     * A basic implementation of {@link Entry}.
      */
     abstract static class BasicEntry<K, V> implements Map.Entry<K, V>, Serializable {
 
@@ -186,37 +177,25 @@ abstract class AbstractTrie<K, V> extend
         public BasicEntry(final K key, final V value) {
             this.key = key;
             this.value = value;
-
-            this.hashCode = (key != null ? key.hashCode() : 0)
-                    ^ (value != null ? value.hashCode() : 0);
+            this.hashCode = (key != null ? key.hashCode() : 0) ^ (value != null ? value.hashCode() : 0);
         }
 
         /**
-         * Replaces the current key and value with the provided
-         * key &amp; value
+         * Replaces the current key and value with the provided key &amp; value.
          */
         public V setKeyValue(final K key, final V value) {
             this.key = key;
             return setValue(value);
         }
 
-        /**
-         * {@inheritDoc}
-         */
         public K getKey() {
             return key;
         }
 
-        /**
-         * {@inheritDoc}
-         */
         public V getValue() {
             return value;
         }
 
-        /**
-         * {@inheritDoc}
-         */
         public V setValue(final V value) {
             final V previous = this.value;
             this.value = value;

Modified: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/KeyAnalyzer.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/KeyAnalyzer.java?rev=1491615&r1=1491614&r2=1491615&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/KeyAnalyzer.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/KeyAnalyzer.java Mon Jun 10 21:46:19 2013
@@ -32,7 +32,10 @@ import java.util.Comparator;
  * @since 4.0
  * @version $Id$
  */
-public interface KeyAnalyzer<K> extends Comparator<K>, Serializable {
+public abstract class KeyAnalyzer<K> implements Comparator<K>, Serializable {
+
+    /** Serialization version */
+    private static final long serialVersionUID = -20497563720380683L;
 
     /**
      * Returned by {@link #bitIndex(Object, int, int, Object, int, int)}
@@ -50,12 +53,42 @@ public interface KeyAnalyzer<K> extends 
     public static final int OUT_OF_BOUNDS_BIT_KEY = -3;
 
     /**
+     * Returns true if bitIndex is a {@link KeyAnalyzer#OUT_OF_BOUNDS_BIT_KEY}
+     */
+    static boolean isOutOfBoundsIndex(final int bitIndex) {
+        return bitIndex == OUT_OF_BOUNDS_BIT_KEY;
+    }
+
+    /**
+     * Returns true if bitIndex is a {@link KeyAnalyzer#EQUAL_BIT_KEY}
+     */
+    static boolean isEqualBitKey(final int bitIndex) {
+        return bitIndex == EQUAL_BIT_KEY;
+    }
+
+    /**
+     * Returns true if bitIndex is a {@link KeyAnalyzer#NULL_BIT_KEY}
+     */
+    static boolean isNullBitKey(final int bitIndex) {
+        return bitIndex == NULL_BIT_KEY;
+    }
+
+    /**
+     * Returns true if the given bitIndex is valid. Indices
+     * are considered valid if they're between 0 and
+     * {@link Integer#MAX_VALUE}
+     */
+    static boolean isValidBitIndex(final int bitIndex) {
+        return bitIndex >= 0;
+    }
+
+    /**
      * Returns the number of bits per element in the key.
      * This is only useful for variable-length keys, such as Strings.
      *
      * @return the number of bits per element
      */
-    public int bitsPerElement();
+    public abstract int bitsPerElement();
 
     /**
      * Returns the length of the Key in bits.
@@ -63,23 +96,55 @@ public interface KeyAnalyzer<K> extends 
      * @param key  the key
      * @return the bit length of the key
      */
-    public int lengthInBits(K key);
+    public abstract int lengthInBits(K key);
 
     /**
      * Returns whether or not a bit is set.
-     */
-    public boolean isBitSet(K key, int bitIndex, int lengthInBits);
+     *
+     * @param key  the key to check, may not be null
+     * @param bitIndex  the bit index to check
+     * @param lengthInBits  the maximum key length in bits to check
+     * @return {@code true} if the bit is set in the given key and
+     *   {@code bitIndex} &lt; {@code lengthInBits}, {@code false} otherwise.
+     */
+    public abstract boolean isBitSet(K key, int bitIndex, int lengthInBits);
 
     /**
-     * Returns the n-th different bit between key and found. This starts the comparison in
-     * key at 'keyStart' and goes for 'keyLength' bits, and compares to the found key starting
-     * at 'foundStart' and going for 'foundLength' bits.
+     * Returns the n-th different bit between key and other. This starts the comparison in
+     * key at 'offsetInBits' and goes for 'lengthInBits' bits, and compares to the other key starting
+     * at 'otherOffsetInBits' and going for 'otherLengthInBits' bits.
+     *
+     * @param key  the key to use
+     * @param offsetInBits  the bit offset in the key
+     * @param lengthInBits  the maximum key length in bits to use
+     * @param other  the other key to use
+     * @param otherOffsetInBits  the bit offset in the other key
+     * @param otherLengthInBits  the maximum key length in bits for the other key
+     * @return the bit index where the key and other first differ
      */
-    public int bitIndex(K key, int offsetInBits, int lengthInBits,
-                        K other, int otherOffsetInBits, int otherLengthInBits);
+    public abstract int bitIndex(K key, int offsetInBits, int lengthInBits,
+                                 K other, int otherOffsetInBits, int otherLengthInBits);
 
     /**
      * Determines whether or not the given prefix (from offset to length) is a prefix of the given key.
-     */
-    public boolean isPrefix(K prefix, int offsetInBits, int lengthInBits, K key);
+     *
+     * @param prefix  the prefix to check
+     * @param offsetInBits  the bit offset in the key
+     * @param lengthInBits  the maximum key length in bits to use
+     * @param key  the key to check
+     * @return {@code true} if this is a valid prefix for the given key
+     */
+    public abstract boolean isPrefix(K prefix, int offsetInBits, int lengthInBits, K key);
+
+    @SuppressWarnings("unchecked")
+    public int compare(final K o1, final K o2) {
+        if (o1 == null) {
+            return o2 == null ? 0 : -1;
+        } else if (o2 == null) {
+            return 1;
+        }
+
+        return ((Comparable<K>) o1).compareTo(o2);
+    }
+
 }

Modified: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/PatriciaTrie.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/PatriciaTrie.java?rev=1491615&r1=1491614&r2=1491615&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/PatriciaTrie.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/PatriciaTrie.java Mon Jun 10 21:46:19 2013
@@ -77,57 +77,35 @@ public class PatriciaTrie<K, V> extends 
         super(keyAnalyzer);
     }
 
-    public PatriciaTrie(final KeyAnalyzer<? super K> keyAnalyzer,
-            final Map<? extends K, ? extends V> m) {
+    public PatriciaTrie(final KeyAnalyzer<? super K> keyAnalyzer, final Map<? extends K, ? extends V> m) {
         super(keyAnalyzer, m);
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public Comparator<? super K> comparator() {
         return keyAnalyzer;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public SortedMap<K, V> getPrefixedBy(final K key) {
         return getPrefixedByBits(key, 0, lengthInBits(key));
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public SortedMap<K, V> getPrefixedBy(final K key, final int length) {
         return getPrefixedByBits(key, 0, length * bitsPerElement());
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public SortedMap<K, V> getPrefixedBy(final K key, final int offset, final int length) {
         final int bitsPerElement = bitsPerElement();
         return getPrefixedByBits(key, offset*bitsPerElement, length*bitsPerElement);
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public SortedMap<K, V> getPrefixedByBits(final K key, final int lengthInBits) {
         return getPrefixedByBits(key, 0, lengthInBits);
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public K firstKey() {
         return firstEntry().getKey();
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public K lastKey() {
         final TrieEntry<K, V> entry = lastEntry();
         if (entry != null) {
@@ -165,23 +143,14 @@ public class PatriciaTrie<K, V> extends 
         return new PrefixRangeMap(key, offsetInBits, lengthInBits);
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public SortedMap<K, V> headMap(final K toKey) {
         return new RangeEntryMap(null, toKey);
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public SortedMap<K, V> subMap(final K fromKey, final K toKey) {
         return new RangeEntryMap(fromKey, toKey);
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public SortedMap<K, V> tailMap(final K fromKey) {
         return new RangeEntryMap(fromKey, null);
     }
@@ -216,7 +185,7 @@ public class PatriciaTrie<K, V> extends 
         }
 
         final int bitIndex = bitIndex(key, found.key);
-        if (AbstractKeyAnalyzer.isValidBitIndex(bitIndex)) {
+        if (KeyAnalyzer.isValidBitIndex(bitIndex)) {
             final TrieEntry<K, V> added = new TrieEntry<K, V>(key, null, bitIndex);
             addEntry(added, lengthInBits);
             incrementSize(); // must increment because remove will decrement
@@ -224,7 +193,7 @@ public class PatriciaTrie<K, V> extends 
             removeEntry(added);
             modCount -= 2; // we didn't really modify it.
             return ceil;
-        } else if (AbstractKeyAnalyzer.isNullBitKey(bitIndex)) {
+        } else if (KeyAnalyzer.isNullBitKey(bitIndex)) {
             if (!root.isEmpty()) {
                 return firstEntry();
             } else if (size() > 1) {
@@ -232,7 +201,7 @@ public class PatriciaTrie<K, V> extends 
             } else {
                 return null;
             }
-        } else if (AbstractKeyAnalyzer.isEqualBitKey(bitIndex)) {
+        } else if (KeyAnalyzer.isEqualBitKey(bitIndex)) {
             return nextEntry(found);
         }
 
@@ -279,7 +248,7 @@ public class PatriciaTrie<K, V> extends 
         }
 
         final int bitIndex = bitIndex(key, found.key);
-        if (AbstractKeyAnalyzer.isValidBitIndex(bitIndex)) {
+        if (KeyAnalyzer.isValidBitIndex(bitIndex)) {
             final TrieEntry<K, V> added = new TrieEntry<K, V>(key, null, bitIndex);
             addEntry(added, lengthInBits);
             incrementSize(); // must increment because remove will decrement
@@ -287,13 +256,13 @@ public class PatriciaTrie<K, V> extends 
             removeEntry(added);
             modCount -= 2; // we didn't really modify it.
             return ceil;
-        } else if (AbstractKeyAnalyzer.isNullBitKey(bitIndex)) {
+        } else if (KeyAnalyzer.isNullBitKey(bitIndex)) {
             if (!root.isEmpty()) {
                 return root;
             } else {
                 return firstEntry();
             }
-        } else if (AbstractKeyAnalyzer.isEqualBitKey(bitIndex)) {
+        } else if (KeyAnalyzer.isEqualBitKey(bitIndex)) {
             return found;
         }
 
@@ -335,7 +304,7 @@ public class PatriciaTrie<K, V> extends 
         }
 
         final int bitIndex = bitIndex(key, found.key);
-        if (AbstractKeyAnalyzer.isValidBitIndex(bitIndex)) {
+        if (KeyAnalyzer.isValidBitIndex(bitIndex)) {
             final TrieEntry<K, V> added = new TrieEntry<K, V>(key, null, bitIndex);
             addEntry(added, lengthInBits);
             incrementSize(); // must increment because remove will decrement
@@ -343,9 +312,9 @@ public class PatriciaTrie<K, V> extends 
             removeEntry(added);
             modCount -= 2; // we didn't really modify it.
             return prior;
-        } else if (AbstractKeyAnalyzer.isNullBitKey(bitIndex)) {
+        } else if (KeyAnalyzer.isNullBitKey(bitIndex)) {
             return null;
-        } else if (AbstractKeyAnalyzer.isEqualBitKey(bitIndex)) {
+        } else if (KeyAnalyzer.isEqualBitKey(bitIndex)) {
             return previousEntry(found);
         }
 
@@ -377,7 +346,7 @@ public class PatriciaTrie<K, V> extends 
         }
 
         final int bitIndex = bitIndex(key, found.key);
-        if (AbstractKeyAnalyzer.isValidBitIndex(bitIndex)) {
+        if (KeyAnalyzer.isValidBitIndex(bitIndex)) {
             final TrieEntry<K, V> added = new TrieEntry<K, V>(key, null, bitIndex);
             addEntry(added, lengthInBits);
             incrementSize(); // must increment because remove will decrement
@@ -385,13 +354,13 @@ public class PatriciaTrie<K, V> extends 
             removeEntry(added);
             modCount -= 2; // we didn't really modify it.
             return floor;
-        } else if (AbstractKeyAnalyzer.isNullBitKey(bitIndex)) {
+        } else if (KeyAnalyzer.isNullBitKey(bitIndex)) {
             if (!root.isEmpty()) {
                 return root;
             } else {
                 return null;
             }
-        } else if (AbstractKeyAnalyzer.isEqualBitKey(bitIndex)) {
+        } else if (KeyAnalyzer.isEqualBitKey(bitIndex)) {
             return found;
         }
 
@@ -409,14 +378,12 @@ public class PatriciaTrie<K, V> extends 
         TrieEntry<K, V> current = root.left;
         TrieEntry<K, V> path = root;
         while(true) {
-            if (current.bitIndex <= path.bitIndex
-                    || lengthInBits < current.bitIndex) {
+            if (current.bitIndex <= path.bitIndex || lengthInBits < current.bitIndex) {
                 break;
             }
 
             path = current;
-            if (!isBitSet(prefix, offsetInBits + current.bitIndex,
-                    offsetInBits + lengthInBits)) {
+            if (!isBitSet(prefix, offsetInBits + current.bitIndex, offsetInBits + lengthInBits)) {
                 current = current.left;
             } else {
                 current = current.right;
@@ -503,7 +470,7 @@ public class PatriciaTrie<K, V> extends 
      *          - If node.parent.left is not uplink from node.parent:
      *              - Follow right path for first right child from node.parent.left
      *
-     * @param start
+     * @param start  the start entry
      */
     TrieEntry<K, V> previousEntry(final TrieEntry<K, V> start) {
         if (start.predecessor == null) {
@@ -560,52 +527,43 @@ public class PatriciaTrie<K, V> extends 
     }
 
     /**
-     * A range view of the {@link Trie}
+     * A range view of the {@link Trie}.
      */
     private abstract class RangeMap extends AbstractMap<K, V>
             implements SortedMap<K, V> {
 
-        /**
-         * The {@link #entrySet()} view
-         */
+        /** The {@link #entrySet()} view. */
         private transient volatile Set<Map.Entry<K, V>> entrySet;
 
         /**
-         * Creates and returns an {@link #entrySet()}
-         * view of the {@link RangeMap}
+         * Creates and returns an {@link #entrySet()} view of the {@link RangeMap}.
          */
         protected abstract Set<Map.Entry<K, V>> createEntrySet();
 
         /**
-         * Returns the FROM Key
+         * Returns the FROM Key.
          */
         protected abstract K getFromKey();
 
         /**
-         * Whether or not the {@link #getFromKey()} is in the range
+         * Whether or not the {@link #getFromKey()} is in the range.
          */
         protected abstract boolean isFromInclusive();
 
         /**
-         * Returns the TO Key
+         * Returns the TO Key.
          */
         protected abstract K getToKey();
 
         /**
-         * Whether or not the {@link #getToKey()} is in the range
+         * Whether or not the {@link #getToKey()} is in the range.
          */
         protected abstract boolean isToInclusive();
 
-        /**
-         * {@inheritDoc}
-         */
         public Comparator<? super K> comparator() {
             return PatriciaTrie.this.comparator();
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public boolean containsKey(final Object key) {
             if (!inRange(castKey(key))) {
@@ -615,9 +573,6 @@ public class PatriciaTrie<K, V> extends 
             return PatriciaTrie.this.containsKey(key);
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public V remove(final Object key) {
             if (!inRange(castKey(key))) {
@@ -627,9 +582,6 @@ public class PatriciaTrie<K, V> extends 
             return PatriciaTrie.this.remove(key);
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public V get(final Object key) {
             if (!inRange(castKey(key))) {
@@ -639,22 +591,14 @@ public class PatriciaTrie<K, V> extends 
             return PatriciaTrie.this.get(key);
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public V put(final K key, final V value) {
             if (!inRange(key)) {
-                throw new IllegalArgumentException(
-                        "Key is out of range: " + key);
+                throw new IllegalArgumentException("Key is out of range: " + key);
             }
-
             return PatriciaTrie.this.put(key, value);
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public Set<Map.Entry<K, V>> entrySet() {
             if (entrySet == null) {
@@ -663,81 +607,56 @@ public class PatriciaTrie<K, V> extends 
             return entrySet;
         }
 
-        /**
-         * {@inheritDoc}
-         */
         public SortedMap<K, V> subMap(final K fromKey, final K toKey) {
             if (!inRange2(fromKey)) {
-                throw new IllegalArgumentException(
-                        "FromKey is out of range: " + fromKey);
+                throw new IllegalArgumentException("FromKey is out of range: " + fromKey);
             }
 
             if (!inRange2(toKey)) {
-                throw new IllegalArgumentException(
-                        "ToKey is out of range: " + toKey);
+                throw new IllegalArgumentException("ToKey is out of range: " + toKey);
             }
 
-            return createRangeMap(fromKey, isFromInclusive(),
-                    toKey, isToInclusive());
+            return createRangeMap(fromKey, isFromInclusive(), toKey, isToInclusive());
         }
 
-        /**
-         * {@inheritDoc}
-         */
         public SortedMap<K, V> headMap(final K toKey) {
             if (!inRange2(toKey)) {
-                throw new IllegalArgumentException(
-                        "ToKey is out of range: " + toKey);
+                throw new IllegalArgumentException("ToKey is out of range: " + toKey);
             }
-
-            return createRangeMap(getFromKey(), isFromInclusive(),
-                    toKey, isToInclusive());
+            return createRangeMap(getFromKey(), isFromInclusive(), toKey, isToInclusive());
         }
 
-        /**
-         * {@inheritDoc}
-         */
         public SortedMap<K, V> tailMap(final K fromKey) {
             if (!inRange2(fromKey)) {
-                throw new IllegalArgumentException(
-                        "FromKey is out of range: " + fromKey);
+                throw new IllegalArgumentException("FromKey is out of range: " + fromKey);
             }
-
-            return createRangeMap(fromKey, isFromInclusive(),
-                    getToKey(), isToInclusive());
+            return createRangeMap(fromKey, isFromInclusive(), getToKey(), isToInclusive());
         }
 
         /**
-         * Returns true if the provided key is greater than TO and
-         * less than FROM
+         * Returns true if the provided key is greater than TO and less than FROM.
          */
         protected boolean inRange(final K key) {
-
             final K fromKey = getFromKey();
             final K toKey = getToKey();
 
-            return (fromKey == null || inFromRange(key, false))
-                    && (toKey == null || inToRange(key, false));
+            return (fromKey == null || inFromRange(key, false)) && (toKey == null || inToRange(key, false));
         }
 
         /**
-         * This form allows the high endpoint (as well as all legit keys)
+         * This form allows the high endpoint (as well as all legit keys).
          */
         protected boolean inRange2(final K key) {
-
             final K fromKey = getFromKey();
             final K toKey = getToKey();
 
-            return (fromKey == null || inFromRange(key, false))
-                    && (toKey == null || inToRange(key, true));
+            return (fromKey == null || inFromRange(key, false)) && (toKey == null || inToRange(key, true));
         }
 
         /**
-         * Returns true if the provided key is in the FROM range
-         * of the {@link RangeMap}
+         * Returns true if the provided key is in the FROM range of the {@link RangeMap}.
          */
         protected boolean inFromRange(final K key, final boolean forceInclusive) {
-
             final K fromKey = getFromKey();
             final boolean fromInclusive = isFromInclusive();
 
@@ -750,11 +669,9 @@ public class PatriciaTrie<K, V> extends 
         }
 
         /**
-         * Returns true if the provided key is in the TO range
-         * of the {@link RangeMap}
+         * Returns true if the provided key is in the TO range of the {@link RangeMap}.
          */
         protected boolean inToRange(final K key, final boolean forceInclusive) {
-
             final K toKey = getToKey();
             final boolean toInclusive = isToInclusive();
 
@@ -767,50 +684,42 @@ public class PatriciaTrie<K, V> extends 
         }
 
         /**
-         * Creates and returns a sub-range view of the current {@link RangeMap}
+         * Creates and returns a sub-range view of the current {@link RangeMap}.
          */
-        protected abstract SortedMap<K, V> createRangeMap(K fromKey,
-                boolean fromInclusive, K toKey, boolean toInclusive);
+        protected abstract SortedMap<K, V> createRangeMap(K fromKey, boolean fromInclusive,
+                                                          K toKey, boolean toInclusive);
     }
 
    /**
-    * A {@link RangeMap} that deals with {@link Entry}s
+    * A {@link RangeMap} that deals with {@link Entry}s.
     */
    private class RangeEntryMap extends RangeMap {
 
-       /**
-        * The key to start from, null if the beginning.
-        */
+       /** The key to start from, null if the beginning. */
        private final K fromKey;
 
-       /**
-        * The key to end at, null if till the end.
-        */
+       /** The key to end at, null if till the end. */
        private final K toKey;
 
-       /**
-        * Whether or not the 'from' is inclusive.
-        */
+       /** Whether or not the 'from' is inclusive. */
        private final boolean fromInclusive;
 
-       /**
-        * Whether or not the 'to' is inclusive.
-        */
+       /** Whether or not the 'to' is inclusive. */
        private final boolean toInclusive;
 
        /**
         * Creates a {@link RangeEntryMap} with the fromKey included and
-        * the toKey excluded from the range
+        * the toKey excluded from the range.
         */
        protected RangeEntryMap(final K fromKey, final K toKey) {
            this(fromKey, true, toKey, false);
        }
 
        /**
-        * Creates a {@link RangeEntryMap}
+        * Creates a {@link RangeEntryMap}.
         */
        protected RangeEntryMap(final K fromKey, final boolean fromInclusive,
-               final K toKey, final boolean toInclusive) {
+                               final K toKey, final boolean toInclusive) {
 
            if (fromKey == null && toKey == null) {
                throw new IllegalArgumentException("must have a from or to!");
@@ -827,9 +736,6 @@ public class PatriciaTrie<K, V> extends 
            this.toInclusive = toInclusive;
        }
 
-       /**
-        * {@inheritDoc}
-        */
        public K firstKey() {
            Map.Entry<K,V> e = null;
            if (fromKey == null) {
@@ -849,9 +755,6 @@ public class PatriciaTrie<K, V> extends 
            return first;
        }
 
-       /**
-        * {@inheritDoc}
-        */
        public K lastKey() {
            Map.Entry<K,V> e;
            if (toKey == null) {
@@ -871,49 +774,31 @@ public class PatriciaTrie<K, V> extends 
            return last;
        }
 
-       /**
-        * {@inheritDoc}
-        */
        @Override
        protected Set<Entry<K, V>> createEntrySet() {
            return new RangeEntrySet(this);
        }
 
-       /**
-        * {@inheritDoc}
-        */
        @Override
        public K getFromKey() {
            return fromKey;
        }
 
-       /**
-        * {@inheritDoc}
-        */
        @Override
        public K getToKey() {
            return toKey;
        }
 
-       /**
-        * {@inheritDoc}
-        */
        @Override
        public boolean isFromInclusive() {
            return fromInclusive;
        }
 
-       /**
-        * {@inheritDoc}
-        */
        @Override
        public boolean isToInclusive() {
            return toInclusive;
        }
 
-       /**
-        * {@inheritDoc}
-        */
        @Override
        protected SortedMap<K, V> createRangeMap(final K fromKey, final boolean fromInclusive,
                final K toKey, final boolean toInclusive) {
@@ -922,7 +807,7 @@ public class PatriciaTrie<K, V> extends 
    }
 
     /**
-     * A {@link Set} view of a {@link RangeMap}
+     * A {@link Set} view of a {@link RangeMap}.
      */
     private class RangeEntrySet extends AbstractSet<Map.Entry<K, V>> {
 
@@ -933,7 +818,7 @@ public class PatriciaTrie<K, V> extends 
         private transient int expectedModCount;
 
         /**
-         * Creates a {@link RangeEntrySet}
+         * Creates a {@link RangeEntrySet}.
          */
         public RangeEntrySet(final RangeMap delegate) {
             if (delegate == null) {
@@ -943,9 +828,6 @@ public class PatriciaTrie<K, V> extends 
             this.delegate = delegate;
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public Iterator<Map.Entry<K, V>> iterator() {
             final K fromKey = delegate.getFromKey();
@@ -966,9 +848,6 @@ public class PatriciaTrie<K, V> extends 
             return new EntryIterator(first, last);
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public int size() {
             if (size == -1 || expectedModCount != PatriciaTrie.this.modCount) {
@@ -983,17 +862,11 @@ public class PatriciaTrie<K, V> extends 
             return size;
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public boolean isEmpty() {
             return !iterator().hasNext();
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @SuppressWarnings("unchecked")
         @Override
         public boolean contains(final Object o) {
@@ -1011,9 +884,6 @@ public class PatriciaTrie<K, V> extends 
             return node != null && compare(node.getValue(), entry.getValue());
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @SuppressWarnings("unchecked")
         @Override
         public boolean remove(final Object o) {
@@ -1043,32 +913,22 @@ public class PatriciaTrie<K, V> extends 
             private final K excludedKey;
 
             /**
-             * Creates a {@link EntryIterator}
+             * Creates a {@link EntryIterator}.
              */
-            private EntryIterator(
-                    final TrieEntry<K,V> first,
-                    final TrieEntry<K,V> last) {
+            private EntryIterator(final TrieEntry<K,V> first, final TrieEntry<K,V> last) {
                 super(first);
-
                 this.excludedKey = last != null ? last.getKey() : null;
             }
 
-            /**
-             * {@inheritDoc}
-             */
             @Override
             public boolean hasNext() {
                 return next != null && !compare(next.key, excludedKey);
             }
 
-            /**
-             * {@inheritDoc}
-             */
             public Map.Entry<K,V> next() {
                 if (next == null || compare(next.key, excludedKey)) {
                     throw new NoSuchElementException();
                 }
-
                 return nextEntry();
             }
         }
@@ -1094,7 +954,7 @@ public class PatriciaTrie<K, V> extends 
         private int size = -1;
 
         /**
-         * Creates a {@link PrefixRangeMap}
+         * Creates a {@link PrefixRangeMap}.
          */
         private PrefixRangeMap(final K prefix, final int offsetInBits, final int lengthInBits) {
             this.prefix = prefix;
@@ -1147,9 +1007,6 @@ public class PatriciaTrie<K, V> extends 
             return size;
         }
 
-        /**
-         * {@inheritDoc}
-         */
         public K firstKey() {
             fixup();
 
@@ -1169,9 +1026,6 @@ public class PatriciaTrie<K, V> extends 
             return first;
         }
 
-        /**
-         * {@inheritDoc}
-         */
         public K lastKey() {
             fixup();
 
@@ -1192,8 +1046,7 @@ public class PatriciaTrie<K, V> extends 
         }
 
         /**
-         * Returns true if this {@link PrefixRangeMap}'s key is a prefix
-         * of the provided key.
+         * Returns true if this {@link PrefixRangeMap}'s key is a prefix of the provided key.
          */
         @Override
         protected boolean inRange(final K key) {
@@ -1201,7 +1054,7 @@ public class PatriciaTrie<K, V> extends 
         }
 
         /**
-         * Same as {@link #inRange(Object)}
+         * Same as {@link #inRange(Object)}.
          */
         @Override
         protected boolean inRange2(final K key) {
@@ -1209,8 +1062,7 @@ public class PatriciaTrie<K, V> extends 
         }
 
         /**
-         * Returns true if the provided Key is in the FROM range
-         * of the {@link PrefixRangeMap}
+         * Returns true if the provided Key is in the FROM range of the {@link PrefixRangeMap}.
          */
         @Override
         protected boolean inFromRange(final K key, final boolean forceInclusive) {
@@ -1218,67 +1070,47 @@ public class PatriciaTrie<K, V> extends 
         }
 
         /**
-         * Returns true if the provided Key is in the TO range
-         * of the {@link PrefixRangeMap}
+         * Returns true if the provided Key is in the TO range of the {@link PrefixRangeMap}.
          */
         @Override
         protected boolean inToRange(final K key, final boolean forceInclusive) {
             return keyAnalyzer.isPrefix(prefix, offsetInBits, lengthInBits, key);
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         protected Set<Map.Entry<K, V>> createEntrySet() {
             return new PrefixRangeEntrySet(this);
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public K getFromKey() {
             return fromKey;
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public K getToKey() {
             return toKey;
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public boolean isFromInclusive() {
             return false;
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public boolean isToInclusive() {
             return false;
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
-        protected SortedMap<K, V> createRangeMap(
-                final K fromKey, final boolean fromInclusive,
-                final K toKey, final boolean toInclusive) {
+        protected SortedMap<K, V> createRangeMap(final K fromKey, final boolean fromInclusive,
+                                                 final K toKey, final boolean toInclusive) {
             return new RangeEntryMap(fromKey, fromInclusive, toKey, toInclusive);
         }
     }
 
     /**
-     * A prefix {@link RangeEntrySet} view of the {@link Trie}
+     * A prefix {@link RangeEntrySet} view of the {@link Trie}.
      */
     private final class PrefixRangeEntrySet extends RangeEntrySet {
 
@@ -1289,24 +1121,18 @@ public class PatriciaTrie<K, V> extends 
         private int expectedModCount = 0;
 
         /**
-         * Creates a {@link PrefixRangeEntrySet}
+         * Creates a {@link PrefixRangeEntrySet}.
          */
         public PrefixRangeEntrySet(final PrefixRangeMap delegate) {
             super(delegate);
             this.delegate = delegate;
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public int size() {
             return delegate.fixup();
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public Iterator<Map.Entry<K,V>> iterator() {
             if (PatriciaTrie.this.modCount != expectedModCount) {
@@ -1337,16 +1163,10 @@ public class PatriciaTrie<K, V> extends 
                 this.entry = entry;
             }
 
-            /**
-             * {@inheritDoc}
-             */
             public boolean hasNext() {
                 return hit == 0;
             }
 
-            /**
-             * {@inheritDoc}
-             */
             public Map.Entry<K, V> next() {
                 if (hit != 0) {
                     throw new NoSuchElementException();
@@ -1356,9 +1176,6 @@ public class PatriciaTrie<K, V> extends 
                 return entry;
             }
 
-            /**
-             * {@inheritDoc}
-             */
             public void remove() {
                 if (hit != 1) {
                     throw new IllegalStateException();
@@ -1395,9 +1212,6 @@ public class PatriciaTrie<K, V> extends 
                 this.lengthInBits = lengthInBits;
             }
 
-            /**
-             * {@inheritDoc}
-             */
             public Map.Entry<K,V> next() {
                 final Map.Entry<K, V> entry = nextEntry();
                 if (lastOne) {
@@ -1406,17 +1220,11 @@ public class PatriciaTrie<K, V> extends 
                 return entry;
             }
 
-            /**
-             * {@inheritDoc}
-             */
             @Override
             protected TrieEntry<K, V> findNext(final TrieEntry<K, V> prior) {
                 return PatriciaTrie.this.nextEntryInSubtree(prior, subtree);
             }
 
-            /**
-             * {@inheritDoc}
-             */
             @Override
             public void remove() {
                 // If the current entry we're removing is the subtree

Modified: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/PatriciaTrieBase.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/PatriciaTrieBase.java?rev=1491615&r1=1491614&r2=1491615&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/PatriciaTrieBase.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/PatriciaTrieBase.java Mon Jun 10 21:46:19 2013
@@ -52,41 +52,29 @@ abstract class PatriciaTrieBase<K, V> ex
     private transient volatile Collection<V> values;
     private transient volatile Set<Map.Entry<K,V>> entrySet;
 
-    /**
-     * The current size of the {@link Trie}
-     */
+    /** The current size of the {@link Trie}. */
     private int size = 0;
 
     /**
      * The number of times this {@link Trie} has been modified.
-     * It's used to detect concurrent modifications and fail-fast
-     * the {@link Iterator}s.
+     * It's used to detect concurrent modifications and fail-fast the {@link Iterator}s.
      */
-    transient int modCount = 0;
+    protected transient int modCount = 0;
 
     public PatriciaTrieBase(final KeyAnalyzer<? super K> keyAnalyzer) {
         super(keyAnalyzer);
     }
 
     /**
-     * Constructs a new {@link org.apache.commons.collections4.Trie Trie} using the given {@link KeyAnalyzer}
-     * and initializes the {@link org.apache.commons.collections4.Trie Trie} with the values from the
-     * provided {@link Map}.
+     * Constructs a new {@link org.apache.commons.collections4.Trie Trie} using the given
+     * {@link KeyAnalyzer} and initializes the {@link org.apache.commons.collections4.Trie Trie}
+     * with the values from the provided {@link Map}.
      */
-    public PatriciaTrieBase(final KeyAnalyzer<? super K> keyAnalyzer,
-            final Map<? extends K, ? extends V> m) {
+    public PatriciaTrieBase(final KeyAnalyzer<? super K> keyAnalyzer, final Map<? extends K, ? extends V> m) {
         super(keyAnalyzer);
-
-        if (m == null) {
-            throw new NullPointerException("m");
-        }
-
         putAll(m);
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public void clear() {
         root.key = null;
@@ -102,17 +90,13 @@ abstract class PatriciaTrieBase<K, V> ex
         incrementModCount();
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public int size() {
         return size;
     }
 
     /**
-     * A helper method to increment the {@link Trie} size
-     * and the modification counter.
+     * A helper method to increment the {@link Trie} size and the modification counter.
      */
     void incrementSize() {
         size++;
@@ -120,8 +104,7 @@ abstract class PatriciaTrieBase<K, V> ex
     }
 
     /**
-     * A helper method to decrement the {@link Trie} size
-     * and increment the modification counter.
+     * A helper method to decrement the {@link Trie} size and increment the modification counter.
      */
     void decrementSize() {
         size--;
@@ -135,9 +118,6 @@ abstract class PatriciaTrieBase<K, V> ex
         ++modCount;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public V put(final K key, final V value) {
         if (key == null) {
@@ -168,14 +148,14 @@ abstract class PatriciaTrieBase<K, V> ex
         }
 
         final int bitIndex = bitIndex(key, found.key);
-        if (!AbstractKeyAnalyzer.isOutOfBoundsIndex(bitIndex)) {
-            if (AbstractKeyAnalyzer.isValidBitIndex(bitIndex)) { // in 99.999...9% the case
+        if (!KeyAnalyzer.isOutOfBoundsIndex(bitIndex)) {
+            if (KeyAnalyzer.isValidBitIndex(bitIndex)) { // in 99.999...9% the case
                 /* NEW KEY+VALUE TUPLE */
                 final TrieEntry<K, V> t = new TrieEntry<K, V>(key, value, bitIndex);
                 addEntry(t, lengthInBits);
                 incrementSize();
                 return null;
-            } else if (AbstractKeyAnalyzer.isNullBitKey(bitIndex)) {
+            } else if (KeyAnalyzer.isNullBitKey(bitIndex)) {
                 // A bits of the Key are zero. The only place to
                 // store such a Key is the root Node!
 
@@ -187,7 +167,7 @@ abstract class PatriciaTrieBase<K, V> ex
                 }
                 return root.setKeyValue(key, value);
 
-            } else if (AbstractKeyAnalyzer.isEqualBitKey(bitIndex)) {
+            } else if (KeyAnalyzer.isEqualBitKey(bitIndex)) {
                 // This is a very special and rare case.
 
                 /* REPLACE OLD KEY+VALUE */
@@ -198,11 +178,11 @@ abstract class PatriciaTrieBase<K, V> ex
             }
         }
 
-        throw new IndexOutOfBoundsException("Failed to put: " + key + " -> " + value + ", " + bitIndex);
+        throw new IllegalArgumentException("Failed to put: " + key + " -> " + value + ", " + bitIndex);
     }
 
     /**
-     * Adds the given {@link TrieEntry} to the {@link Trie}
+     * Adds the given {@link TrieEntry} to the {@link Trie}.
      */
     TrieEntry<K, V> addEntry(final TrieEntry<K, V> entry, final int lengthInBits) {
         TrieEntry<K, V> current = root.left;
@@ -249,9 +229,6 @@ abstract class PatriciaTrieBase<K, V> ex
         }
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public V get(final Object k) {
         final TrieEntry<K, V> entry = getEntry(k);
@@ -262,7 +239,7 @@ abstract class PatriciaTrieBase<K, V> ex
      * Returns the entry associated with the specified key in the
      * PatriciaTrieBase.  Returns null if the map contains no mapping
      * for this key.
-     *
+     * <p>
      * This may throw ClassCastException if the object is not of type K.
      */
     TrieEntry<K,V> getEntry(final Object k) {
@@ -276,39 +253,29 @@ abstract class PatriciaTrieBase<K, V> ex
         return !entry.isEmpty() && compareKeys(key, entry.key) ? entry : null;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public Map.Entry<K, V> select(final K key) {
         final int lengthInBits = lengthInBits(key);
-        final Reference<Map.Entry<K, V>> reference
-            = new Reference<Map.Entry<K,V>>();
+        final Reference<Map.Entry<K, V>> reference = new Reference<Map.Entry<K,V>>();
         if (!selectR(root.left, -1, key, lengthInBits, reference)) {
             return reference.get();
         }
         return null;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public Map.Entry<K,V> select(final K key, final Cursor<? super K, ? super V> cursor) {
         final int lengthInBits = lengthInBits(key);
-        final Reference<Map.Entry<K, V>> reference
-            = new Reference<Map.Entry<K,V>>();
+        final Reference<Map.Entry<K, V>> reference = new Reference<Map.Entry<K,V>>();
         selectR(root.left, -1, key, lengthInBits, cursor, reference);
         return reference.get();
     }
 
     /**
-     * This is equivalent to the other {@link #selectR(TrieEntry, int,
-     * Object, int, Cursor, Reference)} method but without its overhead
-     * because we're selecting only one best matching Entry from the
-     * {@link Trie}.
+     * This is equivalent to the other {@link #selectR(TrieEntry, int, Object, int, Cursor, Reference)}
+     * method but without its overhead because we're selecting only one best matching Entry from the {@link Trie}.
      */
     private boolean selectR(final TrieEntry<K, V> h, final int bitIndex,
-            final K key, final int lengthInBits,
-            final Reference<Map.Entry<K, V>> reference) {
+                            final K key, final int lengthInBits,
+                            final Reference<Map.Entry<K, V>> reference) {
 
         if (h.bitIndex <= bitIndex) {
             // If we hit the root Node and it is empty
@@ -333,9 +300,6 @@ abstract class PatriciaTrieBase<K, V> ex
         return false;
     }
 
-    /**
-     *
-     */
     private boolean selectR(final TrieEntry<K,V> h, final int bitIndex,
             final K key,
             final int lengthInBits,
@@ -379,9 +343,6 @@ abstract class PatriciaTrieBase<K, V> ex
         return false;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public Map.Entry<K, V> traverse(final Cursor<? super K, ? super V> cursor) {
         TrieEntry<K, V> entry = nextEntry(null);
         while (entry != null) {
@@ -410,9 +371,6 @@ abstract class PatriciaTrieBase<K, V> ex
         return null;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public boolean containsKey(final Object k) {
         if (k == null) {
@@ -425,9 +383,6 @@ abstract class PatriciaTrieBase<K, V> ex
         return !entry.isEmpty() && compareKeys(key, entry.key);
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public Set<Map.Entry<K,V>> entrySet() {
         if (entrySet == null) {
@@ -436,9 +391,6 @@ abstract class PatriciaTrieBase<K, V> ex
         return entrySet;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public Set<K> keySet() {
         if (keySet == null) {
@@ -447,9 +399,6 @@ abstract class PatriciaTrieBase<K, V> ex
         return keySet;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public Collection<V> values() {
         if (values == null) {
@@ -787,7 +736,7 @@ abstract class PatriciaTrieBase<K, V> ex
 
     /**
      * Returns the first entry the {@link Trie} is storing.
-     *
+     * <p>
      * This is implemented by going always to the left until
      * we encounter a valid uplink. That uplink is the first key.
      */
@@ -847,7 +796,7 @@ abstract class PatriciaTrieBase<K, V> ex
     }
 
     /**
-     *  A {@link Trie} is a set of {@link TrieEntry} nodes
+     *  A {@link Trie} is a set of {@link TrieEntry} nodes.
      */
     static class TrieEntry<K,V> extends BasicEntry<K, V> {
 
@@ -889,22 +838,19 @@ abstract class PatriciaTrieBase<K, V> ex
         }
 
         /**
-         * Neither the left nor right child is a loopback
+         * Neither the left nor right child is a loopback.
          */
         public boolean isInternalNode() {
             return left != this && right != this;
         }
 
         /**
-         * Either the left or right child is a loopback
+         * Either the left or right child is a loopback.
          */
         public boolean isExternalNode() {
             return !isInternalNode();
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public String toString() {
             final StringBuilder buffer = new StringBuilder();
@@ -968,22 +914,15 @@ abstract class PatriciaTrieBase<K, V> ex
 
 
     /**
-     * This is a entry set view of the {@link Trie} as returned
-     * by {@link Map#entrySet()}
+     * This is a entry set view of the {@link Trie} as returned by {@link Map#entrySet()}.
      */
     private class EntrySet extends AbstractSet<Map.Entry<K,V>> {
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public Iterator<Map.Entry<K,V>> iterator() {
             return new EntryIterator();
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public boolean contains(final Object o) {
             if (!(o instanceof Map.Entry)) {
@@ -994,9 +933,6 @@ abstract class PatriciaTrieBase<K, V> ex
             return candidate != null && candidate.equals(o);
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public boolean remove(final Object o) {
             final int size = size();
@@ -1004,24 +940,18 @@ abstract class PatriciaTrieBase<K, V> ex
             return size != size();
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public int size() {
             return PatriciaTrieBase.this.size();
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public void clear() {
             PatriciaTrieBase.this.clear();
         }
 
         /**
-         * An {@link Iterator} that returns {@link Entry} Objects
+         * An {@link Iterator} that returns {@link Entry} Objects.
          */
         private class EntryIterator extends TrieIterator<Map.Entry<K,V>> {
             public Map.Entry<K,V> next() {
@@ -1031,38 +961,25 @@ abstract class PatriciaTrieBase<K, V> ex
     }
 
     /**
-     * This is a key set view of the {@link Trie} as returned
-     * by {@link Map#keySet()}
+     * This is a key set view of the {@link Trie} as returned by {@link Map#keySet()}.
      */
     private class KeySet extends AbstractSet<K> {
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public Iterator<K> iterator() {
             return new KeyIterator();
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public int size() {
             return PatriciaTrieBase.this.size();
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public boolean contains(final Object o) {
             return containsKey(o);
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public boolean remove(final Object o) {
             final int size = size();
@@ -1070,16 +987,13 @@ abstract class PatriciaTrieBase<K, V> ex
             return size != size();
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public void clear() {
             PatriciaTrieBase.this.clear();
         }
 
         /**
-         * An {@link Iterator} that returns Key Objects
+         * An {@link Iterator} that returns Key Objects.
          */
         private class KeyIterator extends TrieIterator<K> {
             public K next() {
@@ -1089,46 +1003,30 @@ abstract class PatriciaTrieBase<K, V> ex
     }
 
     /**
-     * This is a value view of the {@link Trie} as returned
-     * by {@link Map#values()}
+     * This is a value view of the {@link Trie} as returned by {@link Map#values()}.
      */
     private class Values extends AbstractCollection<V> {
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public Iterator<V> iterator() {
             return new ValueIterator();
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public int size() {
             return PatriciaTrieBase.this.size();
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public boolean contains(final Object o) {
             return containsValue(o);
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public void clear() {
             PatriciaTrieBase.this.clear();
         }
 
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public boolean remove(final Object o) {
             for (final Iterator<V> it = iterator(); it.hasNext(); ) {
@@ -1142,7 +1040,7 @@ abstract class PatriciaTrieBase<K, V> ex
         }
 
         /**
-         * An {@link Iterator} that returns Value Objects
+         * An {@link Iterator} that returns Value Objects.
          */
         private class ValueIterator extends TrieIterator<V> {
             public V next() {
@@ -1156,30 +1054,28 @@ abstract class PatriciaTrieBase<K, V> ex
      */
     abstract class TrieIterator<E> implements Iterator<E> {
 
-        /**
-         * For fast-fail
-         */
+        /** For fast-fail. */
         protected int expectedModCount = PatriciaTrieBase.this.modCount;
 
         protected TrieEntry<K, V> next; // the next node to return
         protected TrieEntry<K, V> current; // the current entry we're on
 
         /**
-         * Starts iteration from the root
+         * Starts iteration from the root.
          */
         protected TrieIterator() {
             next = PatriciaTrieBase.this.nextEntry(null);
         }
 
         /**
-         * Starts iteration at the given entry
+         * Starts iteration at the given entry.
          */
         protected TrieIterator(final TrieEntry<K, V> firstEntry) {
             next = firstEntry;
         }
 
         /**
-         * Returns the next {@link TrieEntry}
+         * Returns the next {@link TrieEntry}.
          */
         protected TrieEntry<K,V> nextEntry() {
             if (expectedModCount != PatriciaTrieBase.this.modCount) {
@@ -1203,16 +1099,10 @@ abstract class PatriciaTrieBase<K, V> ex
             return PatriciaTrieBase.this.nextEntry(prior);
         }
 
-        /**
-         * {@inheritDoc}
-         */
         public boolean hasNext() {
             return next != null;
         }
 
-        /**
-         * {@inheritDoc}
-         */
         public void remove() {
             if (current == null) {
                 throw new IllegalStateException();

Copied: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/ByteArrayKeyAnalyzer.java (from r1491240, commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/ByteArrayKeyAnalyzer.java)
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/ByteArrayKeyAnalyzer.java?p2=commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/ByteArrayKeyAnalyzer.java&p1=commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/ByteArrayKeyAnalyzer.java&r1=1491240&r2=1491615&rev=1491615&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/ByteArrayKeyAnalyzer.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/ByteArrayKeyAnalyzer.java Mon Jun 10 21:46:19 2013
@@ -14,7 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.collections4.trie;
+package org.apache.commons.collections4.trie.analyzer;
+
+import org.apache.commons.collections4.trie.KeyAnalyzer;
 
 /**
  * A {@link KeyAnalyzer} for byte[]s.
@@ -22,34 +24,23 @@ package org.apache.commons.collections4.
  * @since 4.0
  * @version $Id$
  */
-public class ByteArrayKeyAnalyzer extends AbstractKeyAnalyzer<byte[]> {
+public class ByteArrayKeyAnalyzer extends KeyAnalyzer<byte[]> {
 
     private static final long serialVersionUID = 7382825097492285877L;
 
-    /**
-     * A singleton instance of {@link ByteArrayKeyAnalyzer}
-     */
-    public static final ByteArrayKeyAnalyzer INSTANCE
-        = new ByteArrayKeyAnalyzer(Integer.MAX_VALUE);
+    /** A singleton instance of {@link ByteArrayKeyAnalyzer}. */
+    public static final ByteArrayKeyAnalyzer INSTANCE = new ByteArrayKeyAnalyzer(Integer.MAX_VALUE);
 
-    /**
-     * The length of an {@link Byte} in bits
-     */
+    /** The length of an {@link Byte} in bits. */
     public static final int LENGTH = Byte.SIZE;
 
-    /**
-     * A bit mask where the first bit is 1 and the others are zero
-     */
+    /** A bit mask where the first bit is 1 and the others are zero. */
     private static final int MSB = 0x80;
 
-    /**
-     * A place holder for null
-     */
+    /** A place holder for null. */
     private static final byte[] NULL = new byte[0];
 
-    /**
-     * The maximum length of a key in bits
-     */
+    /** The maximum length of a key in bits. */
     private final int maxLengthInBits;
 
     public ByteArrayKeyAnalyzer(final int maxLengthInBits) {
@@ -76,23 +67,14 @@ public class ByteArrayKeyAnalyzer extend
         return maxLengthInBits;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int bitsPerElement() {
         return LENGTH;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int lengthInBits(final byte[] key) {
         return key != null ? key.length * bitsPerElement() : 0;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public boolean isBitSet(final byte[] key, final int bitIndex, final int lengthInBits) {
         if (key == null) {
             return false;
@@ -110,11 +92,8 @@ public class ByteArrayKeyAnalyzer extend
         return (key[index] & mask(bit)) != 0;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int bitIndex(final byte[] key, final int offsetInBits, final int lengthInBits,
-            byte[] other, final int otherOffsetInBits, final int otherLengthInBits) {
+                        byte[] other, final int otherOffsetInBits, final int otherLengthInBits) {
 
         if (other == null) {
             other = NULL;
@@ -151,11 +130,7 @@ public class ByteArrayKeyAnalyzer extend
         return KeyAnalyzer.EQUAL_BIT_KEY;
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isPrefix(final byte[] prefix, final int offsetInBits,
-            final int lengthInBits, final byte[] key) {
+    public boolean isPrefix(final byte[] prefix, final int offsetInBits, final int lengthInBits, final byte[] key) {
 
         final int keyLength = lengthInBits(key);
         if (lengthInBits > keyLength) {
@@ -173,9 +148,6 @@ public class ByteArrayKeyAnalyzer extend
         return true;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public int compare(final byte[] o1, final byte[] o2) {
         if (o1 == null) {

Copied: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/ByteKeyAnalyzer.java (from r1491240, commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/ByteKeyAnalyzer.java)
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/ByteKeyAnalyzer.java?p2=commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/ByteKeyAnalyzer.java&p1=commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/ByteKeyAnalyzer.java&r1=1491240&r2=1491615&rev=1491615&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/ByteKeyAnalyzer.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/ByteKeyAnalyzer.java Mon Jun 10 21:46:19 2013
@@ -14,7 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.collections4.trie;
+package org.apache.commons.collections4.trie.analyzer;
+
+import org.apache.commons.collections4.trie.KeyAnalyzer;
 
 /**
  * A {@link KeyAnalyzer} for {@link Byte}s.
@@ -22,58 +24,38 @@ package org.apache.commons.collections4.
  * @since 4.0
  * @version $Id$
  */
-public class ByteKeyAnalyzer extends AbstractKeyAnalyzer<Byte> {
+public class ByteKeyAnalyzer extends KeyAnalyzer<Byte> {
 
     private static final long serialVersionUID = 3395803342983289829L;
 
-    /**
-     * A singleton instance of {@link ByteKeyAnalyzer}
-     */
+    /** A singleton instance of {@link ByteKeyAnalyzer}. */
     public static final ByteKeyAnalyzer INSTANCE = new ByteKeyAnalyzer();
 
-    /**
-     * The length of an {@link Byte} in bits
-     */
+    /** The length of an {@link Byte} in bits. */
     public static final int LENGTH = Byte.SIZE;
 
-    /**
-     * A bit mask where the first bit is 1 and the others are zero
-     */
+    /** A bit mask where the first bit is 1 and the others are zero. */
     private static final int MSB = 0x80;
 
-    /**
-     * Returns a bit mask where the given bit is set
-     */
+    /** Returns a bit mask where the given bit is set. */
     private static int mask(final int bit) {
         return MSB >>> bit;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int bitsPerElement() {
         return 1;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int lengthInBits(final Byte key) {
         return LENGTH;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public boolean isBitSet(final Byte key, final int bitIndex, final int lengthInBits) {
         return (key.intValue() & mask(bitIndex)) != 0;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int bitIndex(final Byte key, final int offsetInBits, final int lengthInBits,
-            final Byte other, final int otherOffsetInBits, final int otherLengthInBits) {
+                        final Byte other, final int otherOffsetInBits, final int otherLengthInBits) {
 
         if (offsetInBits != 0 || otherOffsetInBits != 0) {
             throw new IllegalArgumentException("offsetInBits=" + offsetInBits
@@ -99,11 +81,7 @@ public class ByteKeyAnalyzer extends Abs
         return KeyAnalyzer.EQUAL_BIT_KEY;
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isPrefix(final Byte prefix, final int offsetInBits,
-            final int lengthInBits, final Byte key) {
+    public boolean isPrefix(final Byte prefix, final int offsetInBits, final int lengthInBits, final Byte key) {
 
         final int value1 = prefix.byteValue() << offsetInBits;
         final int value2 = key.byteValue();

Copied: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/CharArrayKeyAnalyzer.java (from r1491240, commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/CharArrayKeyAnalyzer.java)
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/CharArrayKeyAnalyzer.java?p2=commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/CharArrayKeyAnalyzer.java&p1=commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/CharArrayKeyAnalyzer.java&r1=1491240&r2=1491615&rev=1491615&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/CharArrayKeyAnalyzer.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/CharArrayKeyAnalyzer.java Mon Jun 10 21:46:19 2013
@@ -14,7 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.collections4.trie;
+package org.apache.commons.collections4.trie.analyzer;
+
+import org.apache.commons.collections4.trie.KeyAnalyzer;
 
 /**
  * An {@link KeyAnalyzer} for {@code char[]}s.
@@ -22,51 +24,34 @@ package org.apache.commons.collections4.
  * @since 4.0
  * @version $Id$
  */
-public class CharArrayKeyAnalyzer extends AbstractKeyAnalyzer<char[]> {
+public class CharArrayKeyAnalyzer extends KeyAnalyzer<char[]> {
 
     private static final long serialVersionUID = -8167897361549463457L;
 
-    /**
-     * A singleton instance of {@link CharArrayKeyAnalyzer}
-     */
+    /** A singleton instance of {@link CharArrayKeyAnalyzer}. */
     public static final CharArrayKeyAnalyzer INSTANCE = new CharArrayKeyAnalyzer();
 
-    /**
-     * The number of bits per {@link Character}
-     */
+    /** The number of bits per {@link Character}. */
     public static final int LENGTH = Character.SIZE;
 
-    /**
-     * A bit mask where the first bit is 1 and the others are zero
-     */
+    /** A bit mask where the first bit is 1 and the others are zero. */
     private static final int MSB = 0x8000;
 
-    /**
-     * Returns a bit mask where the given bit is set
-     */
+    /** Returns a bit mask where the given bit is set. */
     private static int mask(final int bit) {
         return MSB >>> bit;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int bitsPerElement() {
         return LENGTH;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int lengthInBits(final char[] key) {
         return key != null ? key.length * LENGTH : 0;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int bitIndex(final char[] key, final int offsetInBits, final int lengthInBits,
-            final char[] other, final int otherOffsetInBits, final int otherLengthInBits) {
+                        final char[] other, final int otherOffsetInBits, final int otherLengthInBits) {
         boolean allNull = true;
 
         if (offsetInBits % LENGTH != 0 || otherOffsetInBits % LENGTH != 0
@@ -123,9 +108,6 @@ public class CharArrayKeyAnalyzer extend
         return KeyAnalyzer.EQUAL_BIT_KEY;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public boolean isBitSet(final char[] key, final int bitIndex, final int lengthInBits) {
         if (key == null || bitIndex >= lengthInBits) {
             return false;
@@ -137,11 +119,7 @@ public class CharArrayKeyAnalyzer extend
         return (key[index] & mask(bit)) != 0;
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isPrefix(final char[] prefix, final int offsetInBits,
-            final int lengthInBits, final char[] key) {
+    public boolean isPrefix(final char[] prefix, final int offsetInBits, final int lengthInBits, final char[] key) {
         if (offsetInBits % LENGTH != 0 || lengthInBits % LENGTH != 0) {
             throw new IllegalArgumentException(
                     "Cannot determine prefix outside of Character boundaries");

Copied: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/CharacterKeyAnalyzer.java (from r1491240, commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/CharacterKeyAnalyzer.java)
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/CharacterKeyAnalyzer.java?p2=commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/CharacterKeyAnalyzer.java&p1=commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/CharacterKeyAnalyzer.java&r1=1491240&r2=1491615&rev=1491615&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/CharacterKeyAnalyzer.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/CharacterKeyAnalyzer.java Mon Jun 10 21:46:19 2013
@@ -14,7 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.collections4.trie;
+package org.apache.commons.collections4.trie.analyzer;
+
+import org.apache.commons.collections4.trie.KeyAnalyzer;
 
 /**
  * A {@link KeyAnalyzer} for {@link Character}s.
@@ -22,60 +24,39 @@ package org.apache.commons.collections4.
  * @since 4.0
  * @version $Id$
  */
-public class CharacterKeyAnalyzer extends AbstractKeyAnalyzer<Character> {
+public class CharacterKeyAnalyzer extends KeyAnalyzer<Character> {
 
     private static final long serialVersionUID = 3928565962744720753L;
 
-    /**
-     * A singleton instance of the {@link CharacterKeyAnalyzer}.
-     */
+    /** A singleton instance of the {@link CharacterKeyAnalyzer}. */
     public static final CharacterKeyAnalyzer INSTANCE
         = new CharacterKeyAnalyzer();
 
-    /**
-     * The length of a {@link Character} in bits
-     */
+    /** The length of a {@link Character} in bits. */
     public static final int LENGTH = Character.SIZE;
 
-    /**
-     * A bit mask where the first bit is 1 and the others are zero
-     */
+    /** A bit mask where the first bit is 1 and the others are zero. */
     private static final int MSB = 0x8000;
 
-    /**
-     * Returns a bit mask where the given bit is set
-     */
+    /** Returns a bit mask where the given bit is set. */
     private static int mask(final int bit) {
         return MSB >>> bit;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int bitsPerElement() {
         return 1;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int lengthInBits(final Character key) {
         return LENGTH;
     }
 
-    /**
-     * {@inheritDoc}
-     * @throws NullPointerException if the key is null
-     */
     public boolean isBitSet(final Character key, final int bitIndex, final int lengthInBits) {
         return (key.charValue() & mask(bitIndex)) != 0;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int bitIndex(final Character key, final int offsetInBits, final int lengthInBits,
-            final Character other, final int otherOffsetInBits, final int otherLengthInBits) {
+                        final Character other, final int otherOffsetInBits, final int otherLengthInBits) {
 
         if (offsetInBits != 0 || otherOffsetInBits != 0) {
             throw new IllegalArgumentException("offsetInBits=" + offsetInBits
@@ -101,11 +82,8 @@ public class CharacterKeyAnalyzer extend
         return KeyAnalyzer.EQUAL_BIT_KEY;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public boolean isPrefix(final Character prefix, final int offsetInBits,
-            final int lengthInBits, final Character key) {
+                            final int lengthInBits, final Character key) {
 
         final int value1 = prefix.charValue() << offsetInBits;
         final int value2 = key.charValue();

Copied: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/IntegerKeyAnalyzer.java (from r1491240, commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/IntegerKeyAnalyzer.java)
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/IntegerKeyAnalyzer.java?p2=commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/IntegerKeyAnalyzer.java&p1=commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/IntegerKeyAnalyzer.java&r1=1491240&r2=1491615&rev=1491615&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/IntegerKeyAnalyzer.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/IntegerKeyAnalyzer.java Mon Jun 10 21:46:19 2013
@@ -14,7 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.collections4.trie;
+package org.apache.commons.collections4.trie.analyzer;
+
+import org.apache.commons.collections4.trie.KeyAnalyzer;
 
 /**
  * A {@link KeyAnalyzer} for {@link Integer}s.
@@ -22,58 +24,38 @@ package org.apache.commons.collections4.
  * @since 4.0
  * @version $Id$
  */
-public class IntegerKeyAnalyzer extends AbstractKeyAnalyzer<Integer> {
+public class IntegerKeyAnalyzer extends KeyAnalyzer<Integer> {
 
     private static final long serialVersionUID = 4928508653722068982L;
 
-    /**
-     * A singleton instance of {@link IntegerKeyAnalyzer}
-     */
+    /** A singleton instance of {@link IntegerKeyAnalyzer}. */
     public static final IntegerKeyAnalyzer INSTANCE = new IntegerKeyAnalyzer();
 
-    /**
-     * The length of an {@link Integer} in bits
-     */
+    /** The length of an {@link Integer} in bits. */
     public static final int LENGTH = Integer.SIZE;
 
-    /**
-     * A bit mask where the first bit is 1 and the others are zero
-     */
+    /** A bit mask where the first bit is 1 and the others are zero. */
     private static final int MSB = 0x80000000;
 
-    /**
-     * Returns a bit mask where the given bit is set
-     */
+    /** Returns a bit mask where the given bit is set. */
     private static int mask(final int bit) {
         return MSB >>> bit;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int bitsPerElement() {
         return 1;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int lengthInBits(final Integer key) {
         return LENGTH;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public boolean isBitSet(final Integer key, final int bitIndex, final int lengthInBits) {
         return (key.intValue() & mask(bitIndex)) != 0;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int bitIndex(final Integer key, final int offsetInBits, final int lengthInBits,
-            final Integer other, final int otherOffsetInBits, final int otherLengthInBits) {
+                        final Integer other, final int otherOffsetInBits, final int otherLengthInBits) {
 
         if (offsetInBits != 0 || otherOffsetInBits != 0) {
             throw new IllegalArgumentException("offsetInBits=" + offsetInBits
@@ -99,11 +81,8 @@ public class IntegerKeyAnalyzer extends 
         return KeyAnalyzer.EQUAL_BIT_KEY;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public boolean isPrefix(final Integer prefix, final int offsetInBits,
-            final int lengthInBits, final Integer key) {
+                            final int lengthInBits, final Integer key) {
 
         final int value1 = prefix.intValue() << offsetInBits;
         final int value2 = key.intValue();

Copied: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/LongKeyAnalyzer.java (from r1491240, commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/LongKeyAnalyzer.java)
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/LongKeyAnalyzer.java?p2=commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/LongKeyAnalyzer.java&p1=commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/LongKeyAnalyzer.java&r1=1491240&r2=1491615&rev=1491615&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/LongKeyAnalyzer.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/LongKeyAnalyzer.java Mon Jun 10 21:46:19 2013
@@ -14,7 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.collections4.trie;
+package org.apache.commons.collections4.trie.analyzer;
+
+import org.apache.commons.collections4.trie.KeyAnalyzer;
 
 /**
  * A {@link KeyAnalyzer} for {@link Long}s.
@@ -22,58 +24,38 @@ package org.apache.commons.collections4.
  * @since 4.0
  * @version $Id$
  */
-public class LongKeyAnalyzer extends AbstractKeyAnalyzer<Long> {
+public class LongKeyAnalyzer extends KeyAnalyzer<Long> {
 
     private static final long serialVersionUID = -4119639247588227409L;
 
-    /**
-     * A singleton instance of {@link LongKeyAnalyzer}
-     */
+    /** A singleton instance of {@link LongKeyAnalyzer}. */
     public static final LongKeyAnalyzer INSTANCE = new LongKeyAnalyzer();
 
-    /**
-     * The length of an {@link Long} in bits
-     */
+    /** The length of an {@link Long} in bits. */
     public static final int LENGTH = Long.SIZE;
 
-    /**
-     * A bit mask where the first bit is 1 and the others are zero
-     */
+    /** A bit mask where the first bit is 1 and the others are zero. */
     private static final long MSB = 0x8000000000000000L;
 
-    /**
-     * Returns a bit mask where the given bit is set
-     */
+    /** Returns a bit mask where the given bit is set. */
     private static long mask(final int bit) {
         return MSB >>> bit;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int bitsPerElement() {
         return 1;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int lengthInBits(final Long key) {
         return LENGTH;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public boolean isBitSet(final Long key, final int bitIndex, final int lengthInBits) {
         return (key.longValue() & mask(bitIndex)) != 0;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int bitIndex(final Long key, final int offsetInBits, final int lengthInBits,
-            final Long other, final int otherOffsetInBits, final int otherLengthInBits) {
+                        final Long other, final int otherOffsetInBits, final int otherLengthInBits) {
 
         if (offsetInBits != 0 || otherOffsetInBits != 0) {
             throw new IllegalArgumentException("offsetInBits=" + offsetInBits
@@ -99,11 +81,8 @@ public class LongKeyAnalyzer extends Abs
         return KeyAnalyzer.EQUAL_BIT_KEY;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public boolean isPrefix(final Long prefix, final int offsetInBits,
-            final int lengthInBits, final Long key) {
+                            final int lengthInBits, final Long key) {
 
         final long value1 = prefix.longValue() << offsetInBits;
         final long value2 = key.longValue();

Copied: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/ShortKeyAnalyzer.java (from r1491240, commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/ShortKeyAnalyzer.java)
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/ShortKeyAnalyzer.java?p2=commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/ShortKeyAnalyzer.java&p1=commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/ShortKeyAnalyzer.java&r1=1491240&r2=1491615&rev=1491615&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/ShortKeyAnalyzer.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/trie/analyzer/ShortKeyAnalyzer.java Mon Jun 10 21:46:19 2013
@@ -14,7 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.collections4.trie;
+package org.apache.commons.collections4.trie.analyzer;
+
+import org.apache.commons.collections4.trie.KeyAnalyzer;
 
 /**
  * A {@link KeyAnalyzer} for {@link Short}s.
@@ -22,58 +24,38 @@ package org.apache.commons.collections4.
  * @since 4.0
  * @version $Id$
  */
-public class ShortKeyAnalyzer implements KeyAnalyzer<Short> {
+public class ShortKeyAnalyzer extends KeyAnalyzer<Short> {
 
     private static final long serialVersionUID = -8631376733513512017L;
 
-    /**
-     * A singleton instance of {@link ShortKeyAnalyzer}
-     */
+    /** A singleton instance of {@link ShortKeyAnalyzer}. */
     public static final ShortKeyAnalyzer INSTANCE = new ShortKeyAnalyzer();
 
-    /**
-     * The length of an {@link Short} in bits
-     */
+    /** The length of an {@link Short} in bits. */
     public static final int LENGTH = Short.SIZE;
 
-    /**
-     * A bit mask where the first bit is 1 and the others are zero
-     */
+    /** A bit mask where the first bit is 1 and the others are zero. */
     private static final int MSB = 0x8000;
 
-    /**
-     * Returns a bit mask where the given bit is set
-     */
+    /** Returns a bit mask where the given bit is set. */
     private static int mask(final int bit) {
         return MSB >>> bit;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int bitsPerElement() {
         return 1;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int lengthInBits(final Short key) {
         return LENGTH;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public boolean isBitSet(final Short key, final int bitIndex, final int lengthInBits) {
         return (key.intValue() & mask(bitIndex)) != 0;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public int bitIndex(final Short key, final int offsetInBits, final int lengthInBits,
-            final Short other, final int otherOffsetInBits, final int otherLengthInBits) {
+                        final Short other, final int otherOffsetInBits, final int otherLengthInBits) {
 
         if (offsetInBits != 0 || otherOffsetInBits != 0) {
             throw new IllegalArgumentException("offsetInBits=" + offsetInBits
@@ -99,18 +81,8 @@ public class ShortKeyAnalyzer implements
         return KeyAnalyzer.EQUAL_BIT_KEY;
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    public int compare(final Short o1, final Short o2) {
-        return o1.compareTo(o2);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
     public boolean isPrefix(final Short prefix, final int offsetInBits,
-            final int lengthInBits, final Short key) {
+                            final int lengthInBits, final Short key) {
 
         final int value1 = prefix.shortValue() << offsetInBits;
         final int value2 = key.shortValue();
@@ -122,4 +94,10 @@ public class ShortKeyAnalyzer implements
 
         return (value1 & mask) == (value2 & mask);
     }
+
+    @Override
+    public int compare(final Short o1, final Short o2) {
+        return o1.compareTo(o2);
+    }
+
 }