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 123