|
1 /* |
|
2 ******************************************************************************* |
|
3 * Copyright (C) 2009-2011, International Business Machines Corporation and |
|
4 * others. All Rights Reserved. |
|
5 ******************************************************************************* |
|
6 */ |
|
7 |
|
8 /** |
|
9 * \file |
|
10 * \brief C API: Time zone rule classes |
|
11 */ |
|
12 |
|
13 #include "unicode/utypes.h" |
|
14 |
|
15 #if !UCONFIG_NO_FORMATTING |
|
16 |
|
17 #include "unicode/uobject.h" |
|
18 #include "zrule.h" |
|
19 #include "unicode/tzrule.h" |
|
20 #include "cmemory.h" |
|
21 #include "unicode/ustring.h" |
|
22 #include "unicode/parsepos.h" |
|
23 |
|
24 U_NAMESPACE_USE |
|
25 |
|
26 /********************************************************************* |
|
27 * ZRule API |
|
28 *********************************************************************/ |
|
29 |
|
30 U_CAPI void U_EXPORT2 |
|
31 zrule_close(ZRule* rule) { |
|
32 delete (TimeZoneRule*)rule; |
|
33 } |
|
34 |
|
35 U_CAPI UBool U_EXPORT2 |
|
36 zrule_equals(const ZRule* rule1, const ZRule* rule2) { |
|
37 return *(const TimeZoneRule*)rule1 == *(const TimeZoneRule*)rule2; |
|
38 } |
|
39 |
|
40 U_CAPI void U_EXPORT2 |
|
41 zrule_getName(ZRule* rule, UChar* name, int32_t nameLength) { |
|
42 UnicodeString s(nameLength==-1, name, nameLength); |
|
43 s = ((TimeZoneRule*)rule)->TimeZoneRule::getName(s); |
|
44 nameLength = s.length(); |
|
45 memcpy(name, s.getBuffer(), nameLength); |
|
46 return; |
|
47 } |
|
48 |
|
49 U_CAPI int32_t U_EXPORT2 |
|
50 zrule_getRawOffset(ZRule* rule) { |
|
51 return ((TimeZoneRule*)rule)->TimeZoneRule::getRawOffset(); |
|
52 } |
|
53 |
|
54 U_CAPI int32_t U_EXPORT2 |
|
55 zrule_getDSTSavings(ZRule* rule) { |
|
56 return ((TimeZoneRule*)rule)->TimeZoneRule::getDSTSavings(); |
|
57 } |
|
58 |
|
59 U_CAPI UBool U_EXPORT2 |
|
60 zrule_isEquivalentTo(ZRule* rule1, ZRule* rule2) { |
|
61 return ((TimeZoneRule*)rule1)->TimeZoneRule::isEquivalentTo(*(TimeZoneRule*)rule2); |
|
62 } |
|
63 |
|
64 /********************************************************************* |
|
65 * IZRule API |
|
66 *********************************************************************/ |
|
67 |
|
68 U_CAPI IZRule* U_EXPORT2 |
|
69 izrule_open(const UChar* name, int32_t nameLength, int32_t rawOffset, int32_t dstSavings) { |
|
70 UnicodeString s(nameLength==-1, name, nameLength); |
|
71 return (IZRule*) new InitialTimeZoneRule(s, rawOffset, dstSavings); |
|
72 } |
|
73 |
|
74 U_CAPI void U_EXPORT2 |
|
75 izrule_close(IZRule* rule) { |
|
76 delete (InitialTimeZoneRule*)rule; |
|
77 } |
|
78 |
|
79 U_CAPI IZRule* U_EXPORT2 |
|
80 izrule_clone(IZRule *rule) { |
|
81 return (IZRule*) (((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::clone()); |
|
82 } |
|
83 |
|
84 U_CAPI UBool U_EXPORT2 |
|
85 izrule_equals(const IZRule* rule1, const IZRule* rule2) { |
|
86 return *(const InitialTimeZoneRule*)rule1 == *(const InitialTimeZoneRule*)rule2; |
|
87 } |
|
88 |
|
89 U_CAPI void U_EXPORT2 |
|
90 izrule_getName(IZRule* rule, UChar* & name, int32_t & nameLength) { |
|
91 // UnicodeString s(nameLength==-1, name, nameLength); |
|
92 UnicodeString s; |
|
93 ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getName(s); |
|
94 nameLength = s.length(); |
|
95 name = (UChar*)uprv_malloc(nameLength); |
|
96 memcpy(name, s.getBuffer(), nameLength); |
|
97 return; |
|
98 } |
|
99 |
|
100 U_CAPI int32_t U_EXPORT2 |
|
101 izrule_getRawOffset(IZRule* rule) { |
|
102 return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getRawOffset(); |
|
103 } |
|
104 |
|
105 U_CAPI int32_t U_EXPORT2 |
|
106 izrule_getDSTSavings(IZRule* rule) { |
|
107 return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getDSTSavings(); |
|
108 } |
|
109 |
|
110 U_CAPI UBool U_EXPORT2 |
|
111 izrule_isEquivalentTo(IZRule* rule1, IZRule* rule2) { |
|
112 return ((InitialTimeZoneRule*)rule1)->InitialTimeZoneRule::isEquivalentTo(*(InitialTimeZoneRule*)rule2); |
|
113 } |
|
114 |
|
115 U_CAPI UBool U_EXPORT2 |
|
116 izrule_getFirstStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings, |
|
117 UDate& result) { |
|
118 return ((const InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getFirstStart(prevRawOffset, prevDSTSavings, result); |
|
119 } |
|
120 |
|
121 U_CAPI UBool U_EXPORT2 |
|
122 izrule_getFinalStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings, |
|
123 UDate& result) { |
|
124 return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getFinalStart(prevRawOffset, prevDSTSavings, result); |
|
125 } |
|
126 |
|
127 U_CAPI UBool U_EXPORT2 |
|
128 izrule_getNextStart(IZRule* rule, UDate base, int32_t prevRawOffset, |
|
129 int32_t prevDSTSavings, UBool inclusive, UDate& result) { |
|
130 return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getNextStart(base, prevRawOffset, prevDSTSavings, inclusive, result); |
|
131 } |
|
132 |
|
133 U_CAPI UBool U_EXPORT2 |
|
134 izrule_getPreviousStart(IZRule* rule, UDate base, int32_t prevRawOffset, |
|
135 int32_t prevDSTSavings, UBool inclusive, UDate& result) { |
|
136 return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getPreviousStart(base, prevRawOffset, prevDSTSavings, inclusive, result); |
|
137 } |
|
138 |
|
139 U_CAPI UClassID U_EXPORT2 |
|
140 izrule_getStaticClassID(IZRule* rule) { |
|
141 return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getStaticClassID(); |
|
142 } |
|
143 |
|
144 U_CAPI UClassID U_EXPORT2 |
|
145 izrule_getDynamicClassID(IZRule* rule) { |
|
146 return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getDynamicClassID(); |
|
147 } |
|
148 |
|
149 #endif |