Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/unicode/region.h @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 69:33d812a61356 |
---|---|
1 // © 2016 and later: Unicode, Inc. and others. | |
2 // License & terms of use: http://www.unicode.org/copyright.html | |
3 /* | |
4 ******************************************************************************* | |
5 * Copyright (C) 2014-2016, International Business Machines Corporation and others. | |
6 * All Rights Reserved. | |
7 ******************************************************************************* | |
8 */ | |
9 | |
10 #ifndef REGION_H | |
11 #define REGION_H | |
12 | |
13 /** | |
14 * \file | |
15 * \brief C++ API: Region classes (territory containment) | |
16 */ | |
17 | |
18 #include "unicode/utypes.h" | |
19 | |
20 #if U_SHOW_CPLUSPLUS_API | |
21 | |
22 #if !UCONFIG_NO_FORMATTING | |
23 | |
24 #include "unicode/uregion.h" | |
25 #include "unicode/uobject.h" | |
26 #include "unicode/uniset.h" | |
27 #include "unicode/unistr.h" | |
28 #include "unicode/strenum.h" | |
29 | |
30 U_NAMESPACE_BEGIN | |
31 | |
32 /** | |
33 * <code>Region</code> is the class representing a Unicode Region Code, also known as a | |
34 * Unicode Region Subtag, which is defined based upon the BCP 47 standard. We often think of | |
35 * "regions" as "countries" when defining the characteristics of a locale. Region codes There are different | |
36 * types of region codes that are important to distinguish. | |
37 * <p> | |
38 * Macroregion - A code for a "macro geographical (continental) region, geographical sub-region, or | |
39 * selected economic and other grouping" as defined in | |
40 * UN M.49 (http://unstats.un.org/unsd/methods/m49/m49regin.htm). | |
41 * These are typically 3-digit codes, but contain some 2-letter codes, such as the LDML code QO | |
42 * added for Outlying Oceania. Not all UNM.49 codes are defined in LDML, but most of them are. | |
43 * Macroregions are represented in ICU by one of three region types: WORLD ( region code 001 ), | |
44 * CONTINENTS ( regions contained directly by WORLD ), and SUBCONTINENTS ( things contained directly | |
45 * by a continent ). | |
46 * <p> | |
47 * TERRITORY - A Region that is not a Macroregion. These are typically codes for countries, but also | |
48 * include areas that are not separate countries, such as the code "AQ" for Antarctica or the code | |
49 * "HK" for Hong Kong (SAR China). Overseas dependencies of countries may or may not have separate | |
50 * codes. The codes are typically 2-letter codes aligned with the ISO 3166 standard, but BCP47 allows | |
51 * for the use of 3-digit codes in the future. | |
52 * <p> | |
53 * UNKNOWN - The code ZZ is defined by Unicode LDML for use to indicate that the Region is unknown, | |
54 * or that the value supplied as a region was invalid. | |
55 * <p> | |
56 * DEPRECATED - Region codes that have been defined in the past but are no longer in modern usage, | |
57 * usually due to a country splitting into multiple territories or changing its name. | |
58 * <p> | |
59 * GROUPING - A widely understood grouping of territories that has a well defined membership such | |
60 * that a region code has been assigned for it. Some of these are UNM.49 codes that do't fall into | |
61 * the world/continent/sub-continent hierarchy, while others are just well known groupings that have | |
62 * their own region code. Region "EU" (European Union) is one such region code that is a grouping. | |
63 * Groupings will never be returned by the getContainingRegion() API, since a different type of region | |
64 * ( WORLD, CONTINENT, or SUBCONTINENT ) will always be the containing region instead. | |
65 * | |
66 * The Region class is not intended for public subclassing. | |
67 * | |
68 * @author John Emmons | |
69 * @stable ICU 51 | |
70 */ | |
71 | |
72 class U_I18N_API Region : public UObject { | |
73 public: | |
74 /** | |
75 * Destructor. | |
76 * @stable ICU 51 | |
77 */ | |
78 virtual ~Region(); | |
79 | |
80 /** | |
81 * Returns true if the two regions are equal. | |
82 * @stable ICU 51 | |
83 */ | |
84 UBool operator==(const Region &that) const; | |
85 | |
86 /** | |
87 * Returns true if the two regions are NOT equal; that is, if operator ==() returns false. | |
88 * @stable ICU 51 | |
89 */ | |
90 UBool operator!=(const Region &that) const; | |
91 | |
92 /** | |
93 * Returns a pointer to a Region using the given region code. The region code can be either 2-letter ISO code, | |
94 * 3-letter ISO code, UNM.49 numeric code, or other valid Unicode Region Code as defined by the LDML specification. | |
95 * The identifier will be canonicalized internally using the supplemental metadata as defined in the CLDR. | |
96 * If the region code is NULL or not recognized, the appropriate error code will be set ( U_ILLEGAL_ARGUMENT_ERROR ) | |
97 * @stable ICU 51 | |
98 */ | |
99 static const Region* U_EXPORT2 getInstance(const char *region_code, UErrorCode &status); | |
100 | |
101 /** | |
102 * Returns a pointer to a Region using the given numeric region code. If the numeric region code is not recognized, | |
103 * the appropriate error code will be set ( U_ILLEGAL_ARGUMENT_ERROR ). | |
104 * @stable ICU 51 | |
105 */ | |
106 static const Region* U_EXPORT2 getInstance (int32_t code, UErrorCode &status); | |
107 | |
108 /** | |
109 * Returns an enumeration over the IDs of all known regions that match the given type. | |
110 * @stable ICU 55 | |
111 */ | |
112 static StringEnumeration* U_EXPORT2 getAvailable(URegionType type, UErrorCode &status); | |
113 | |
114 /** | |
115 * Returns a pointer to the region that contains this region. Returns NULL if this region is code "001" (World) | |
116 * or "ZZ" (Unknown region). For example, calling this method with region "IT" (Italy) returns the | |
117 * region "039" (Southern Europe). | |
118 * @stable ICU 51 | |
119 */ | |
120 const Region* getContainingRegion() const; | |
121 | |
122 /** | |
123 * Return a pointer to the region that geographically contains this region and matches the given type, | |
124 * moving multiple steps up the containment chain if necessary. Returns NULL if no containing region can be found | |
125 * that matches the given type. Note: The URegionTypes = "URGN_GROUPING", "URGN_DEPRECATED", or "URGN_UNKNOWN" | |
126 * are not appropriate for use in this API. NULL will be returned in this case. For example, calling this method | |
127 * with region "IT" (Italy) for type "URGN_CONTINENT" returns the region "150" ( Europe ). | |
128 * @stable ICU 51 | |
129 */ | |
130 const Region* getContainingRegion(URegionType type) const; | |
131 | |
132 /** | |
133 * Return an enumeration over the IDs of all the regions that are immediate children of this region in the | |
134 * region hierarchy. These returned regions could be either macro regions, territories, or a mixture of the two, | |
135 * depending on the containment data as defined in CLDR. This API may return NULL if this region doesn't have | |
136 * any sub-regions. For example, calling this method with region "150" (Europe) returns an enumeration containing | |
137 * the various sub regions of Europe - "039" (Southern Europe) - "151" (Eastern Europe) - "154" (Northern Europe) | |
138 * and "155" (Western Europe). | |
139 * @stable ICU 55 | |
140 */ | |
141 StringEnumeration* getContainedRegions(UErrorCode &status) const; | |
142 | |
143 /** | |
144 * Returns an enumeration over the IDs of all the regions that are children of this region anywhere in the region | |
145 * hierarchy and match the given type. This API may return an empty enumeration if this region doesn't have any | |
146 * sub-regions that match the given type. For example, calling this method with region "150" (Europe) and type | |
147 * "URGN_TERRITORY" returns a set containing all the territories in Europe ( "FR" (France) - "IT" (Italy) - "DE" (Germany) etc. ) | |
148 * @stable ICU 55 | |
149 */ | |
150 StringEnumeration* getContainedRegions( URegionType type, UErrorCode &status ) const; | |
151 | |
152 /** | |
153 * Returns true if this region contains the supplied other region anywhere in the region hierarchy. | |
154 * @stable ICU 51 | |
155 */ | |
156 UBool contains(const Region &other) const; | |
157 | |
158 /** | |
159 * For deprecated regions, return an enumeration over the IDs of the regions that are the preferred replacement | |
160 * regions for this region. Returns null for a non-deprecated region. For example, calling this method with region | |
161 * "SU" (Soviet Union) would return a list of the regions containing "RU" (Russia), "AM" (Armenia), "AZ" (Azerbaijan), etc... | |
162 * @stable ICU 55 | |
163 */ | |
164 StringEnumeration* getPreferredValues(UErrorCode &status) const; | |
165 | |
166 /** | |
167 * Return this region's canonical region code. | |
168 * @stable ICU 51 | |
169 */ | |
170 const char* getRegionCode() const; | |
171 | |
172 /** | |
173 * Return this region's numeric code. | |
174 * Returns a negative value if the given region does not have a numeric code assigned to it. | |
175 * @stable ICU 51 | |
176 */ | |
177 int32_t getNumericCode() const; | |
178 | |
179 /** | |
180 * Returns the region type of this region. | |
181 * @stable ICU 51 | |
182 */ | |
183 URegionType getType() const; | |
184 | |
185 #ifndef U_HIDE_INTERNAL_API | |
186 /** | |
187 * Cleans up statically allocated memory. | |
188 * @internal | |
189 */ | |
190 static void cleanupRegionData(); | |
191 #endif /* U_HIDE_INTERNAL_API */ | |
192 | |
193 private: | |
194 char id[4]; | |
195 UnicodeString idStr; | |
196 int32_t code; | |
197 URegionType fType; | |
198 Region *containingRegion; | |
199 UVector *containedRegions; | |
200 UVector *preferredValues; | |
201 | |
202 /** | |
203 * Default Constructor. Internal - use factory methods only. | |
204 */ | |
205 Region(); | |
206 | |
207 | |
208 /* | |
209 * Initializes the region data from the ICU resource bundles. The region data | |
210 * contains the basic relationships such as which regions are known, what the numeric | |
211 * codes are, any known aliases, and the territory containment data. | |
212 * | |
213 * If the region data has already loaded, then this method simply returns without doing | |
214 * anything meaningful. | |
215 */ | |
216 | |
217 static void U_CALLCONV loadRegionData(UErrorCode &status); | |
218 | |
219 }; | |
220 | |
221 U_NAMESPACE_END | |
222 | |
223 #endif /* #if !UCONFIG_NO_FORMATTING */ | |
224 | |
225 #endif /* U_SHOW_CPLUSPLUS_API */ | |
226 | |
227 #endif // REGION_H | |
228 | |
229 //eof |