1 /**
2  * ******************************************************************************
3  * Copyright (C) 1996-2005, International Business Machines Corporation and    *
4  * others. All Rights Reserved.                                                *
5  * ******************************************************************************
6  *
7  *
8  * ******************************************************************************
9  */
10 
11 package libcore.icu;
12 
13 import java.text.CollationKey;
14 
15 /**
16  * A concrete implementation of the abstract java.text.CollationKey.
17  */
18 public final class CollationKeyICU extends CollationKey {
19     /**
20      * The key.
21      */
22     private final android.icu.text.CollationKey key;
23 
CollationKeyICU(String source, android.icu.text.CollationKey key)24     public CollationKeyICU(String source, android.icu.text.CollationKey key) {
25         super(source);
26         this.key = key;
27     }
28 
29     @Override
compareTo(CollationKey other)30     public int compareTo(CollationKey other) {
31         final android.icu.text.CollationKey otherKey;
32         if (other instanceof CollationKeyICU) {
33             otherKey = ((CollationKeyICU) other).key;
34         } else {
35             otherKey = new android.icu.text.CollationKey(other.getSourceString(),
36                     other.toByteArray());
37         }
38 
39         return key.compareTo(otherKey);
40     }
41 
42     @Override
equals(Object object)43     public boolean equals(Object object) {
44         if (object == this) {
45             return true;
46         }
47         if (!(object instanceof CollationKey)) {
48             return false;
49         }
50         return compareTo((CollationKey) object) == 0;
51     }
52 
53     /**
54      * Creates a hash code for this CollationKey.
55      * Compute the hash by iterating sparsely over about 32 (up to 63) bytes
56      * spaced evenly through the string.  For each byte, multiply the previous
57      * hash value by a prime number and add the new byte in, like a linear
58      * congruential random number generator, producing a pseudo-random
59      * deterministic value well distributed over the output range.
60      *
61      * @return hash value of collation key. Hash value is never 0.
62      * @stable ICU 2.4
63      */
64     @Override
hashCode()65     public int hashCode() {
66         return key.hashCode();
67     }
68 
69     @Override
toByteArray()70     public byte[] toByteArray() {
71         return key.toByteArray();
72     }
73 }
74