ICU 49.1.1  49.1.1
coll.h
Go to the documentation of this file.
1 /*
2 ******************************************************************************
3 * Copyright (C) 1996-2012, 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 
615  virtual int32_t U_EXPORT2 getReorderCodes(int32_t *dest,
616  int32_t destCapacity,
617  UErrorCode& status) const;
618 
633  virtual void U_EXPORT2 setReorderCodes(const int32_t* reorderCodes,
634  int32_t reorderCodesLength,
635  UErrorCode& status) ;
636 
655  static int32_t U_EXPORT2 getEquivalentReorderCodes(int32_t reorderCode,
656  int32_t* dest,
657  int32_t destCapacity,
658  UErrorCode& status);
659 
669  static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
670  const Locale& displayLocale,
671  UnicodeString& name);
672 
681  static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
682  UnicodeString& name);
683 
695  static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
696 
705  static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
706 
716  static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
717 
729  static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
730 
747  static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* keyword, const Locale& locale,
748  UBool commonlyUsed, UErrorCode& status);
749 
777  static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
778  UBool& isAvailable, UErrorCode& status);
779 
780 #if !UCONFIG_NO_SERVICE
781 
789  static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
790 
798  static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
799 
810  static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
811 #endif /* UCONFIG_NO_SERVICE */
812 
818  virtual void getVersion(UVersionInfo info) const = 0;
819 
830  virtual UClassID getDynamicClassID(void) const = 0;
831 
840  virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
841  UErrorCode &status) = 0;
842 
851  virtual UColAttributeValue getAttribute(UColAttribute attr,
852  UErrorCode &status) = 0;
853 
864  virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
865 
875  virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0;
876 
884  virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0;
885 
892  virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
893 
903  virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
904 
905 
911  virtual Collator* safeClone(void) = 0;
912 
925  virtual int32_t getSortKey(const UnicodeString& source,
926  uint8_t* result,
927  int32_t resultLength) const = 0;
928 
944  virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
945  uint8_t*result, int32_t resultLength) const = 0;
946 
984  static int32_t U_EXPORT2 getBound(const uint8_t *source,
985  int32_t sourceLength,
986  UColBoundMode boundType,
987  uint32_t noOfLevels,
988  uint8_t *result,
989  int32_t resultLength,
990  UErrorCode &status);
991 
992 
993 protected:
994 
995  // Collator protected constructors -------------------------------------
996 
1004  Collator();
1005 
1006 #ifndef U_HIDE_DEPRECATED_API
1007 
1018  Collator(UCollationStrength collationStrength,
1019  UNormalizationMode decompositionMode);
1020 #endif /* U_HIDE_DEPRECATED_API */
1021 
1027  Collator(const Collator& other);
1028 
1029  // Collator protected methods -----------------------------------------
1030 
1031 
1039  virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale);
1040 
1041 public:
1042 #if !UCONFIG_NO_SERVICE
1043 #ifndef U_HIDE_INTERNAL_API
1044 
1048  static UCollator* createUCollator(const char* loc, UErrorCode* status);
1049 #endif /* U_HIDE_INTERNAL_API */
1050 #endif
1051 
1075  virtual int32_t internalGetShortDefinitionString(const char *locale,
1076  char *buffer,
1077  int32_t capacity,
1078  UErrorCode &status) const;
1079 private:
1084  Collator& operator=(const Collator& other);
1085 
1086  friend class CFactory;
1087  friend class SimpleCFactory;
1088  friend class ICUCollatorFactory;
1089  friend class ICUCollatorService;
1090  static Collator* makeInstance(const Locale& desiredLocale,
1091  UErrorCode& status);
1092 
1093  // Collator private data members ---------------------------------------
1094 
1095  /*
1096  synwee : removed as attributes to be handled by child class
1097  UCollationStrength strength;
1098  Normalizer::EMode decmp;
1099  */
1100  /* This is useless information */
1101 /* static const UVersionInfo fVersion;*/
1102 };
1103 
1104 #if !UCONFIG_NO_SERVICE
1105 
1122 public:
1123 
1128  virtual ~CollatorFactory();
1129 
1137  virtual UBool visible(void) const;
1138 
1146  virtual Collator* createCollator(const Locale& loc) = 0;
1147 
1158  virtual UnicodeString& getDisplayName(const Locale& objectLocale,
1159  const Locale& displayLocale,
1160  UnicodeString& result);
1161 
1171  virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
1172 };
1173 #endif /* UCONFIG_NO_SERVICE */
1174 
1175 // Collator inline methods -----------------------------------------------
1176 
1178 
1179 #endif /* #if !UCONFIG_NO_COLLATION */
1180 
1181 #endif