servslkf.cpp revision ac04d0bbe12b3ef54518635711412f178cb4d16
17ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes/** 27ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes ******************************************************************************* 37ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes * Copyright (C) 2001-2005, International Business Machines Corporation and * 47ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes * others. All Rights Reserved. * 57ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes ******************************************************************************* 67ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes * 77ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes ******************************************************************************* 87ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes */ 97ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes#include "unicode/utypes.h" 107ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes 117ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes#if !UCONFIG_NO_SERVICE 127ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes 137ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes#include "unicode/resbund.h" 147ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes#include "uresimp.h" 157ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes#include "cmemory.h" 167ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes#include "servloc.h" 17eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes#include "ustrfmt.h" 18eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes#include "uhash.h" 1995a935415d44903b28326424beb4db5c013ef089Brian Carlstrom#include "charstr.h" 209837939678bb5dcba178e5fb00ed59b5d14c8d9bIan Rogers#include "ucln_cmn.h" 2162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers#include "uassert.h" 22f6a1e1e44b94221c4e6b063b36921c712a33910bElliott Hughes 234f6ad8ab428038129b2d0d6c40b7fd625cca15e1Ian Rogers#define UNDERSCORE_CHAR ((UChar)0x005f) 24e810452722ac83b294d1f7aa80bdd88e547d5af0Brian Carlstrom#define AT_SIGN_CHAR ((UChar)64) 251d54e73444e017d3a65234e0f193846f3e27472bIan Rogers#define PERIOD_CHAR ((UChar)46) 2682353313bbe00d033b6733535d0dcd6f56c36d8dMathieu Chartier 271d54e73444e017d3a65234e0f193846f3e27472bIan RogersU_NAMESPACE_BEGIN 2895a935415d44903b28326424beb4db5c013ef089Brian Carlstrom 2995a935415d44903b28326424beb4db5c013ef089Brian Carlstrom/* 30e810452722ac83b294d1f7aa80bdd88e547d5af0Brian Carlstrom ****************************************************************** 317ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes */ 32e810452722ac83b294d1f7aa80bdd88e547d5af0Brian Carlstrom 334f6ad8ab428038129b2d0d6c40b7fd625cca15e1Ian RogersSimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt, 34e810452722ac83b294d1f7aa80bdd88e547d5af0Brian Carlstrom const UnicodeString& locale, 352dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers int32_t kind, 36893263b7d5bc2ca43a91ecb8071867f5134fc60aMathieu Chartier int32_t coverage) 371eb512d33f94d1dd7ea38263307ba0f7a0dfa653Ian Rogers : LocaleKeyFactory(coverage) 3800f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers , _obj(objToAdopt) 397ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes , _id(locale) 4088c5c355fc3d881f905564911d746b2313d5fc89Elliott Hughes , _kind(kind) 417ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes{ 427ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes} 437ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes 447ede61eceed2f8da14a4fff05c57c748c160d57fElliott HughesSimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt, 450512f02dd6623c0870c11fbf3274d7462f732136Elliott Hughes const Locale& locale, 46b3bd5f07884f5a1f2b84224363b1372d7c28d447Elliott Hughes int32_t kind, 477ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes int32_t coverage) 487ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes : LocaleKeyFactory(coverage) 490512f02dd6623c0870c11fbf3274d7462f732136Elliott Hughes , _obj(objToAdopt) 50b3bd5f07884f5a1f2b84224363b1372d7c28d447Elliott Hughes , _id() 517ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes , _kind(kind) 527ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes{ 530512f02dd6623c0870c11fbf3274d7462f732136Elliott Hughes LocaleUtility::initNameFromLocale(locale, _id); 547ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes} 557ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes 560512f02dd6623c0870c11fbf3274d7462f732136Elliott HughesSimpleLocaleKeyFactory::~SimpleLocaleKeyFactory() 577ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes{ 587ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes delete _obj; 59590fee9e8972f872301c2d16a575d579ee564beeMathieu Chartier _obj = NULL; 60e810452722ac83b294d1f7aa80bdd88e547d5af0Brian Carlstrom} 611eb512d33f94d1dd7ea38263307ba0f7a0dfa653Ian Rogers 62f9c612f2e657adb0764285256b228622e0789254Ian RogersUObject* 63f9c612f2e657adb0764285256b228622e0789254Ian RogersSimpleLocaleKeyFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const 64f9c612f2e657adb0764285256b228622e0789254Ian Rogers{ 65f9c612f2e657adb0764285256b228622e0789254Ian Rogers if (U_SUCCESS(status)) { 662dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers const LocaleKey& lkey = (const LocaleKey&)key; 679837939678bb5dcba178e5fb00ed59b5d14c8d9bIan Rogers if (_kind == LocaleKey::KIND_ANY || _kind == lkey.kind()) { 6862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers UnicodeString keyID; 699837939678bb5dcba178e5fb00ed59b5d14c8d9bIan Rogers lkey.currentID(keyID); 707ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes if (_id == keyID) { 719837939678bb5dcba178e5fb00ed59b5d14c8d9bIan Rogers return service->cloneInstance(_obj); 72b74cd29802f364b4cec88f4913fa38ade26b8fabMathieu Chartier } 73b74cd29802f364b4cec88f4913fa38ade26b8fabMathieu Chartier } 749837939678bb5dcba178e5fb00ed59b5d14c8d9bIan Rogers } 759837939678bb5dcba178e5fb00ed59b5d14c8d9bIan Rogers return NULL; 769837939678bb5dcba178e5fb00ed59b5d14c8d9bIan Rogers} 779837939678bb5dcba178e5fb00ed59b5d14c8d9bIan Rogers 78cbb2d20bea2861f244da2e2318d8c088300a3710Mathieu Chartier//UBool 796fac447555dc94a935b78198479cce645c837b89Ian Rogers//SimpleLocaleKeyFactory::isSupportedID(const UnicodeString& id, UErrorCode& /* status */) const 8000f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers//{ 817ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes// return id == _id; 827ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes//} 83f9c612f2e657adb0764285256b228622e0789254Ian Rogers 84f9c612f2e657adb0764285256b228622e0789254Ian Rogersvoid 85f9c612f2e657adb0764285256b228622e0789254Ian RogersSimpleLocaleKeyFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const 86f9c612f2e657adb0764285256b228622e0789254Ian Rogers{ 87f9c612f2e657adb0764285256b228622e0789254Ian Rogers if (U_SUCCESS(status)) { 88f9c612f2e657adb0764285256b228622e0789254Ian Rogers if (_coverage & 0x1) { 89f9c612f2e657adb0764285256b228622e0789254Ian Rogers result.remove(_id); 90f9c612f2e657adb0764285256b228622e0789254Ian Rogers } else { 91f9c612f2e657adb0764285256b228622e0789254Ian Rogers result.put(_id, (void*)this, status); 92f9c612f2e657adb0764285256b228622e0789254Ian Rogers } 93f9c612f2e657adb0764285256b228622e0789254Ian Rogers } 94f9c612f2e657adb0764285256b228622e0789254Ian Rogers} 95f9c612f2e657adb0764285256b228622e0789254Ian Rogers 9695a935415d44903b28326424beb4db5c013ef089Brian Carlstrom#ifdef SERVICE_DEBUG 9795a935415d44903b28326424beb4db5c013ef089Brian CarlstromUnicodeString& 98f9c612f2e657adb0764285256b228622e0789254Ian RogersSimpleLocaleKeyFactory::debug(UnicodeString& result) const 99f9c612f2e657adb0764285256b228622e0789254Ian Rogers{ 100f9c612f2e657adb0764285256b228622e0789254Ian Rogers LocaleKeyFactory::debug(result); 101f9c612f2e657adb0764285256b228622e0789254Ian Rogers result.append(", id: "); 102f9c612f2e657adb0764285256b228622e0789254Ian Rogers result.append(_id); 103f9c612f2e657adb0764285256b228622e0789254Ian Rogers result.append(", kind: "); 104f9c612f2e657adb0764285256b228622e0789254Ian Rogers result.append(_kind); 105f9c612f2e657adb0764285256b228622e0789254Ian Rogers return result; 106f9c612f2e657adb0764285256b228622e0789254Ian Rogers} 107f9c612f2e657adb0764285256b228622e0789254Ian Rogers 1080512f02dd6623c0870c11fbf3274d7462f732136Elliott HughesUnicodeString& 109a15e67d5ee5aa9615596cee2be42c2b2caf128c6Ian RogersSimpleLocaleKeyFactory::debugClass(UnicodeString& result) const 110a15e67d5ee5aa9615596cee2be42c2b2caf128c6Ian Rogers{ 111a15e67d5ee5aa9615596cee2be42c2b2caf128c6Ian Rogers return result.append("SimpleLocaleKeyFactory"); 1121eb512d33f94d1dd7ea38263307ba0f7a0dfa653Ian Rogers} 1132dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers#endif 1147ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes 11562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian RogersUOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleLocaleKeyFactory) 1167ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes 1177ede61eceed2f8da14a4fff05c57c748c160d57fElliott HughesU_NAMESPACE_END 118590fee9e8972f872301c2d16a575d579ee564beeMathieu Chartier 119590fee9e8972f872301c2d16a575d579ee564beeMathieu Chartier/* !UCONFIG_NO_SERVICE */ 120590fee9e8972f872301c2d16a575d579ee564beeMathieu Chartier#endif 121590fee9e8972f872301c2d16a575d579ee564beeMathieu Chartier 122ef7d42fca18c16fbaf103822ad16f23246e2905dIan Rogers 1237ede61eceed2f8da14a4fff05c57c748c160d57fElliott Hughes