01: /**
02: *******************************************************************************
03: * Copyright (C) 1996-2006, International Business Machines Corporation and *
04: * others. All Rights Reserved. *
05: *******************************************************************************
06: */package com.ibm.icu.text;
07:
08: import com.ibm.icu.util.ByteArrayWrapper;
09:
10: /**
11: * <p>
12: * Simple class wrapper to store the internal byte representation of a
13: * CollationKey. Unlike the CollationKey, this class do not contain information
14: * on the source string the sort order represents. RawCollationKey is mutable
15: * and users can reuse its objects with the method in
16: * RuleBasedCollator.getRawCollationKey(..).
17: * </p>
18: * <p>
19: * Please refer to the documentation on CollationKey for a detail description
20: * on the internal byte representation. Note the internal byte representation
21: * is always null-terminated.
22: * </p>
23: * <code>
24: * Example of use:<br>
25: * String str[] = {.....};
26: * RuleBasedCollator collator = (RuleBasedCollator)Collator.getInstance();
27: * RawCollationKey key = new RawCollationKey(128);
28: * for (int i = 0; i < str.length; i ++) {
29: * collator.getRawCollationKey(str[i], key);
30: * // do something with key.bytes
31: * }
32: * </code>
33: * <p><strong>Note:</strong> Comparison between RawCollationKeys created by
34: * different Collators might return incorrect results.
35: * See class documentation for Collator.</p>
36: * @stable ICU 2.8
37: * @see RuleBasedCollator
38: * @see CollationKey
39: */
40: public final class RawCollationKey extends ByteArrayWrapper {
41: // public constructors --------------------------------------------------
42:
43: /**
44: * Default constructor, internal byte array is null and its size set to 0.
45: * @stable ICU 2.8
46: */
47: public RawCollationKey() {
48: }
49:
50: /**
51: * RawCollationKey created with an empty internal byte array of length
52: * capacity. Size of the internal byte array will be set to 0.
53: * @param capacity length of internal byte array
54: * @stable ICU 2.8
55: */
56: public RawCollationKey(int capacity) {
57: bytes = new byte[capacity];
58: }
59:
60: /**
61: * RawCollationKey created, adopting bytes as the internal byte array.
62: * Size of the internal byte array will be set to 0.
63: * @param bytes byte array to be adopted by RawCollationKey
64: * @stable ICU 2.8
65: */
66: public RawCollationKey(byte[] bytes) {
67: this .bytes = bytes;
68: }
69:
70: /**
71: * Construct a RawCollationKey from a byte array and size.
72: * @param bytesToAdopt the byte array to adopt
73: * @param size the length of valid data in the byte array
74: * @throws IndexOutOfBoundsException if bytesToAdopt == null and size != 0, or
75: * size < 0, or size > bytesToAdopt.length.
76: * @stable ICU 2.8
77: */
78: public RawCollationKey(byte[] bytesToAdopt, int size) {
79: super (bytesToAdopt, size);
80: }
81:
82: /**
83: * Compare this RawCollationKey to another, which must not be null. This overrides
84: * the inherited implementation to ensure the returned values are -1, 0, or 1.
85: * @param rhs the RawCollationKey to compare to.
86: * @return -1, 0, or 1 as this compares less than, equal to, or
87: * greater than rhs.
88: * @throws ClassCastException if the other object is not a RawCollationKey.
89: * @draft ICU 3.2
90: * @provisional This API might change or be removed in a future release.
91: */
92: public int compareTo(Object rhs) {
93: int result = super .compareTo((RawCollationKey) rhs);
94: return result < 0 ? -1 : result == 0 ? 0 : 1;
95: }
96: }
|