1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ******************************************************************************* 3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Copyright (C) 2001-2005, 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 "ucln_cmn.h" 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "uassert.h" 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define UNDERSCORE_CHAR ((UChar)0x005f) 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define AT_SIGN_CHAR ((UChar)64) 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define PERIOD_CHAR ((UChar)46) 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_BEGIN 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ****************************************************************** 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruSimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt, 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UnicodeString& locale, 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t kind, 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t coverage) 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru : LocaleKeyFactory(coverage) 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru , _obj(objToAdopt) 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru , _id(locale) 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru , _kind(kind) 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruSimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt, 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const Locale& locale, 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t kind, 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t coverage) 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru : LocaleKeyFactory(coverage) 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru , _obj(objToAdopt) 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru , _id() 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru , _kind(kind) 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru LocaleUtility::initNameFromLocale(locale, _id); 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruSimpleLocaleKeyFactory::~SimpleLocaleKeyFactory() 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete _obj; 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru _obj = NULL; 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUObject* 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruSimpleLocaleKeyFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_SUCCESS(status)) { 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const LocaleKey& lkey = (const LocaleKey&)key; 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (_kind == LocaleKey::KIND_ANY || _kind == lkey.kind()) { 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString keyID; 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru lkey.currentID(keyID); 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (_id == keyID) { 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return service->cloneInstance(_obj); 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return NULL; 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//UBool 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//SimpleLocaleKeyFactory::isSupportedID(const UnicodeString& id, UErrorCode& /* status */) const 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//{ 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// return id == _id; 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//} 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruSimpleLocaleKeyFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_SUCCESS(status)) { 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (_coverage & 0x1) { 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.remove(_id); 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.put(_id, (void*)this, status); 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifdef SERVICE_DEBUG 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUnicodeString& 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruSimpleLocaleKeyFactory::debug(UnicodeString& result) const 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru LocaleKeyFactory::debug(result); 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.append(", id: "); 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.append(_id); 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.append(", kind: "); 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.append(_kind); 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return result; 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUnicodeString& 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruSimpleLocaleKeyFactory::debugClass(UnicodeString& result) const 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return result.append("SimpleLocaleKeyFactory"); 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleLocaleKeyFactory) 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_END 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* !UCONFIG_NO_SERVICE */ 120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 123