OLD | NEW |
1 /* | 1 /* |
2 ******************************************************************************* | 2 ******************************************************************************* |
3 * | 3 * |
4 * Copyright (C) 2011-2013 International Business Machines | 4 * Copyright (C) 2011-2014 International Business Machines |
5 * Corporation and others. All Rights Reserved. | 5 * Corporation and others. All Rights Reserved. |
6 * | 6 * |
7 ******************************************************************************* | 7 ******************************************************************************* |
8 */ | 8 */ |
9 | 9 |
10 #ifndef INDEXCHARS_H | 10 #ifndef INDEXCHARS_H |
11 #define INDEXCHARS_H | 11 #define INDEXCHARS_H |
12 | 12 |
13 #include "unicode/utypes.h" | 13 #include "unicode/utypes.h" |
14 #include "unicode/uobject.h" | 14 #include "unicode/uobject.h" |
15 #include "unicode/locid.h" | 15 #include "unicode/locid.h" |
16 | 16 |
17 | 17 #if !UCONFIG_NO_COLLATION |
18 #if !UCONFIG_NO_COLLATION && !UCONFIG_NO_NORMALIZATION | |
19 | 18 |
20 /** | 19 /** |
21 * \file | 20 * \file |
22 * \brief C++ API: Index Characters | 21 * \brief C++ API: Index Characters |
23 */ | 22 */ |
24 | 23 |
25 U_CDECL_BEGIN | 24 U_CDECL_BEGIN |
26 | 25 |
27 /** | 26 /** |
28 * Constants for Alphabetic Index Label Types. | 27 * Constants for Alphabetic Index Label Types. |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 * </pre> | 178 * </pre> |
180 * | 179 * |
181 * <li>The client would put the name (and associated information) into its bucke
t for bucketIndex. The sort key sk is a | 180 * <li>The client would put the name (and associated information) into its bucke
t for bucketIndex. The sort key sk is a |
182 * sequence of bytes that can be compared with a binary compare, and produce the
right localized result.</li> | 181 * sequence of bytes that can be compared with a binary compare, and produce the
right localized result.</li> |
183 * </ul> | 182 * </ul> |
184 * | 183 * |
185 * @stable ICU 4.8 | 184 * @stable ICU 4.8 |
186 */ | 185 */ |
187 class U_I18N_API AlphabeticIndex: public UObject { | 186 class U_I18N_API AlphabeticIndex: public UObject { |
188 public: | 187 public: |
189 #ifdef U_HIDE_DRAFT_API | |
190 class Bucket; | |
191 #else | |
192 /** | 188 /** |
193 * An index "bucket" with a label string and type. | 189 * An index "bucket" with a label string and type. |
194 * It is referenced by getBucketIndex(), | 190 * It is referenced by getBucketIndex(), |
195 * and returned by ImmutableIndex.getBucket(). | 191 * and returned by ImmutableIndex.getBucket(). |
196 * | 192 * |
197 * The Bucket class is not intended for public subclassing. | 193 * The Bucket class is not intended for public subclassing. |
198 * @draft ICU 51 | 194 * @stable ICU 51 |
199 */ | 195 */ |
200 class U_I18N_API Bucket : public UObject { | 196 class U_I18N_API Bucket : public UObject { |
201 public: | 197 public: |
202 /** | 198 /** |
203 * Destructor. | 199 * Destructor. |
204 * @draft ICU 51 | 200 * @stable ICU 51 |
205 */ | 201 */ |
206 virtual ~Bucket(); | 202 virtual ~Bucket(); |
207 | 203 |
208 /** | 204 /** |
209 * Returns the label string. | 205 * Returns the label string. |
210 * | 206 * |
211 * @return the label string for the bucket | 207 * @return the label string for the bucket |
212 * @draft ICU 51 | 208 * @stable ICU 51 |
213 */ | 209 */ |
214 const UnicodeString &getLabel() const { return label_; } | 210 const UnicodeString &getLabel() const { return label_; } |
215 /** | 211 /** |
216 * Returns whether this bucket is a normal, underflow, overflow, or infl
ow bucket. | 212 * Returns whether this bucket is a normal, underflow, overflow, or infl
ow bucket. |
217 * | 213 * |
218 * @return the bucket label type | 214 * @return the bucket label type |
219 * @draft ICU 51 | 215 * @stable ICU 51 |
220 */ | 216 */ |
221 UAlphabeticIndexLabelType getLabelType() const { return labelType_; } | 217 UAlphabeticIndexLabelType getLabelType() const { return labelType_; } |
222 | 218 |
223 private: | 219 private: |
224 friend class AlphabeticIndex; | 220 friend class AlphabeticIndex; |
225 friend class BucketList; | 221 friend class BucketList; |
226 | 222 |
227 UnicodeString label_; | 223 UnicodeString label_; |
228 UnicodeString lowerBoundary_; | 224 UnicodeString lowerBoundary_; |
229 UAlphabeticIndexLabelType labelType_; | 225 UAlphabeticIndexLabelType labelType_; |
230 Bucket *displayBucket_; | 226 Bucket *displayBucket_; |
231 int32_t displayIndex_; | 227 int32_t displayIndex_; |
232 UVector *records_; // Records are owned by the inputList_ vector. | 228 UVector *records_; // Records are owned by the inputList_ vector. |
233 | 229 |
234 Bucket(const UnicodeString &label, // Parameter strings are copied. | 230 Bucket(const UnicodeString &label, // Parameter strings are copied. |
235 const UnicodeString &lowerBoundary, | 231 const UnicodeString &lowerBoundary, |
236 UAlphabeticIndexLabelType type); | 232 UAlphabeticIndexLabelType type); |
237 }; | 233 }; |
238 | 234 |
239 /** | 235 /** |
240 * Immutable, thread-safe version of AlphabeticIndex. | 236 * Immutable, thread-safe version of AlphabeticIndex. |
241 * This class provides thread-safe methods for bucketing, | 237 * This class provides thread-safe methods for bucketing, |
242 * and random access to buckets and their properties, | 238 * and random access to buckets and their properties, |
243 * but does not offer adding records to the index. | 239 * but does not offer adding records to the index. |
244 * | 240 * |
245 * The ImmutableIndex class is not intended for public subclassing. | 241 * The ImmutableIndex class is not intended for public subclassing. |
246 * | 242 * |
247 * @draft ICU 51 | 243 * @stable ICU 51 |
248 */ | 244 */ |
249 class U_I18N_API ImmutableIndex : public UObject { | 245 class U_I18N_API ImmutableIndex : public UObject { |
250 public: | 246 public: |
251 /** | 247 /** |
252 * Destructor. | 248 * Destructor. |
253 * @draft ICU 51 | 249 * @stable ICU 51 |
254 */ | 250 */ |
255 virtual ~ImmutableIndex(); | 251 virtual ~ImmutableIndex(); |
256 | 252 |
257 /** | 253 /** |
258 * Returns the number of index buckets and labels, including underflow/i
nflow/overflow. | 254 * Returns the number of index buckets and labels, including underflow/i
nflow/overflow. |
259 * | 255 * |
260 * @return the number of index buckets | 256 * @return the number of index buckets |
261 * @draft ICU 51 | 257 * @stable ICU 51 |
262 */ | 258 */ |
263 int32_t getBucketCount() const; | 259 int32_t getBucketCount() const; |
264 | 260 |
265 /** | 261 /** |
266 * Finds the index bucket for the given name and returns the number of t
hat bucket. | 262 * Finds the index bucket for the given name and returns the number of t
hat bucket. |
267 * Use getBucket() to get the bucket's properties. | 263 * Use getBucket() to get the bucket's properties. |
268 * | 264 * |
269 * @param name the string to be sorted into an index bucket | 265 * @param name the string to be sorted into an index bucket |
270 * @return the bucket number for the name | 266 * @return the bucket number for the name |
271 * @draft ICU 51 | 267 * @stable ICU 51 |
272 */ | 268 */ |
273 int32_t getBucketIndex(const UnicodeString &name, UErrorCode &errorCode)
const; | 269 int32_t getBucketIndex(const UnicodeString &name, UErrorCode &errorCode)
const; |
274 | 270 |
275 /** | 271 /** |
276 * Returns the index-th bucket. Returns NULL if the index is out of rang
e. | 272 * Returns the index-th bucket. Returns NULL if the index is out of rang
e. |
277 * | 273 * |
278 * @param index bucket number | 274 * @param index bucket number |
279 * @return the index-th bucket | 275 * @return the index-th bucket |
280 * @draft ICU 51 | 276 * @stable ICU 51 |
281 */ | 277 */ |
282 const Bucket *getBucket(int32_t index) const; | 278 const Bucket *getBucket(int32_t index) const; |
283 | 279 |
284 private: | 280 private: |
285 friend class AlphabeticIndex; | 281 friend class AlphabeticIndex; |
286 | 282 |
287 ImmutableIndex(BucketList *bucketList, Collator *collatorPrimaryOnly) | 283 ImmutableIndex(BucketList *bucketList, Collator *collatorPrimaryOnly) |
288 : buckets_(bucketList), collatorPrimaryOnly_(collatorPrimaryOnly
) {} | 284 : buckets_(bucketList), collatorPrimaryOnly_(collatorPrimaryOnly
) {} |
289 | 285 |
290 BucketList *buckets_; | 286 BucketList *buckets_; |
291 Collator *collatorPrimaryOnly_; | 287 Collator *collatorPrimaryOnly_; |
292 }; | 288 }; |
293 #endif /* U_HIDE_DRAFT_API */ | |
294 | 289 |
295 /** | 290 /** |
296 * Construct an AlphabeticIndex object for the specified locale. If the loc
ale's | 291 * Construct an AlphabeticIndex object for the specified locale. If the loc
ale's |
297 * data does not include index characters, a set of them will be | 292 * data does not include index characters, a set of them will be |
298 * synthesized based on the locale's exemplar characters. The locale | 293 * synthesized based on the locale's exemplar characters. The locale |
299 * determines the sorting order for both the index characters and the | 294 * determines the sorting order for both the index characters and the |
300 * user item names appearing under each Index character. | 295 * user item names appearing under each Index character. |
301 * | 296 * |
302 * @param locale the desired locale. | 297 * @param locale the desired locale. |
303 * @param status Error code, will be set with the reason if the construction | 298 * @param status Error code, will be set with the reason if the construction |
304 * of the AlphabeticIndex object fails. | 299 * of the AlphabeticIndex object fails. |
305 * @stable ICU 4.8 | 300 * @stable ICU 4.8 |
306 */ | 301 */ |
307 AlphabeticIndex(const Locale &locale, UErrorCode &status); | 302 AlphabeticIndex(const Locale &locale, UErrorCode &status); |
308 | 303 |
309 #ifndef U_HIDE_DRAFT_API | |
310 /** | 304 /** |
311 * Construct an AlphabeticIndex that uses a specific collator. | 305 * Construct an AlphabeticIndex that uses a specific collator. |
312 * | 306 * |
313 * The index will be created with no labels; the addLabels() function must b
e called | 307 * The index will be created with no labels; the addLabels() function must b
e called |
314 * after creation to add the desired labels to the index. | 308 * after creation to add the desired labels to the index. |
315 * | 309 * |
316 * The index adopts the collator, and is responsible for deleting it. | 310 * The index adopts the collator, and is responsible for deleting it. |
317 * The caller should make no further use of the collator after creating the
index. | 311 * The caller should make no further use of the collator after creating the
index. |
318 * | 312 * |
319 * @param collator The collator to use to order the contents of this index. | 313 * @param collator The collator to use to order the contents of this index. |
320 * @param status Error code, will be set with the reason if the | 314 * @param status Error code, will be set with the reason if the |
321 * operation fails. | 315 * operation fails. |
322 * @draft ICU 51 | 316 * @stable ICU 51 |
323 */ | 317 */ |
324 AlphabeticIndex(RuleBasedCollator *collator, UErrorCode &status); | 318 AlphabeticIndex(RuleBasedCollator *collator, UErrorCode &status); |
325 #endif /* U_HIDE_DRAFT_API */ | |
326 | 319 |
327 /** | 320 /** |
328 * Add Labels to this Index. The labels are additions to those | 321 * Add Labels to this Index. The labels are additions to those |
329 * that are already in the index; they do not replace the existing | 322 * that are already in the index; they do not replace the existing |
330 * ones. | 323 * ones. |
331 * @param additions The additional characters to add to the index, such as A
-Z. | 324 * @param additions The additional characters to add to the index, such as A
-Z. |
332 * @param status Error code, will be set with the reason if the | 325 * @param status Error code, will be set with the reason if the |
333 * operation fails. | 326 * operation fails. |
334 * @return this, for chaining | 327 * @return this, for chaining |
335 * @stable ICU 4.8 | 328 * @stable ICU 4.8 |
(...skipping 14 matching lines...) Expand all Loading... |
350 * @stable ICU 4.8 | 343 * @stable ICU 4.8 |
351 */ | 344 */ |
352 virtual AlphabeticIndex &addLabels(const Locale &locale, UErrorCode &status)
; | 345 virtual AlphabeticIndex &addLabels(const Locale &locale, UErrorCode &status)
; |
353 | 346 |
354 /** | 347 /** |
355 * Destructor | 348 * Destructor |
356 * @stable ICU 4.8 | 349 * @stable ICU 4.8 |
357 */ | 350 */ |
358 virtual ~AlphabeticIndex(); | 351 virtual ~AlphabeticIndex(); |
359 | 352 |
360 #ifndef U_HIDE_DRAFT_API | |
361 /** | 353 /** |
362 * Builds an immutable, thread-safe version of this instance, without data r
ecords. | 354 * Builds an immutable, thread-safe version of this instance, without data r
ecords. |
363 * | 355 * |
364 * @return an immutable index instance | 356 * @return an immutable index instance |
365 * @draft ICU 51 | 357 * @stable ICU 51 |
366 */ | 358 */ |
367 ImmutableIndex *buildImmutableIndex(UErrorCode &errorCode); | 359 ImmutableIndex *buildImmutableIndex(UErrorCode &errorCode); |
368 #endif /* U_HIDE_DRAFT_API */ | |
369 | 360 |
370 /** | 361 /** |
371 * Get the Collator that establishes the ordering of the items in this index
. | 362 * Get the Collator that establishes the ordering of the items in this index
. |
372 * Ownership of the collator remains with the AlphabeticIndex instance. | 363 * Ownership of the collator remains with the AlphabeticIndex instance. |
373 * | 364 * |
374 * The returned collator is a reference to the internal collator used by thi
s | 365 * The returned collator is a reference to the internal collator used by thi
s |
375 * index. It may be safely used to compare the names of items or to get | 366 * index. It may be safely used to compare the names of items or to get |
376 * sort keys for names. However if any settings need to be changed, | 367 * sort keys for names. However if any settings need to be changed, |
377 * or other non-const methods called, a cloned copy must be made first. | 368 * or other non-const methods called, a cloned copy must be made first. |
378 * | 369 * |
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
750 UnicodeString inflowLabel_; | 741 UnicodeString inflowLabel_; |
751 UnicodeString overflowLabel_; | 742 UnicodeString overflowLabel_; |
752 UnicodeString underflowLabel_; | 743 UnicodeString underflowLabel_; |
753 UnicodeString overflowComparisonString_; | 744 UnicodeString overflowComparisonString_; |
754 | 745 |
755 UnicodeString emptyString_; | 746 UnicodeString emptyString_; |
756 }; | 747 }; |
757 | 748 |
758 U_NAMESPACE_END | 749 U_NAMESPACE_END |
759 | 750 |
760 #endif /* UCONFIG_NO_COLLATION / UCONFIG_NO_NORMALIZATION */ | 751 #endif // !UCONFIG_NO_COLLATION |
761 #endif | 752 #endif |
OLD | NEW |