1 /********************************************************************
3 * Copyright (c) 2007, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 ********************************************************************/
7 #include "unicode/udbgutil.h"
12 int32_t prefix
; /* how many characters to remove - i.e. UCHAR_ = 5 */
17 #define DBG_ARRAY_COUNT(x) (sizeof(x)/sizeof(x[0]))
22 #if !UCONFIG_NO_FORMATTING
24 #include "unicode/ucal.h"
29 #define FIELD_NAME_STR(y,x) { y, #x, x }
31 #define LEN_UCAL 5 /* UCAL_ */
33 static const int32_t count_UCalendarDateFields
= UCAL_FIELD_COUNT
;
35 static const Field names_UCalendarDateFields
[] =
37 FIELD_NAME_STR( LEN_UCAL
, UCAL_ERA
),
38 FIELD_NAME_STR( LEN_UCAL
, UCAL_YEAR
),
39 FIELD_NAME_STR( LEN_UCAL
, UCAL_MONTH
),
40 FIELD_NAME_STR( LEN_UCAL
, UCAL_WEEK_OF_YEAR
),
41 FIELD_NAME_STR( LEN_UCAL
, UCAL_WEEK_OF_MONTH
),
42 FIELD_NAME_STR( LEN_UCAL
, UCAL_DATE
),
43 FIELD_NAME_STR( LEN_UCAL
, UCAL_DAY_OF_YEAR
),
44 FIELD_NAME_STR( LEN_UCAL
, UCAL_DAY_OF_WEEK
),
45 FIELD_NAME_STR( LEN_UCAL
, UCAL_DAY_OF_WEEK_IN_MONTH
),
46 FIELD_NAME_STR( LEN_UCAL
, UCAL_AM_PM
),
47 FIELD_NAME_STR( LEN_UCAL
, UCAL_HOUR
),
48 FIELD_NAME_STR( LEN_UCAL
, UCAL_HOUR_OF_DAY
),
49 FIELD_NAME_STR( LEN_UCAL
, UCAL_MINUTE
),
50 FIELD_NAME_STR( LEN_UCAL
, UCAL_SECOND
),
51 FIELD_NAME_STR( LEN_UCAL
, UCAL_MILLISECOND
),
52 FIELD_NAME_STR( LEN_UCAL
, UCAL_ZONE_OFFSET
),
53 FIELD_NAME_STR( LEN_UCAL
, UCAL_DST_OFFSET
),
54 FIELD_NAME_STR( LEN_UCAL
, UCAL_YEAR_WOY
),
55 FIELD_NAME_STR( LEN_UCAL
, UCAL_DOW_LOCAL
),
56 FIELD_NAME_STR( LEN_UCAL
, UCAL_EXTENDED_YEAR
),
57 FIELD_NAME_STR( LEN_UCAL
, UCAL_JULIAN_DAY
),
58 FIELD_NAME_STR( LEN_UCAL
, UCAL_MILLISECONDS_IN_DAY
),
59 FIELD_NAME_STR( LEN_UCAL
, UCAL_IS_LEAP_MONTH
),
63 static const int32_t count_UCalendarMonths
= UCAL_UNDECIMBER
+1;
65 static const Field names_UCalendarMonths
[] =
67 FIELD_NAME_STR( LEN_UCAL
, UCAL_JANUARY
),
68 FIELD_NAME_STR( LEN_UCAL
, UCAL_FEBRUARY
),
69 FIELD_NAME_STR( LEN_UCAL
, UCAL_MARCH
),
70 FIELD_NAME_STR( LEN_UCAL
, UCAL_APRIL
),
71 FIELD_NAME_STR( LEN_UCAL
, UCAL_MAY
),
72 FIELD_NAME_STR( LEN_UCAL
, UCAL_JUNE
),
73 FIELD_NAME_STR( LEN_UCAL
, UCAL_JULY
),
74 FIELD_NAME_STR( LEN_UCAL
, UCAL_AUGUST
),
75 FIELD_NAME_STR( LEN_UCAL
, UCAL_SEPTEMBER
),
76 FIELD_NAME_STR( LEN_UCAL
, UCAL_OCTOBER
),
77 FIELD_NAME_STR( LEN_UCAL
, UCAL_NOVEMBER
),
78 FIELD_NAME_STR( LEN_UCAL
, UCAL_DECEMBER
),
79 FIELD_NAME_STR( LEN_UCAL
, UCAL_UNDECIMBER
)
82 #include "unicode/udat.h"
84 #define LEN_UDAT 5 /* "UDAT_" */
86 static const int32_t count_UDateFormatStyle
= UDAT_SHORT
+1;
88 static const Field names_UDateFormatStyle
[] =
90 FIELD_NAME_STR( LEN_UDAT
, UDAT_FULL
),
91 FIELD_NAME_STR( LEN_UDAT
, UDAT_LONG
),
92 FIELD_NAME_STR( LEN_UDAT
, UDAT_MEDIUM
),
93 FIELD_NAME_STR( LEN_UDAT
, UDAT_SHORT
),
96 * negative enums.. leave out for now.
97 FIELD_NAME_STR( LEN_UDAT, UDAT_NONE ),
98 FIELD_NAME_STR( LEN_UDAT, UDAT_IGNORE ),
104 #define LEN_UDBG 5 /* "UDBG_" */
106 static const int32_t count_UDebugEnumType
= UDBG_ENUM_COUNT
;
108 static const Field names_UDebugEnumType
[] =
110 FIELD_NAME_STR( LEN_UDBG
, UDBG_UDebugEnumType
),
111 FIELD_NAME_STR( LEN_UDBG
, UDBG_UCalendarDateFields
),
112 FIELD_NAME_STR( LEN_UDBG
, UDBG_UCalendarMonths
),
113 FIELD_NAME_STR( LEN_UDBG
, UDBG_UDateFormatStyle
),
117 #define COUNT_CASE(x) case UDBG_##x: return (actual?count_##x:DBG_ARRAY_COUNT(names_##x));
118 #define COUNT_FAIL_CASE(x) case UDBG_##x: return -1;
120 #define FIELD_CASE(x) case UDBG_##x: return names_##x;
121 #define FIELD_FAIL_CASE(x) case UDBG_##x: return NULL;
125 #define COUNT_CASE(x)
126 #define COUNT_FAIL_CASE(x)
128 #define FIELD_CASE(X)
129 #define FIELD_FAIL_CASE(x)
136 * @param type type of item
137 * @param actual TRUE: for the actual enum's type (UCAL_FIELD_COUNT, etc), or FALSE for the string count
139 static int32_t _udbg_enumCount(UDebugEnumType type
, UBool actual
) {
141 COUNT_CASE(UDebugEnumType
)
142 COUNT_CASE(UCalendarDateFields
)
143 COUNT_CASE(UCalendarMonths
)
144 COUNT_CASE(UDateFormatStyle
)
145 // COUNT_FAIL_CASE(UNonExistentEnum)
151 static const Field
* _udbg_enumFields(UDebugEnumType type
) {
153 FIELD_CASE(UDebugEnumType
)
154 FIELD_CASE(UCalendarDateFields
)
155 FIELD_CASE(UCalendarMonths
)
156 FIELD_CASE(UDateFormatStyle
)
157 // FIELD_FAIL_CASE(UNonExistentEnum)
165 int32_t udbg_enumCount(UDebugEnumType type
) {
166 return _udbg_enumCount(type
, FALSE
);
169 int32_t udbg_enumExpectedCount(UDebugEnumType type
) {
170 return _udbg_enumCount(type
, TRUE
);
173 const char * udbg_enumName(UDebugEnumType type
, int32_t field
) {
175 field
>=_udbg_enumCount(type
,FALSE
)) { // also will catch unsupported items
178 const Field
*fields
= _udbg_enumFields(type
);
182 return fields
[field
].str
+ fields
[field
].prefix
;
187 int32_t udbg_enumArrayValue(UDebugEnumType type
, int32_t field
) {
189 field
>=_udbg_enumCount(type
,FALSE
)) { // also will catch unsupported items
192 const Field
*fields
= _udbg_enumFields(type
);
196 return fields
[field
].num
;