/src/icu/source/common/servrbf.cpp
Line  | Count  | Source (jump to first uncovered line)  | 
1  |  | // © 2016 and later: Unicode, Inc. and others.  | 
2  |  | // License & terms of use: http://www.unicode.org/copyright.html  | 
3  |  | /**  | 
4  |  |  *******************************************************************************  | 
5  |  |  * Copyright (C) 2001-2014, International Business Machines Corporation and    *  | 
6  |  |  * others. All Rights Reserved.                                                *  | 
7  |  |  *******************************************************************************  | 
8  |  |  *  | 
9  |  |  *******************************************************************************  | 
10  |  |  */  | 
11  |  | #include "unicode/utypes.h"  | 
12  |  |  | 
13  |  | #if !UCONFIG_NO_SERVICE  | 
14  |  |  | 
15  |  | #include "unicode/resbund.h"  | 
16  |  | #include "uresimp.h"  | 
17  |  | #include "cmemory.h"  | 
18  |  | #include "servloc.h"  | 
19  |  | #include "ustrfmt.h"  | 
20  |  | #include "uhash.h"  | 
21  |  | #include "charstr.h"  | 
22  |  | #include "ucln_cmn.h"  | 
23  |  | #include "uassert.h"  | 
24  |  |  | 
25  |  | #define UNDERSCORE_CHAR ((UChar)0x005f)  | 
26  |  | #define AT_SIGN_CHAR    ((UChar)64)  | 
27  |  | #define PERIOD_CHAR     ((UChar)46)  | 
28  |  |  | 
29  |  | U_NAMESPACE_BEGIN  | 
30  |  |  | 
31  |  | ICUResourceBundleFactory::ICUResourceBundleFactory()  | 
32  | 0  |   : LocaleKeyFactory(VISIBLE)  | 
33  | 0  |   , _bundleName()  | 
34  | 0  | { | 
35  | 0  | }  | 
36  |  |  | 
37  |  | ICUResourceBundleFactory::ICUResourceBundleFactory(const UnicodeString& bundleName)  | 
38  | 0  |   : LocaleKeyFactory(VISIBLE)  | 
39  | 0  |   , _bundleName(bundleName)  | 
40  | 0  | { | 
41  | 0  | }  | 
42  |  |  | 
43  | 0  | ICUResourceBundleFactory::~ICUResourceBundleFactory() {} | 
44  |  |  | 
45  |  | const Hashtable*  | 
46  |  | ICUResourceBundleFactory::getSupportedIDs(UErrorCode& status) const  | 
47  | 0  | { | 
48  | 0  |     if (U_SUCCESS(status)) { | 
49  | 0  |         return LocaleUtility::getAvailableLocaleNames(_bundleName);  | 
50  | 0  |     }  | 
51  | 0  |     return NULL;  | 
52  | 0  | }  | 
53  |  |  | 
54  |  | UObject*  | 
55  |  | ICUResourceBundleFactory::handleCreate(const Locale& loc, int32_t /* kind */, const ICUService* /* service */, UErrorCode& status) const  | 
56  | 0  | { | 
57  | 0  |     if (U_SUCCESS(status)) { | 
58  |  |         // _bundleName is a package name  | 
59  |  |         // and should only contain invariant characters  | 
60  |  |                 // ??? is it always true that the max length of the bundle name is 19?  | 
61  |  |                 // who made this change? -- dlf  | 
62  | 0  |         char pkg[20];  | 
63  | 0  |         int32_t length;  | 
64  | 0  |         length=_bundleName.extract(0, INT32_MAX, pkg, (int32_t)sizeof(pkg), US_INV);  | 
65  | 0  |         if(length>=(int32_t)sizeof(pkg)) { | 
66  | 0  |             return NULL;  | 
67  | 0  |         }  | 
68  | 0  |         return new ResourceBundle(pkg, loc, status);  | 
69  | 0  |     }  | 
70  | 0  |     return NULL;  | 
71  | 0  | }  | 
72  |  |  | 
73  |  | #ifdef SERVICE_DEBUG  | 
74  |  | UnicodeString&  | 
75  |  | ICUResourceBundleFactory::debug(UnicodeString& result) const  | 
76  |  | { | 
77  |  |     LocaleKeyFactory::debug(result);  | 
78  |  |     result.append((UnicodeString)", bundle: ");  | 
79  |  |     return result.append(_bundleName);  | 
80  |  | }  | 
81  |  |  | 
82  |  | UnicodeString&  | 
83  |  | ICUResourceBundleFactory::debugClass(UnicodeString& result) const  | 
84  |  | { | 
85  |  |     return result.append((UnicodeString)"ICUResourceBundleFactory");  | 
86  |  | }  | 
87  |  | #endif  | 
88  |  |  | 
89  |  | UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ICUResourceBundleFactory)  | 
90  |  |  | 
91  |  | U_NAMESPACE_END  | 
92  |  |  | 
93  |  | /* !UCONFIG_NO_SERVICE */  | 
94  |  | #endif  | 
95  |  |  | 
96  |  |  |