]>
git.saurik.com Git - apple/icu.git/blob - icuSources/tools/ctestfw/datamap.cpp
1 /********************************************************************
3 * Copyright (c) 2002-2006, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 ********************************************************************/
7 /* Created by weiv 05/09/2002 */
9 #include "unicode/datamap.h"
10 #include "unicode/resbund.h"
15 DataMap::utoi(const UnicodeString
&s
) const
18 const UChar
*u
= s
.getBuffer();
19 int32_t len
= s
.length();
20 u_UCharsToChars(u
, ch
, len
);
21 ch
[len
] = 0; /* include terminating \0 */
27 deleteResBund(void *obj
) {
28 delete (ResourceBundle
*)obj
;
33 RBDataMap::~RBDataMap()
38 RBDataMap::RBDataMap()
40 UErrorCode status
= U_ZERO_ERROR
;
41 fData
= new Hashtable(TRUE
, status
);
42 fData
->setValueDeleter(deleteResBund
);
45 // init from table resource
46 // will put stuff in hashtable according to
48 RBDataMap::RBDataMap(UResourceBundle
*data
, UErrorCode
&status
)
50 fData
= new Hashtable(TRUE
, status
);
51 fData
->setValueDeleter(deleteResBund
);
55 // init from headers and resource
56 // with checking the whether the size of resource matches
58 RBDataMap::RBDataMap(UResourceBundle
*headers
, UResourceBundle
*data
, UErrorCode
&status
)
60 fData
= new Hashtable(TRUE
, status
);
61 fData
->setValueDeleter(deleteResBund
);
62 init(headers
, data
, status
);
66 void RBDataMap::init(UResourceBundle
*data
, UErrorCode
&status
) {
69 UResourceBundle
*t
= NULL
;
70 for(i
= 0; i
< ures_getSize(data
); i
++) {
71 t
= ures_getByIndex(data
, i
, t
, &status
);
72 fData
->put(UnicodeString(ures_getKey(t
), -1, US_INV
), new ResourceBundle(t
, status
), status
);
77 void RBDataMap::init(UResourceBundle
*headers
, UResourceBundle
*data
, UErrorCode
&status
)
81 UResourceBundle
*t
= NULL
;
82 const UChar
*key
= NULL
;
84 if(ures_getSize(headers
) == ures_getSize(data
)) {
85 for(i
= 0; i
< ures_getSize(data
); i
++) {
86 t
= ures_getByIndex(data
, i
, t
, &status
);
87 key
= ures_getStringByIndex(headers
, i
, &keyLen
, &status
);
88 fData
->put(UnicodeString(key
, keyLen
), new ResourceBundle(t
, status
), status
);
92 status
= U_INVALID_FORMAT_ERROR
;
97 const ResourceBundle
*RBDataMap::getItem(const char* key
, UErrorCode
&status
) const
99 if(U_FAILURE(status
)) {
103 UnicodeString
hashKey(key
, -1, US_INV
);
104 const ResourceBundle
*r
= (ResourceBundle
*)fData
->get(hashKey
);
108 status
= U_MISSING_RESOURCE_ERROR
;
113 const UnicodeString
RBDataMap::getString(const char* key
, UErrorCode
&status
) const
115 const ResourceBundle
*r
= getItem(key
, status
);
116 if(U_SUCCESS(status
)) {
117 return r
->getString(status
);
119 return UnicodeString();
124 RBDataMap::getInt28(const char* key
, UErrorCode
&status
) const
126 const ResourceBundle
*r
= getItem(key
, status
);
127 if(U_SUCCESS(status
)) {
128 return r
->getInt(status
);
135 RBDataMap::getUInt28(const char* key
, UErrorCode
&status
) const
137 const ResourceBundle
*r
= getItem(key
, status
);
138 if(U_SUCCESS(status
)) {
139 return r
->getUInt(status
);
146 RBDataMap::getIntVector(int32_t &length
, const char *key
, UErrorCode
&status
) const {
147 const ResourceBundle
*r
= getItem(key
, status
);
148 if(U_SUCCESS(status
)) {
149 return r
->getIntVector(length
, status
);
156 RBDataMap::getBinary(int32_t &length
, const char *key
, UErrorCode
&status
) const {
157 const ResourceBundle
*r
= getItem(key
, status
);
158 if(U_SUCCESS(status
)) {
159 return r
->getBinary(length
, status
);
165 int32_t RBDataMap::getInt(const char* key
, UErrorCode
&status
) const
167 UnicodeString r
= this->getString(key
, status
);
168 if(U_SUCCESS(status
)) {
175 const UnicodeString
* RBDataMap::getStringArray(int32_t& count
, const char* key
, UErrorCode
&status
) const
177 const ResourceBundle
*r
= getItem(key
, status
);
178 if(U_SUCCESS(status
)) {
181 count
= r
->getSize();
186 UnicodeString
*result
= new UnicodeString
[count
];
187 for(i
= 0; i
<count
; i
++) {
188 result
[i
] = r
->getStringEx(i
, status
);
196 const int32_t* RBDataMap::getIntArray(int32_t& count
, const char* key
, UErrorCode
&status
) const
198 const ResourceBundle
*r
= getItem(key
, status
);
199 if(U_SUCCESS(status
)) {
202 count
= r
->getSize();
207 int32_t *result
= new int32_t[count
];
208 UnicodeString stringRes
;
209 for(i
= 0; i
<count
; i
++) {
210 stringRes
= r
->getStringEx(i
, status
);
211 result
[i
] = utoi(stringRes
);