• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
SimpleLocaleKeyFactory(UObject * objToAdopt,const UnicodeString & locale,int32_t kind,int32_t coverage)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 
SimpleLocaleKeyFactory(UObject * objToAdopt,const Locale & locale,int32_t kind,int32_t coverage)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 
~SimpleLocaleKeyFactory()56 SimpleLocaleKeyFactory::~SimpleLocaleKeyFactory()
57 {
58   delete _obj;
59   _obj = NULL;
60 }
61 
62 UObject*
create(const ICUServiceKey & key,const ICUService * service,UErrorCode & status) const63 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
updateVisibleIDs(Hashtable & result,UErrorCode & status) const85 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&
debug(UnicodeString & result) const98 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&
debugClass(UnicodeString & result) const109 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 
123