Index: source/i18n/collationtailoring.h |
diff --git a/source/i18n/collationtailoring.h b/source/i18n/collationtailoring.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2a9b3d566f687a9c643f70d47ce85aa15773f3fc |
--- /dev/null |
+++ b/source/i18n/collationtailoring.h |
@@ -0,0 +1,109 @@ |
+/* |
+******************************************************************************* |
+* Copyright (C) 2013-2014, International Business Machines |
+* Corporation and others. All Rights Reserved. |
+******************************************************************************* |
+* collationtailoring.h |
+* |
+* created on: 2013mar12 |
+* created by: Markus W. Scherer |
+*/ |
+ |
+#ifndef __COLLATIONTAILORING_H__ |
+#define __COLLATIONTAILORING_H__ |
+ |
+#include "unicode/utypes.h" |
+ |
+#if !UCONFIG_NO_COLLATION |
+ |
+#include "unicode/locid.h" |
+#include "unicode/unistr.h" |
+#include "unicode/uversion.h" |
+#include "collationsettings.h" |
+#include "uhash.h" |
+#include "umutex.h" |
+ |
+struct UDataMemory; |
+struct UResourceBundle; |
+struct UTrie2; |
+ |
+U_NAMESPACE_BEGIN |
+ |
+struct CollationData; |
+ |
+class UnicodeSet; |
+ |
+/** |
+ * Collation tailoring data & settings. |
+ * This is a container of values for a collation tailoring |
+ * built from rules or deserialized from binary data. |
+ * |
+ * It is logically immutable: Do not modify its values. |
+ * The fields are public for convenience. |
+ * |
+ * It is shared, reference-counted, and auto-deleted; see SharedObject. |
+ */ |
+struct U_I18N_API CollationTailoring : public SharedObject { |
+ CollationTailoring(const CollationSettings *baseSettings); |
+ virtual ~CollationTailoring(); |
+ |
+ /** |
+ * Returns TRUE if the constructor could not initialize properly. |
+ */ |
+ UBool isBogus() { return settings == NULL; } |
+ |
+ UBool ensureOwnedData(UErrorCode &errorCode); |
+ |
+ static void makeBaseVersion(const UVersionInfo ucaVersion, UVersionInfo version); |
+ void setVersion(const UVersionInfo baseVersion, const UVersionInfo rulesVersion); |
+ int32_t getUCAVersion() const; |
+ |
+ // data for sorting etc. |
+ const CollationData *data; // == base data or ownedData |
+ const CollationSettings *settings; // reference-counted |
+ UnicodeString rules; |
+ // The locale is bogus when built from rules or constructed from a binary blob. |
+ // It can then be set by the service registration code which is thread-safe. |
+ mutable Locale actualLocale; |
+ // UCA version u.v.w & rules version r.s.t.q: |
+ // version[0]: builder version (runtime version is mixed in at runtime) |
+ // version[1]: bits 7..3=u, bits 2..0=v |
+ // version[2]: bits 7..6=w, bits 5..0=r |
+ // version[3]= (s<<5)+(s>>3)+t+(q<<4)+(q>>4) |
+ UVersionInfo version; |
+ |
+ // owned objects |
+ CollationData *ownedData; |
+ UObject *builder; |
+ UDataMemory *memory; |
+ UResourceBundle *bundle; |
+ UTrie2 *trie; |
+ UnicodeSet *unsafeBackwardSet; |
+ mutable UHashtable *maxExpansions; |
+ mutable UInitOnce maxExpansionsInitOnce; |
+ |
+private: |
+ /** |
+ * No copy constructor: A CollationTailoring cannot be copied. |
+ * It is immutable, and the data trie cannot be copied either. |
+ */ |
+ CollationTailoring(const CollationTailoring &other); |
+}; |
+ |
+struct CollationCacheEntry : public SharedObject { |
+ CollationCacheEntry(const Locale &loc, const CollationTailoring *t) |
+ : validLocale(loc), tailoring(t) { |
+ if(t != NULL) { |
+ t->addRef(); |
+ } |
+ } |
+ ~CollationCacheEntry(); |
+ |
+ Locale validLocale; |
+ const CollationTailoring *tailoring; |
+}; |
+ |
+U_NAMESPACE_END |
+ |
+#endif // !UCONFIG_NO_COLLATION |
+#endif // __COLLATIONTAILORING_H__ |