Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(302)

Side by Side Diff: source/common/resource.h

Issue 1621943002: ICU 56 step 4: Apply post-56 fixes for measure/date format (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@56goog
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/common/putilimp.h ('k') | source/common/resource.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 *******************************************************************************
3 * Copyright (C) 2015, International Business Machines
4 * Corporation and others. All Rights Reserved.
5 *******************************************************************************
6 * resource.h
7 *
8 * created on: 2015nov04
9 * created by: Markus W. Scherer
10 */
11
12 #ifndef __URESOURCE_H__
13 #define __URESOURCE_H__
14
15 /**
16 * \file
17 * \brief ICU resource bundle key and value types.
18 */
19
20 // Note: Ported from ICU4J class UResource and its nested classes,
21 // but the C++ classes are separate, not nested.
22
23 // We use the Resource prefix for C++ classes, as usual.
24 // The UResource prefix would be used for C types.
25
26 #include "unicode/utypes.h"
27 #include "unicode/unistr.h"
28 #include "unicode/ures.h"
29
30 U_NAMESPACE_BEGIN
31
32 class ResourceTableSink;
33
34 // Note: In C++, we use const char * pointers for keys,
35 // rather than an abstraction like Java UResource.Key.
36
37 /**
38 * Represents a resource bundle item's value.
39 * Avoids object creations as much as possible.
40 * Mutable, not thread-safe.
41 */
42 class U_COMMON_API ResourceValue : public UObject {
43 public:
44 virtual ~ResourceValue();
45
46 /**
47 * @return ICU resource type, for example, URES_STRING
48 */
49 virtual UResType getType() const = 0;
50
51 /**
52 * Sets U_RESOURCE_TYPE_MISMATCH if this is not a string resource.
53 *
54 * @see ures_getString()
55 */
56 virtual const UChar *getString(int32_t &length, UErrorCode &errorCode) const = 0;
57
58 inline UnicodeString getUnicodeString(UErrorCode &errorCode) const {
59 int32_t len = 0;
60 const UChar *r = getString(len, errorCode);
61 return UnicodeString(TRUE, r, len);
62 }
63
64 /**
65 * Sets U_RESOURCE_TYPE_MISMATCH if this is not an alias resource.
66 */
67 virtual const UChar *getAliasString(int32_t &length, UErrorCode &errorCode) const = 0;
68
69 inline UnicodeString getAliasUnicodeString(UErrorCode &errorCode) const {
70 int32_t len = 0;
71 const UChar *r = getAliasString(len, errorCode);
72 return UnicodeString(TRUE, r, len);
73 }
74
75 /**
76 * Sets U_RESOURCE_TYPE_MISMATCH if this is not an integer resource.
77 *
78 * @see ures_getInt()
79 */
80 virtual int32_t getInt(UErrorCode &errorCode) const = 0;
81
82 /**
83 * Sets U_RESOURCE_TYPE_MISMATCH if this is not an integer resource.
84 *
85 * @see ures_getUInt()
86 */
87 virtual uint32_t getUInt(UErrorCode &errorCode) const = 0;
88
89 /**
90 * Sets U_RESOURCE_TYPE_MISMATCH if this is not an intvector resource.
91 *
92 * @see ures_getIntVector()
93 */
94 virtual const int32_t *getIntVector(int32_t &length, UErrorCode &errorCode) const = 0;
95
96 /**
97 * Sets U_RESOURCE_TYPE_MISMATCH if this is not a binary-blob resource.
98 *
99 * @see ures_getBinary()
100 */
101 virtual const uint8_t *getBinary(int32_t &length, UErrorCode &errorCode) con st = 0;
102
103 protected:
104 ResourceValue() {}
105
106 private:
107 ResourceValue(const ResourceValue &); // no copy constructor
108 ResourceValue &operator=(const ResourceValue &); // no assignment operator
109 };
110
111 /**
112 * Sink for ICU resource array contents.
113 * The base class does nothing.
114 *
115 * Nested arrays and tables are stored as nested sinks,
116 * never put() as ResourceValue items.
117 */
118 class U_COMMON_API ResourceArraySink : public UObject {
119 public:
120 ResourceArraySink() {}
121 virtual ~ResourceArraySink();
122
123 /**
124 * Adds a value from a resource array.
125 *
126 * @param index of the resource array item
127 * @param value resource value
128 */
129 virtual void put(int32_t index, const ResourceValue &value, UErrorCode &erro rCode);
130
131 /**
132 * Returns a nested resource array at the array index as another sink.
133 * Creates the sink if none exists for the key.
134 * Returns NULL if nested arrays are not supported.
135 * The default implementation always returns NULL.
136 *
137 * This sink (not the caller) owns the nested sink.
138 *
139 * @param index of the resource array item
140 * @param size number of array items
141 * @return nested-array sink, or NULL
142 */
143 virtual ResourceArraySink *getOrCreateArraySink(
144 int32_t index, int32_t size, UErrorCode &errorCode);
145
146 /**
147 * Returns a nested resource table at the array index as another sink.
148 * Creates the sink if none exists for the key.
149 * Returns NULL if nested tables are not supported.
150 * The default implementation always returns NULL.
151 *
152 * This sink (not the caller) owns the nested sink.
153 *
154 * @param index of the resource array item
155 * @param initialSize size hint for creating the sink if necessary
156 * @return nested-table sink, or NULL
157 */
158 virtual ResourceTableSink *getOrCreateTableSink(
159 int32_t index, int32_t initialSize, UErrorCode &errorCode);
160
161 /**
162 * "Leaves" the array.
163 * Indicates that all of the resources and sub-resources of the current arra y
164 * have been enumerated.
165 */
166 virtual void leave(UErrorCode &errorCode);
167
168 private:
169 ResourceArraySink(const ResourceArraySink &); // no copy constructor
170 ResourceArraySink &operator=(const ResourceArraySink &); // no assignment o perator
171 };
172
173 /**
174 * Sink for ICU resource table contents.
175 * The base class does nothing.
176 *
177 * Nested arrays and tables are stored as nested sinks,
178 * never put() as ResourceValue items.
179 */
180 class U_COMMON_API ResourceTableSink : public UObject {
181 public:
182 ResourceTableSink() {}
183 virtual ~ResourceTableSink();
184
185 /**
186 * Adds a key-value pair from a resource table.
187 *
188 * @param key resource key string
189 * @param value resource value
190 */
191 virtual void put(const char *key, const ResourceValue &value, UErrorCode &er rorCode);
192
193 /**
194 * Adds a no-fallback/no-inheritance marker for this key.
195 * Used for CLDR no-fallback data values of (three empty-set symbols)=={2205 , 2205, 2205}
196 * when enumerating tables with fallback from the specific resource bundle t o root.
197 *
198 * The default implementation does nothing.
199 *
200 * @param key to be removed
201 */
202 virtual void putNoFallback(const char *key, UErrorCode &errorCode);
203
204 /**
205 * Returns a nested resource array for the key as another sink.
206 * Creates the sink if none exists for the key.
207 * Returns NULL if nested arrays are not supported.
208 * The default implementation always returns NULL.
209 *
210 * This sink (not the caller) owns the nested sink.
211 *
212 * @param key resource key string
213 * @param size number of array items
214 * @return nested-array sink, or NULL
215 */
216 virtual ResourceArraySink *getOrCreateArraySink(
217 const char *key, int32_t size, UErrorCode &errorCode);
218
219 /**
220 * Returns a nested resource table for the key as another sink.
221 * Creates the sink if none exists for the key.
222 * Returns NULL if nested tables are not supported.
223 * The default implementation always returns NULL.
224 *
225 * This sink (not the caller) owns the nested sink.
226 *
227 * @param key resource key string
228 * @param initialSize size hint for creating the sink if necessary
229 * @return nested-table sink, or NULL
230 */
231 virtual ResourceTableSink *getOrCreateTableSink(
232 const char *key, int32_t initialSize, UErrorCode &errorCode);
233
234 /**
235 * "Leaves" the table.
236 * Indicates that all of the resources and sub-resources of the current tabl e
237 * have been enumerated.
238 */
239 virtual void leave(UErrorCode &errorCode);
240
241 private:
242 ResourceTableSink(const ResourceTableSink &); // no copy constructor
243 ResourceTableSink &operator=(const ResourceTableSink &); // no assignment o perator
244 };
245
246 U_NAMESPACE_END
247
248 #endif
OLDNEW
« no previous file with comments | « source/common/putilimp.h ('k') | source/common/resource.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698