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