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