| // Copyright (C) 2016 and later: Unicode, Inc. and others. |
| // License & terms of use: http://www.unicode.org/copyright.html |
| /** |
| ******************************************************************************* |
| * Copyright (C) 2001-2014, International Business Machines Corporation and * |
| * others. All Rights Reserved. * |
| ******************************************************************************* |
| * |
| ******************************************************************************* |
| */ |
| #include "unicode/utypes.h" |
| |
| #if !UCONFIG_NO_SERVICE |
| |
| #include "unicode/resbund.h" |
| #include "uresimp.h" |
| #include "cmemory.h" |
| #include "servloc.h" |
| #include "ustrfmt.h" |
| #include "uhash.h" |
| #include "charstr.h" |
| #include "uassert.h" |
| |
| #define UNDERSCORE_CHAR ((UChar)0x005f) |
| #define AT_SIGN_CHAR ((UChar)64) |
| #define PERIOD_CHAR ((UChar)46) |
| |
| U_NAMESPACE_BEGIN |
| |
| /* |
| ****************************************************************** |
| */ |
| |
| SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt, |
| const UnicodeString& locale, |
| int32_t kind, |
| int32_t coverage) |
| : LocaleKeyFactory(coverage) |
| , _obj(objToAdopt) |
| , _id(locale) |
| , _kind(kind) |
| { |
| } |
| |
| SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt, |
| const Locale& locale, |
| int32_t kind, |
| int32_t coverage) |
| : LocaleKeyFactory(coverage) |
| , _obj(objToAdopt) |
| , _id() |
| , _kind(kind) |
| { |
| LocaleUtility::initNameFromLocale(locale, _id); |
| } |
| |
| SimpleLocaleKeyFactory::~SimpleLocaleKeyFactory() |
| { |
| delete _obj; |
| _obj = NULL; |
| } |
| |
| UObject* |
| SimpleLocaleKeyFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const |
| { |
| if (U_SUCCESS(status)) { |
| const LocaleKey& lkey = (const LocaleKey&)key; |
| if (_kind == LocaleKey::KIND_ANY || _kind == lkey.kind()) { |
| UnicodeString keyID; |
| lkey.currentID(keyID); |
| if (_id == keyID) { |
| return service->cloneInstance(_obj); |
| } |
| } |
| } |
| return NULL; |
| } |
| |
| //UBool |
| //SimpleLocaleKeyFactory::isSupportedID(const UnicodeString& id, UErrorCode& /* status */) const |
| //{ |
| // return id == _id; |
| //} |
| |
| void |
| SimpleLocaleKeyFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const |
| { |
| if (U_SUCCESS(status)) { |
| if (_coverage & 0x1) { |
| result.remove(_id); |
| } else { |
| result.put(_id, (void*)this, status); |
| } |
| } |
| } |
| |
| #ifdef SERVICE_DEBUG |
| UnicodeString& |
| SimpleLocaleKeyFactory::debug(UnicodeString& result) const |
| { |
| LocaleKeyFactory::debug(result); |
| result.append((UnicodeString)", id: "); |
| result.append(_id); |
| result.append((UnicodeString)", kind: "); |
| result.append(_kind); |
| return result; |
| } |
| |
| UnicodeString& |
| SimpleLocaleKeyFactory::debugClass(UnicodeString& result) const |
| { |
| return result.append((UnicodeString)"SimpleLocaleKeyFactory"); |
| } |
| #endif |
| |
| UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleLocaleKeyFactory) |
| |
| U_NAMESPACE_END |
| |
| /* !UCONFIG_NO_SERVICE */ |
| #endif |
| |
| |