|
1 /** |
|
2 ******************************************************************************* |
|
3 * Copyright (C) 2001-2005, International Business Machines Corporation and * |
|
4 * others. All Rights Reserved. * |
|
5 ******************************************************************************* |
|
6 * |
|
7 ******************************************************************************* |
|
8 */ |
|
9 #include "unicode/utypes.h" |
|
10 |
|
11 #if !UCONFIG_NO_SERVICE |
|
12 |
|
13 #include "unicode/resbund.h" |
|
14 #include "uresimp.h" |
|
15 #include "cmemory.h" |
|
16 #include "servloc.h" |
|
17 #include "ustrfmt.h" |
|
18 #include "uhash.h" |
|
19 #include "charstr.h" |
|
20 #include "ucln_cmn.h" |
|
21 #include "uassert.h" |
|
22 |
|
23 #define UNDERSCORE_CHAR ((UChar)0x005f) |
|
24 #define AT_SIGN_CHAR ((UChar)64) |
|
25 #define PERIOD_CHAR ((UChar)46) |
|
26 |
|
27 U_NAMESPACE_BEGIN |
|
28 |
|
29 /* |
|
30 ****************************************************************** |
|
31 */ |
|
32 |
|
33 SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt, |
|
34 const UnicodeString& locale, |
|
35 int32_t kind, |
|
36 int32_t coverage) |
|
37 : LocaleKeyFactory(coverage) |
|
38 , _obj(objToAdopt) |
|
39 , _id(locale) |
|
40 , _kind(kind) |
|
41 { |
|
42 } |
|
43 |
|
44 SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt, |
|
45 const Locale& locale, |
|
46 int32_t kind, |
|
47 int32_t coverage) |
|
48 : LocaleKeyFactory(coverage) |
|
49 , _obj(objToAdopt) |
|
50 , _id() |
|
51 , _kind(kind) |
|
52 { |
|
53 LocaleUtility::initNameFromLocale(locale, _id); |
|
54 } |
|
55 |
|
56 SimpleLocaleKeyFactory::~SimpleLocaleKeyFactory() |
|
57 { |
|
58 delete _obj; |
|
59 _obj = NULL; |
|
60 } |
|
61 |
|
62 UObject* |
|
63 SimpleLocaleKeyFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const |
|
64 { |
|
65 if (U_SUCCESS(status)) { |
|
66 const LocaleKey& lkey = (const LocaleKey&)key; |
|
67 if (_kind == LocaleKey::KIND_ANY || _kind == lkey.kind()) { |
|
68 UnicodeString keyID; |
|
69 lkey.currentID(keyID); |
|
70 if (_id == keyID) { |
|
71 return service->cloneInstance(_obj); |
|
72 } |
|
73 } |
|
74 } |
|
75 return NULL; |
|
76 } |
|
77 |
|
78 //UBool |
|
79 //SimpleLocaleKeyFactory::isSupportedID(const UnicodeString& id, UErrorCode& /* status */) const |
|
80 //{ |
|
81 // return id == _id; |
|
82 //} |
|
83 |
|
84 void |
|
85 SimpleLocaleKeyFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const |
|
86 { |
|
87 if (U_SUCCESS(status)) { |
|
88 if (_coverage & 0x1) { |
|
89 result.remove(_id); |
|
90 } else { |
|
91 result.put(_id, (void*)this, status); |
|
92 } |
|
93 } |
|
94 } |
|
95 |
|
96 #ifdef SERVICE_DEBUG |
|
97 UnicodeString& |
|
98 SimpleLocaleKeyFactory::debug(UnicodeString& result) const |
|
99 { |
|
100 LocaleKeyFactory::debug(result); |
|
101 result.append(", id: "); |
|
102 result.append(_id); |
|
103 result.append(", kind: "); |
|
104 result.append(_kind); |
|
105 return result; |
|
106 } |
|
107 |
|
108 UnicodeString& |
|
109 SimpleLocaleKeyFactory::debugClass(UnicodeString& result) const |
|
110 { |
|
111 return result.append("SimpleLocaleKeyFactory"); |
|
112 } |
|
113 #endif |
|
114 |
|
115 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleLocaleKeyFactory) |
|
116 |
|
117 U_NAMESPACE_END |
|
118 |
|
119 /* !UCONFIG_NO_SERVICE */ |
|
120 #endif |
|
121 |
|
122 |