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