]> git.saurik.com Git - apple/icu.git/blame - icuSources/i18n/japancal.cpp
ICU-57131.0.1.tar.gz
[apple/icu.git] / icuSources / i18n / japancal.cpp
CommitLineData
b75a7d8f
A
1/*
2*******************************************************************************
2ca993e8
A
3* Copyright (C) 2003-2009,2012,2016 International Business Machines Corporation and
4* others. All Rights Reserved.
b75a7d8f
A
5*******************************************************************************
6*
7* File JAPANCAL.CPP
8*
9* Modification History:
10* 05/16/2003 srl copied from buddhcal.cpp
11*
12*/
13
14#include "unicode/utypes.h"
15
16#if !UCONFIG_NO_FORMATTING
17
2ca993e8 18#include "cmemory.h"
b75a7d8f
A
19#include "japancal.h"
20#include "unicode/gregocal.h"
46f4442e 21#include "umutex.h"
374ca955 22#include "uassert.h"
b75a7d8f
A
23
24//#define U_DEBUG_JCAL
25
26#ifdef U_DEBUG_JCAL
27#include <stdio.h>
28#endif
29
30U_NAMESPACE_BEGIN
31
374ca955 32UOBJECT_DEFINE_RTTI_IMPLEMENTATION(JapaneseCalendar)
b75a7d8f
A
33
34// Gregorian date of each emperor's ascension
35// Years are AD, months are 1-based.
36static const struct {
46f4442e
A
37 int16_t year;
38 int8_t month;
39 int8_t day;
b75a7d8f 40} kEraInfo[] = {
46f4442e
A
41 // Year Month Day
42 { 645, 6, 19 }, // Taika 0
43 { 650, 2, 15 }, // Hakuchi 1
44 { 672, 1, 1 }, // Hakuho 2
45 { 686, 7, 20 }, // Shucho 3
46 { 701, 3, 21 }, // Taiho 4
47 { 704, 5, 10 }, // Keiun 5
48 { 708, 1, 11 }, // Wado 6
49 { 715, 9, 2 }, // Reiki 7
50 { 717, 11, 17 }, // Yoro 8
51 { 724, 2, 4 }, // Jinki 9
52 { 729, 8, 5 }, // Tempyo 10
53 { 749, 4, 14 }, // Tempyo-kampo 11
54 { 749, 7, 2 }, // Tempyo-shoho 12
55 { 757, 8, 18 }, // Tempyo-hoji 13
56 { 765, 1, 7 }, // Tempho-jingo 14
57 { 767, 8, 16 }, // Jingo-keiun 15
58 { 770, 10, 1 }, // Hoki 16
59 { 781, 1, 1 }, // Ten-o 17
60 { 782, 8, 19 }, // Enryaku 18
61 { 806, 5, 18 }, // Daido 19
62 { 810, 9, 19 }, // Konin 20
63 { 824, 1, 5 }, // Tencho
64 { 834, 1, 3 }, // Showa
65 { 848, 6, 13 }, // Kajo
66 { 851, 4, 28 }, // Ninju
67 { 854, 11, 30 }, // Saiko
68 { 857, 2, 21 }, // Tennan
69 { 859, 4, 15 }, // Jogan
70 { 877, 4, 16 }, // Genkei
71 { 885, 2, 21 }, // Ninna
72 { 889, 4, 27 }, // Kampyo 30
73 { 898, 4, 26 }, // Shotai
74 { 901, 7, 15 }, // Engi
75 { 923, 4, 11 }, // Encho
76 { 931, 4, 26 }, // Shohei
77 { 938, 5, 22 }, // Tengyo
78 { 947, 4, 22 }, // Tenryaku
79 { 957, 10, 27 }, // Tentoku
80 { 961, 2, 16 }, // Owa
81 { 964, 7, 10 }, // Koho
82 { 968, 8, 13 }, // Anna 40
83 { 970, 3, 25 }, // Tenroku
84 { 973, 12, 20 }, // Ten-en
85 { 976, 7, 13 }, // Jogen
86 { 978, 11, 29 }, // Tengen
87 { 983, 4, 15 }, // Eikan
88 { 985, 4, 27 }, // Kanna
89 { 987, 4, 5 }, // Ei-en
90 { 989, 8, 8 }, // Eiso
91 { 990, 11, 7 }, // Shoryaku
92 { 995, 2, 22 }, // Chotoku 50
93 { 999, 1, 13 }, // Choho
94 { 1004, 7, 20 }, // Kanko
95 { 1012, 12, 25 }, // Chowa
96 { 1017, 4, 23 }, // Kannin
97 { 1021, 2, 2 }, // Jian
98 { 1024, 7, 13 }, // Manju
99 { 1028, 7, 25 }, // Chogen
100 { 1037, 4, 21 }, // Choryaku
101 { 1040, 11, 10 }, // Chokyu
102 { 1044, 11, 24 }, // Kantoku 60
103 { 1046, 4, 14 }, // Eisho
104 { 1053, 1, 11 }, // Tengi
105 { 1058, 8, 29 }, // Kohei
106 { 1065, 8, 2 }, // Jiryaku
107 { 1069, 4, 13 }, // Enkyu
108 { 1074, 8, 23 }, // Shoho
109 { 1077, 11, 17 }, // Shoryaku
110 { 1081, 2, 10 }, // Eiho
111 { 1084, 2, 7 }, // Otoku
112 { 1087, 4, 7 }, // Kanji 70
113 { 1094, 12, 15 }, // Kaho
114 { 1096, 12, 17 }, // Eicho
115 { 1097, 11, 21 }, // Shotoku
116 { 1099, 8, 28 }, // Kowa
117 { 1104, 2, 10 }, // Choji
118 { 1106, 4, 9 }, // Kasho
119 { 1108, 8, 3 }, // Tennin
120 { 1110, 7, 13 }, // Ten-ei
121 { 1113, 7, 13 }, // Eikyu
122 { 1118, 4, 3 }, // Gen-ei 80
123 { 1120, 4, 10 }, // Hoan
124 { 1124, 4, 3 }, // Tenji
125 { 1126, 1, 22 }, // Daiji
126 { 1131, 1, 29 }, // Tensho
127 { 1132, 8, 11 }, // Chosho
128 { 1135, 4, 27 }, // Hoen
129 { 1141, 7, 10 }, // Eiji
130 { 1142, 4, 28 }, // Koji
131 { 1144, 2, 23 }, // Tenyo
132 { 1145, 7, 22 }, // Kyuan 90
133 { 1151, 1, 26 }, // Ninpei
134 { 1154, 10, 28 }, // Kyuju
135 { 1156, 4, 27 }, // Hogen
136 { 1159, 4, 20 }, // Heiji
137 { 1160, 1, 10 }, // Eiryaku
138 { 1161, 9, 4 }, // Oho
139 { 1163, 3, 29 }, // Chokan
140 { 1165, 6, 5 }, // Eiman
141 { 1166, 8, 27 }, // Nin-an
142 { 1169, 4, 8 }, // Kao 100
143 { 1171, 4, 21 }, // Shoan
144 { 1175, 7, 28 }, // Angen
145 { 1177, 8, 4 }, // Jisho
146 { 1181, 7, 14 }, // Yowa
147 { 1182, 5, 27 }, // Juei
148 { 1184, 4, 16 }, // Genryuku
149 { 1185, 8, 14 }, // Bunji
150 { 1190, 4, 11 }, // Kenkyu
151 { 1199, 4, 27 }, // Shoji
152 { 1201, 2, 13 }, // Kennin 110
153 { 1204, 2, 20 }, // Genkyu
154 { 1206, 4, 27 }, // Ken-ei
155 { 1207, 10, 25 }, // Shogen
156 { 1211, 3, 9 }, // Kenryaku
157 { 1213, 12, 6 }, // Kenpo
158 { 1219, 4, 12 }, // Shokyu
159 { 1222, 4, 13 }, // Joo
160 { 1224, 11, 20 }, // Gennin
161 { 1225, 4, 20 }, // Karoku
162 { 1227, 12, 10 }, // Antei 120
163 { 1229, 3, 5 }, // Kanki
164 { 1232, 4, 2 }, // Joei
165 { 1233, 4, 15 }, // Tempuku
166 { 1234, 11, 5 }, // Bunryaku
167 { 1235, 9, 19 }, // Katei
168 { 1238, 11, 23 }, // Ryakunin
169 { 1239, 2, 7 }, // En-o
170 { 1240, 7, 16 }, // Ninji
171 { 1243, 2, 26 }, // Kangen
172 { 1247, 2, 28 }, // Hoji 130
173 { 1249, 3, 18 }, // Kencho
174 { 1256, 10, 5 }, // Kogen
175 { 1257, 3, 14 }, // Shoka
176 { 1259, 3, 26 }, // Shogen
177 { 1260, 4, 13 }, // Bun-o
178 { 1261, 2, 20 }, // Kocho
179 { 1264, 2, 28 }, // Bun-ei
180 { 1275, 4, 25 }, // Kenji
181 { 1278, 2, 29 }, // Koan
182 { 1288, 4, 28 }, // Shoo 140
183 { 1293, 8, 55 }, // Einin
184 { 1299, 4, 25 }, // Shoan
185 { 1302, 11, 21 }, // Kengen
186 { 1303, 8, 5 }, // Kagen
187 { 1306, 12, 14 }, // Tokuji
188 { 1308, 10, 9 }, // Enkei
189 { 1311, 4, 28 }, // Ocho
190 { 1312, 3, 20 }, // Showa
191 { 1317, 2, 3 }, // Bunpo
192 { 1319, 4, 28 }, // Geno 150
193 { 1321, 2, 23 }, // Genkyo
194 { 1324, 12, 9 }, // Shochu
195 { 1326, 4, 26 }, // Kareki
196 { 1329, 8, 29 }, // Gentoku
197 { 1331, 8, 9 }, // Genko
198 { 1334, 1, 29 }, // Kemmu
199 { 1336, 2, 29 }, // Engen
200 { 1340, 4, 28 }, // Kokoku
201 { 1346, 12, 8 }, // Shohei
202 { 1370, 7, 24 }, // Kentoku 160
203 { 1372, 4, 1 }, // Bunch\u0169
204 { 1375, 5, 27 }, // Tenju
205 { 1379, 3, 22 }, // Koryaku
206 { 1381, 2, 10 }, // Kowa
207 { 1384, 4, 28 }, // Gench\u0169
208 { 1384, 2, 27 }, // Meitoku
209 { 1387, 8, 23 }, // Kakei
210 { 1389, 2, 9 }, // Koo
211 { 1390, 3, 26 }, // Meitoku
212 { 1394, 7, 5 }, // Oei 170
213 { 1428, 4, 27 }, // Shocho
214 { 1429, 9, 5 }, // Eikyo
215 { 1441, 2, 17 }, // Kakitsu
216 { 1444, 2, 5 }, // Bun-an
217 { 1449, 7, 28 }, // Hotoku
218 { 1452, 7, 25 }, // Kyotoku
219 { 1455, 7, 25 }, // Kosho
220 { 1457, 9, 28 }, // Choroku
221 { 1460, 12, 21 }, // Kansho
222 { 1466, 2, 28 }, // Bunsho 180
223 { 1467, 3, 3 }, // Onin
224 { 1469, 4, 28 }, // Bunmei
225 { 1487, 7, 29 }, // Chokyo
226 { 1489, 8, 21 }, // Entoku
227 { 1492, 7, 19 }, // Meio
228 { 1501, 2, 29 }, // Bunki
229 { 1504, 2, 30 }, // Eisho
230 { 1521, 8, 23 }, // Taiei
231 { 1528, 8, 20 }, // Kyoroku
232 { 1532, 7, 29 }, // Tenmon 190
233 { 1555, 10, 23 }, // Koji
234 { 1558, 2, 28 }, // Eiroku
235 { 1570, 4, 23 }, // Genki
236 { 1573, 7, 28 }, // Tensho
237 { 1592, 12, 8 }, // Bunroku
238 { 1596, 10, 27 }, // Keicho
239 { 1615, 7, 13 }, // Genwa
240 { 1624, 2, 30 }, // Kan-ei
241 { 1644, 12, 16 }, // Shoho
242 { 1648, 2, 15 }, // Keian 200
243 { 1652, 9, 18 }, // Shoo
244 { 1655, 4, 13 }, // Meiryaku
245 { 1658, 7, 23 }, // Manji
246 { 1661, 4, 25 }, // Kanbun
247 { 1673, 9, 21 }, // Enpo
248 { 1681, 9, 29 }, // Tenwa
249 { 1684, 2, 21 }, // Jokyo
250 { 1688, 9, 30 }, // Genroku
251 { 1704, 3, 13 }, // Hoei
252 { 1711, 4, 25 }, // Shotoku 210
253 { 1716, 6, 22 }, // Kyoho
254 { 1736, 4, 28 }, // Genbun
255 { 1741, 2, 27 }, // Kanpo
256 { 1744, 2, 21 }, // Enkyo
257 { 1748, 7, 12 }, // Kan-en
258 { 1751, 10, 27 }, // Horyaku
259 { 1764, 6, 2 }, // Meiwa
260 { 1772, 11, 16 }, // An-ei
261 { 1781, 4, 2 }, // Tenmei
262 { 1789, 1, 25 }, // Kansei 220
263 { 1801, 2, 5 }, // Kyowa
264 { 1804, 2, 11 }, // Bunka
265 { 1818, 4, 22 }, // Bunsei
266 { 1830, 12, 10 }, // Tenpo
267 { 1844, 12, 2 }, // Koka
268 { 1848, 2, 28 }, // Kaei
269 { 1854, 11, 27 }, // Ansei
270 { 1860, 3, 18 }, // Man-en
271 { 1861, 2, 19 }, // Bunkyu
272 { 1864, 2, 20 }, // Genji 230
273 { 1865, 4, 7 }, // Keio 231
274 { 1868, 9, 8 }, // Meiji 232
275 { 1912, 7, 30 }, // Taisho 233
276 { 1926, 12, 25 }, // Showa 234
277 { 1989, 1, 8 } // Heisei 235
278};
b75a7d8f 279
2ca993e8 280#define kEraCount UPRV_LENGTHOF(kEraInfo)
b75a7d8f 281
729e4ab9
A
282/**
283 * The current era, for reference.
284 */
285static const int32_t kCurrentEra = (kEraCount-1); // int32_t to match the calendar field type
46f4442e
A
286
287static const int32_t kGregorianEpoch = 1970; // used as the default value of EXTENDED_YEAR
288
289/* Some platforms don't like to export constants, like old Palm OS and some z/OS configurations. */
290uint32_t JapaneseCalendar::getCurrentEra() {
291 return kCurrentEra;
292}
b75a7d8f
A
293
294JapaneseCalendar::JapaneseCalendar(const Locale& aLocale, UErrorCode& success)
46f4442e 295: GregorianCalendar(aLocale, success)
b75a7d8f
A
296{
297 setTimeInMillis(getNow(), success); // Call this again now that the vtable is set up properly.
298}
299
300JapaneseCalendar::~JapaneseCalendar()
301{
302}
303
304JapaneseCalendar::JapaneseCalendar(const JapaneseCalendar& source)
46f4442e 305: GregorianCalendar(source)
b75a7d8f
A
306{
307}
308
309JapaneseCalendar& JapaneseCalendar::operator= ( const JapaneseCalendar& right)
310{
46f4442e
A
311 GregorianCalendar::operator=(right);
312 return *this;
b75a7d8f
A
313}
314
315Calendar* JapaneseCalendar::clone(void) const
316{
46f4442e 317 return new JapaneseCalendar(*this);
b75a7d8f
A
318}
319
320const char *JapaneseCalendar::getType() const
321{
46f4442e 322 return "japanese";
b75a7d8f
A
323}
324
729e4ab9 325int32_t JapaneseCalendar::getDefaultMonthInYear(int32_t eyear)
b75a7d8f 326{
46f4442e 327 int32_t era = internalGetEra();
46f4442e 328 // TODO do we assume we can trust 'era'? What if it is denormalized?
b75a7d8f 329
729e4ab9 330 int32_t month = 0;
b75a7d8f 331
46f4442e 332 // Find out if we are at the edge of an era
b75a7d8f 333
729e4ab9 334 if(eyear == kEraInfo[era].year) {
46f4442e
A
335 // Yes, we're in the first year of this era.
336 return kEraInfo[era].month-1;
337 }
b75a7d8f 338
46f4442e 339 return month;
b75a7d8f
A
340}
341
729e4ab9 342int32_t JapaneseCalendar::getDefaultDayInMonth(int32_t eyear, int32_t month)
b75a7d8f 343{
46f4442e 344 int32_t era = internalGetEra();
729e4ab9 345 int32_t day = 1;
46f4442e 346
729e4ab9 347 if(eyear == kEraInfo[era].year) {
46f4442e
A
348 if(month == (kEraInfo[era].month-1)) {
349 return kEraInfo[era].day;
350 }
b75a7d8f 351 }
b75a7d8f 352
46f4442e 353 return day;
b75a7d8f
A
354}
355
356
357int32_t JapaneseCalendar::internalGetEra() const
358{
46f4442e 359 return internalGet(UCAL_ERA, kCurrentEra);
b75a7d8f
A
360}
361
374ca955 362int32_t JapaneseCalendar::handleGetExtendedYear()
b75a7d8f 363{
46f4442e
A
364 // EXTENDED_YEAR in JapaneseCalendar is a Gregorian year
365 // The default value of EXTENDED_YEAR is 1970 (Showa 45)
366 int32_t year;
367
368 if (newerField(UCAL_EXTENDED_YEAR, UCAL_YEAR) == UCAL_EXTENDED_YEAR &&
369 newerField(UCAL_EXTENDED_YEAR, UCAL_ERA) == UCAL_EXTENDED_YEAR) {
370 year = internalGet(UCAL_EXTENDED_YEAR, kGregorianEpoch);
371 } else {
372 // Subtract one because year starts at 1
373 year = internalGet(UCAL_YEAR) + kEraInfo[internalGetEra()].year - 1;
374 }
375 return year;
b75a7d8f
A
376}
377
374ca955
A
378
379void JapaneseCalendar::handleComputeFields(int32_t julianDay, UErrorCode& status)
b75a7d8f 380{
46f4442e
A
381 //Calendar::timeToFields(theTime, quick, status);
382 GregorianCalendar::handleComputeFields(julianDay, status);
383 int32_t year = internalGet(UCAL_EXTENDED_YEAR); // Gregorian year
384
385 int32_t low = 0;
386
387 // Short circuit for recent years. Most modern computations will
388 // occur in the current era and won't require the binary search.
389 // Note that if the year is == the current era year, then we use
390 // the binary search to handle the month/dom comparison.
b75a7d8f 391#ifdef U_DEBUG_JCAL
46f4442e 392 fprintf(stderr, "== %d \n", year);
b75a7d8f 393#endif
46f4442e
A
394
395 if (year > kEraInfo[kCurrentEra].year) {
396 low = kCurrentEra;
b75a7d8f 397#ifdef U_DEBUG_JCAL
46f4442e 398 fprintf(stderr, " low=%d (special)\n", low);
b75a7d8f 399#endif
46f4442e
A
400 } else {
401 // Binary search
402 int32_t high = kEraCount;
403
b75a7d8f 404#ifdef U_DEBUG_JCAL
46f4442e 405 fprintf(stderr, " high=%d\n", high);
b75a7d8f 406#endif
46f4442e
A
407 while (low < high - 1) {
408 int32_t i = (low + high) / 2;
409 int32_t diff = year - kEraInfo[i].year;
b75a7d8f
A
410
411#ifdef U_DEBUG_JCAL
46f4442e
A
412 fprintf(stderr, " d=%d low=%d, high=%d. Considering %d:M%d D%d Y%d. { we are ?:M%d D%d Y%d }\n",
413 diff,low, high, i, kEraInfo[i].month-1, kEraInfo[i].day, kEraInfo[i].year, internalGet(UCAL_MONTH), internalGet(UCAL_DATE),year);
b75a7d8f 414#endif
46f4442e
A
415
416 // If years are the same, then compare the months, and if those
417 // are the same, compare days of month. In the ERAS array
418 // months are 1-based for easier maintenance.
419 if (diff == 0) {
420 diff = internalGet(UCAL_MONTH) - (kEraInfo[i].month - 1);
b75a7d8f 421#ifdef U_DEBUG_JCAL
46f4442e 422 fprintf(stderr, "diff now %d (M) = %d - %d - 1\n", diff, internalGet(UCAL_MONTH), kEraInfo[i].month);
b75a7d8f 423#endif
46f4442e
A
424 if (diff == 0) {
425 diff = internalGet(UCAL_DATE) - kEraInfo[i].day;
b75a7d8f 426#ifdef U_DEBUG_JCAL
46f4442e 427 fprintf(stderr, "diff now %d (D)\n", diff);
b75a7d8f 428#endif
46f4442e
A
429 }
430 }
431 if (diff >= 0) {
432 low = i;
433 } else {
434 high = i;
435 }
b75a7d8f 436#ifdef U_DEBUG_JCAL
46f4442e 437 fprintf(stderr, ". low=%d, high=%d, i=%d, diff=%d.. %d\n", low, high, i, diff, year);
b75a7d8f
A
438#endif
439
46f4442e 440 }
b75a7d8f 441 }
b75a7d8f
A
442
443#ifdef U_DEBUG_JCAL
46f4442e 444 fprintf(stderr, " low[era]=%d,.. %d\n", low, year);
b75a7d8f 445#endif
46f4442e
A
446 // Now we've found the last era that starts before this date, so
447 // adjust the year to count from the start of that era. Note that
448 // all dates before the first era will fall into the first era by
449 // the algorithm.
450
451 internalSet(UCAL_ERA, low);
452 internalSet(UCAL_YEAR, year - kEraInfo[low].year + 1);
b75a7d8f 453#ifdef U_DEBUG_JCAL
46f4442e 454 fprintf(stderr, " Set ERA=%d, year=%d\n", low, year-kEraInfo[low].year+1);
b75a7d8f
A
455#endif
456
457}
458
459/*
46f4442e 460Disable pivoting
b75a7d8f
A
461*/
462UBool JapaneseCalendar::haveDefaultCentury() const
463{
46f4442e 464 return FALSE;
b75a7d8f
A
465}
466
467UDate JapaneseCalendar::defaultCenturyStart() const
468{
46f4442e 469 return 0;// WRONG
b75a7d8f
A
470}
471
472int32_t JapaneseCalendar::defaultCenturyStartYear() const
473{
46f4442e 474 return 0;
b75a7d8f
A
475}
476
374ca955
A
477int32_t JapaneseCalendar::handleGetLimit(UCalendarDateFields field, ELimitType limitType) const
478{
46f4442e
A
479 switch(field) {
480 case UCAL_ERA:
481 if (limitType == UCAL_LIMIT_MINIMUM || limitType == UCAL_LIMIT_GREATEST_MINIMUM) {
51004dcb 482 return 0;
374ca955 483 }
46f4442e
A
484 return kCurrentEra;
485 case UCAL_YEAR:
486 {
487 switch (limitType) {
488 case UCAL_LIMIT_MINIMUM:
489 case UCAL_LIMIT_GREATEST_MINIMUM:
490 return 1;
491 case UCAL_LIMIT_LEAST_MAXIMUM:
492 return 1;
493 case UCAL_LIMIT_COUNT: //added to avoid warning
494 case UCAL_LIMIT_MAXIMUM:
495 return GregorianCalendar::handleGetLimit(UCAL_YEAR, UCAL_LIMIT_MAXIMUM) - kEraInfo[kCurrentEra].year;
729e4ab9
A
496 default:
497 return 1; // Error condition, invalid limitType
46f4442e 498 }
374ca955 499 }
374ca955 500 default:
46f4442e 501 return GregorianCalendar::handleGetLimit(field,limitType);
374ca955 502 }
374ca955 503}
b75a7d8f 504
46f4442e
A
505int32_t JapaneseCalendar::getActualMaximum(UCalendarDateFields field, UErrorCode& status) const {
506 if (field == UCAL_YEAR) {
507 int32_t era = get(UCAL_ERA, status);
508 if (U_FAILURE(status)) {
509 return 0; // error case... any value
510 }
511 if (era == kCurrentEra) {
512 // TODO: Investigate what value should be used here - revisit after 4.0.
513 return handleGetLimit(UCAL_YEAR, UCAL_LIMIT_MAXIMUM);
514 } else {
515 int32_t nextEraYear = kEraInfo[era + 1].year;
516 int32_t nextEraMonth = kEraInfo[era + 1].month;
517 int32_t nextEraDate = kEraInfo[era + 1].day;
518
519 int32_t maxYear = nextEraYear - kEraInfo[era].year + 1; // 1-base
520 if (nextEraMonth == 1 && nextEraDate == 1) {
521 // Subtract 1, because the next era starts at Jan 1
522 maxYear--;
523 }
524 return maxYear;
525 }
526 }
527 return GregorianCalendar::getActualMaximum(field, status);
528}
b75a7d8f
A
529
530U_NAMESPACE_END
531
532#endif