• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
zrule_close(ZRule * rule)31 zrule_close(ZRule* rule) {
32     delete (TimeZoneRule*)rule;
33 }
34 
35 U_CAPI UBool U_EXPORT2
zrule_equals(const ZRule * rule1,const ZRule * rule2)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
zrule_getName(ZRule * rule,UChar * name,int32_t nameLength)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
zrule_getRawOffset(ZRule * rule)50 zrule_getRawOffset(ZRule* rule) {
51     return ((TimeZoneRule*)rule)->TimeZoneRule::getRawOffset();
52 }
53 
54 U_CAPI int32_t U_EXPORT2
zrule_getDSTSavings(ZRule * rule)55 zrule_getDSTSavings(ZRule* rule) {
56     return ((TimeZoneRule*)rule)->TimeZoneRule::getDSTSavings();
57 }
58 
59 U_CAPI UBool U_EXPORT2
zrule_isEquivalentTo(ZRule * rule1,ZRule * rule2)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
izrule_open(const UChar * name,int32_t nameLength,int32_t rawOffset,int32_t dstSavings)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
izrule_close(IZRule * rule)75 izrule_close(IZRule* rule) {
76     delete (InitialTimeZoneRule*)rule;
77 }
78 
79 U_CAPI IZRule* U_EXPORT2
izrule_clone(IZRule * rule)80 izrule_clone(IZRule *rule) {
81     return (IZRule*) (((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::clone());
82 }
83 
84 U_CAPI UBool U_EXPORT2
izrule_equals(const IZRule * rule1,const IZRule * rule2)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
izrule_getName(IZRule * rule,UChar * & name,int32_t & nameLength)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
izrule_getRawOffset(IZRule * rule)101 izrule_getRawOffset(IZRule* rule) {
102     return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getRawOffset();
103 }
104 
105 U_CAPI int32_t U_EXPORT2
izrule_getDSTSavings(IZRule * rule)106 izrule_getDSTSavings(IZRule* rule) {
107     return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getDSTSavings();
108 }
109 
110 U_CAPI UBool U_EXPORT2
izrule_isEquivalentTo(IZRule * rule1,IZRule * rule2)111 izrule_isEquivalentTo(IZRule* rule1,  IZRule* rule2) {
112     return ((InitialTimeZoneRule*)rule1)->InitialTimeZoneRule::isEquivalentTo(*(InitialTimeZoneRule*)rule2);
113 }
114 
115 U_CAPI UBool U_EXPORT2
izrule_getFirstStart(IZRule * rule,int32_t prevRawOffset,int32_t prevDSTSavings,UDate & result)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
izrule_getFinalStart(IZRule * rule,int32_t prevRawOffset,int32_t prevDSTSavings,UDate & result)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
izrule_getNextStart(IZRule * rule,UDate base,int32_t prevRawOffset,int32_t prevDSTSavings,UBool inclusive,UDate & result)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
izrule_getPreviousStart(IZRule * rule,UDate base,int32_t prevRawOffset,int32_t prevDSTSavings,UBool inclusive,UDate & result)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
izrule_getStaticClassID(IZRule * rule)140 izrule_getStaticClassID(IZRule* rule) {
141     return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getStaticClassID();
142 }
143 
144 U_CAPI UClassID U_EXPORT2
izrule_getDynamicClassID(IZRule * rule)145 izrule_getDynamicClassID(IZRule* rule) {
146     return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getDynamicClassID();
147 }
148 
149 #endif
150