ICU 4.8.1.1  4.8.1.1
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
coll.h
Go to the documentation of this file.
1 /*
2 ******************************************************************************
3 * Copyright (C) 1996-2011, International Business Machines *
4 * Corporation and others. All Rights Reserved. *
5 ******************************************************************************
6 */
7 
49 #ifndef COLL_H
50 #define COLL_H
51 
52 #include "unicode/utypes.h"
53 
54 #if !UCONFIG_NO_COLLATION
55 
56 #include "unicode/uobject.h"
57 #include "unicode/ucol.h"
58 #include "unicode/normlzr.h"
59 #include "unicode/locid.h"
60 #include "unicode/uniset.h"
61 #include "unicode/umisc.h"
62 #include "unicode/uiter.h"
63 #include "unicode/stringpiece.h"
64 
66 
67 class StringEnumeration;
68 
69 #if !UCONFIG_NO_SERVICE
70 
73 class CollatorFactory;
74 #endif
75 
79 class CollationKey;
80 
177 class U_I18N_API Collator : public UObject {
178 public:
179 
180  // Collator public enums -----------------------------------------------
181 
208  {
209  PRIMARY = 0,
210  SECONDARY = 1,
211  TERTIARY = 2,
212  QUATERNARY = 3,
213  IDENTICAL = 15
214  };
215 
227  {
228  LESS = -1,
229  EQUAL = 0,
230  GREATER = 1
231  };
232 
233  // Collator public destructor -----------------------------------------
234 
239  virtual ~Collator();
240 
241  // Collator public methods --------------------------------------------
242 
249  virtual UBool operator==(const Collator& other) const;
250 
257  virtual UBool operator!=(const Collator& other) const;
258 
264  virtual Collator* clone(void) const = 0;
265 
285  static Collator* U_EXPORT2 createInstance(UErrorCode& err);
286 
310  static Collator* U_EXPORT2 createInstance(const Locale& loc, UErrorCode& err);
311 
312 #ifdef U_USE_COLLATION_OBSOLETE_2_6
313 
336  static Collator *createInstance(const Locale &loc, UVersionInfo version, UErrorCode &err);
337 #endif
338 
350  virtual EComparisonResult compare(const UnicodeString& source,
351  const UnicodeString& target) const;
352 
365  virtual UCollationResult compare(const UnicodeString& source,
366  const UnicodeString& target,
367  UErrorCode &status) const = 0;
368 
381  virtual EComparisonResult compare(const UnicodeString& source,
382  const UnicodeString& target,
383  int32_t length) const;
384 
398  virtual UCollationResult compare(const UnicodeString& source,
399  const UnicodeString& target,
400  int32_t length,
401  UErrorCode &status) const = 0;
402 
418  virtual EComparisonResult compare(const UChar* source, int32_t sourceLength,
419  const UChar* target, int32_t targetLength)
420  const;
421 
438  virtual UCollationResult compare(const UChar* source, int32_t sourceLength,
439  const UChar* target, int32_t targetLength,
440  UErrorCode &status) const = 0;
441 
453  virtual UCollationResult compare(UCharIterator &sIter,
454  UCharIterator &tIter,
455  UErrorCode &status) const;
456 
470  virtual UCollationResult compareUTF8(const StringPiece &source,
471  const StringPiece &target,
472  UErrorCode &status) const;
473 
489  virtual CollationKey& getCollationKey(const UnicodeString& source,
490  CollationKey& key,
491  UErrorCode& status) const = 0;
492 
509  virtual CollationKey& getCollationKey(const UChar*source,
510  int32_t sourceLength,
511  CollationKey& key,
512  UErrorCode& status) const = 0;
517  virtual int32_t hashCode(void) const = 0;
518 
531  virtual const Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
532 
542  UBool greater(const UnicodeString& source, const UnicodeString& target)
543  const;
544 
554  UBool greaterOrEqual(const UnicodeString& source,
555  const UnicodeString& target) const;
556 
566  UBool equals(const UnicodeString& source, const UnicodeString& target) const;
567 
578  virtual ECollationStrength getStrength(void) const = 0;
579 
598  virtual void setStrength(ECollationStrength newStrength) = 0;
599 
613  virtual int32_t U_EXPORT2 getReorderCodes(int32_t *dest,
614  int32_t destCapacity,
615  UErrorCode& status) const;
616 
627  virtual void U_EXPORT2 setReorderCodes(const int32_t* reorderCodes,
628  int32_t reorderCodesLength,
629  UErrorCode& status) ;
630 
647  static int32_t U_EXPORT2 getEquivalentReorderCodes(int32_t reorderCode,
648  int32_t* dest,
649  int32_t destCapacity,
650  UErrorCode& status);
651 
661  static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
662  const Locale& displayLocale,
663  UnicodeString& name);
664 
673  static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
674  UnicodeString& name);
675 
687  static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
688 
697  static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
698 
708  static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
709 
721  static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
722 
739  static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* keyword, const Locale& locale,
740  UBool commonlyUsed, UErrorCode& status);
741 
769  static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
770  UBool& isAvailable, UErrorCode& status);
771 
772 #if !UCONFIG_NO_SERVICE
773 
781  static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
782 
790  static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
791 
802  static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
803 #endif /* UCONFIG_NO_SERVICE */
804 
810  virtual void getVersion(UVersionInfo info) const = 0;
811 
822  virtual UClassID getDynamicClassID(void) const = 0;
823 
832  virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
833  UErrorCode &status) = 0;
834 
843  virtual UColAttributeValue getAttribute(UColAttribute attr,
844  UErrorCode &status) = 0;
845 
856  virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
857 
867  virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0;
868 
876  virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0;
877 
884  virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
885 
895  virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
896 
897 
903  virtual Collator* safeClone(void) = 0;
904 
917  virtual int32_t getSortKey(const UnicodeString& source,
918  uint8_t* result,
919  int32_t resultLength) const = 0;
920 
936  virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
937  uint8_t*result, int32_t resultLength) const = 0;
938 
976  static int32_t U_EXPORT2 getBound(const uint8_t *source,
977  int32_t sourceLength,
978  UColBoundMode boundType,
979  uint32_t noOfLevels,
980  uint8_t *result,
981  int32_t resultLength,
982  UErrorCode &status);
983 
984 
985 protected:
986 
987  // Collator protected constructors -------------------------------------
988 
996  Collator();
997 
1009  Collator(UCollationStrength collationStrength,
1010  UNormalizationMode decompositionMode);
1011 
1017  Collator(const Collator& other);
1018 
1019  // Collator protected methods -----------------------------------------
1020 
1021 
1029  virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale);
1030 
1031 public:
1032 #if !UCONFIG_NO_SERVICE
1033 
1037  static UCollator* createUCollator(const char* loc, UErrorCode* status);
1038 #endif
1039 private:
1044  Collator& operator=(const Collator& other);
1045 
1046  friend class CFactory;
1047  friend class SimpleCFactory;
1048  friend class ICUCollatorFactory;
1049  friend class ICUCollatorService;
1050  static Collator* makeInstance(const Locale& desiredLocale,
1051  UErrorCode& status);
1052 
1053  // Collator private data members ---------------------------------------
1054 
1055  /*
1056  synwee : removed as attributes to be handled by child class
1057  UCollationStrength strength;
1058  Normalizer::EMode decmp;
1059  */
1060  /* This is useless information */
1061 /* static const UVersionInfo fVersion;*/
1062 };
1063 
1064 #if !UCONFIG_NO_SERVICE
1065 
1082 public:
1083 
1088  virtual ~CollatorFactory();
1089 
1097  virtual UBool visible(void) const;
1098 
1106  virtual Collator* createCollator(const Locale& loc) = 0;
1107 
1118  virtual UnicodeString& getDisplayName(const Locale& objectLocale,
1119  const Locale& displayLocale,
1120  UnicodeString& result);
1121 
1131  virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
1132 };
1133 #endif /* UCONFIG_NO_SERVICE */
1134 
1135 // Collator inline methods -----------------------------------------------
1136 
1138 
1139 #endif /* #if !UCONFIG_NO_COLLATION */
1140 
1141 #endif
uint8_t UVersionInfo[U_MAX_VERSION_LENGTH]
The binary form of a version on ICU APIs is an array of 4 uint8_t.
Definition: uversion.h:57
UCollationResult
UCOL_LESS is returned if source string is compared to be less than target string in the u_strcoll() m...
Definition: ucol.h:77
A mutable set of Unicode characters and multicharacter strings.
Definition: uniset.h:272
UNormalizationMode
Constants for normalization modes.
Definition: unorm.h:133
C++ API: Unicode Normalization.
A string-like object that points to a sized piece of memory.
Definition: stringpiece.h:52
C API:misc definitions.
C API for code unit iteration.
Definition: uiter.h:339
EComparisonResult
LESS is returned if source string is compared to be less than target string in the compare() method...
Definition: coll.h:226
U_EXPORT UBool operator==(const StringPiece &x, const StringPiece &y)
Global operator == for StringPiece.
UColAttribute
Attributes that collation service understands.
Definition: ucol.h:232
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:521
C++ API: StringPiece: Read-only byte string wrapper class.
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:131
Collation keys are generated by the Collator class.
Definition: sortkey.h:96
C API: Collator.
The Collator class performs locale-sensitive string comparison.
Definition: coll.h:177
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:188
#define U_EXPORT2
Definition: platform.h:314
C API: Unicode Character Iteration.
A factory, used with registerFactory, the creates multiple collators and provides display names for t...
Definition: coll.h:1081
UBool operator!=(const StringPiece &x, const StringPiece &y)
Global operator != for StringPiece.
Definition: stringpiece.h:218
C++ API: Common ICU base class UObject.
const void * URegistryKey
Opaque type returned by registerInstance, registerFactory and unregister for service registration...
Definition: umisc.h:55
uint16_t UChar
Define UChar to be wchar_t if that is 16 bits wide; always assumed to be unsigned.
Definition: umachine.h:325
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:132
UObject is the common ICU "boilerplate" class.
Definition: uobject.h:215
void * UClassID
UClassID is used to identify classes without using RTTI, since RTTI is not yet supported by all C++ c...
Definition: utypes.h:385
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers...
Definition: utypes.h:639
Base class for 'pure' C++ implementations of uenum api.
Definition: strenum.h:55
ULocDataLocaleType
Constants for *_getLocale() Allow user to select whether she wants information on requested...
Definition: uloc.h:336
UColBoundMode
enum that is taken by ucol_getBound API See below for explanation do not change the values assigned t...
Definition: ucol.h:933
C++ API: Locale ID object.
struct UCollator UCollator
structure representing a collator object instance
Definition: ucol.h:62
Basic definitions for ICU, for both C and C++ APIs.
UColAttributeValue
Enum containing attribute values for controling collation behavior.
Definition: ucol.h:93
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:181
virtual UClassID getDynamicClassID() const =0
ICU4C "poor man's RTTI", returns a UClassID for the actual ICU class.
ECollationStrength
Base letter represents a primary difference.
Definition: coll.h:207
int8_t UBool
The ICU boolean type.
Definition: umachine.h:228
C++ API: Unicode Set.