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 24U_NAMESPACE_USE 25 26/********************************************************************* 27 * ZRule API 28 *********************************************************************/ 29 30U_CAPI void U_EXPORT2 31zrule_close(ZRule* rule) { 32 delete (TimeZoneRule*)rule; 33} 34 35U_CAPI UBool U_EXPORT2 36zrule_equals(const ZRule* rule1, const ZRule* rule2) { 37 return *(const TimeZoneRule*)rule1 == *(const TimeZoneRule*)rule2; 38} 39 40U_CAPI void U_EXPORT2 41zrule_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 49U_CAPI int32_t U_EXPORT2 50zrule_getRawOffset(ZRule* rule) { 51 return ((TimeZoneRule*)rule)->TimeZoneRule::getRawOffset(); 52} 53 54U_CAPI int32_t U_EXPORT2 55zrule_getDSTSavings(ZRule* rule) { 56 return ((TimeZoneRule*)rule)->TimeZoneRule::getDSTSavings(); 57} 58 59U_CAPI UBool U_EXPORT2 60zrule_isEquivalentTo(ZRule* rule1, ZRule* rule2) { 61 return ((TimeZoneRule*)rule1)->TimeZoneRule::isEquivalentTo(*(TimeZoneRule*)rule2); 62} 63 64/********************************************************************* 65 * IZRule API 66 *********************************************************************/ 67 68U_CAPI IZRule* U_EXPORT2 69izrule_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 74U_CAPI void U_EXPORT2 75izrule_close(IZRule* rule) { 76 delete (InitialTimeZoneRule*)rule; 77} 78 79U_CAPI IZRule* U_EXPORT2 80izrule_clone(IZRule *rule) { 81 return (IZRule*) (((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::clone()); 82} 83 84U_CAPI UBool U_EXPORT2 85izrule_equals(const IZRule* rule1, const IZRule* rule2) { 86 return *(const InitialTimeZoneRule*)rule1 == *(const InitialTimeZoneRule*)rule2; 87} 88 89U_CAPI void U_EXPORT2 90izrule_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 100U_CAPI int32_t U_EXPORT2 101izrule_getRawOffset(IZRule* rule) { 102 return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getRawOffset(); 103} 104 105U_CAPI int32_t U_EXPORT2 106izrule_getDSTSavings(IZRule* rule) { 107 return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getDSTSavings(); 108} 109 110U_CAPI UBool U_EXPORT2 111izrule_isEquivalentTo(IZRule* rule1, IZRule* rule2) { 112 return ((InitialTimeZoneRule*)rule1)->InitialTimeZoneRule::isEquivalentTo(*(InitialTimeZoneRule*)rule2); 113} 114 115U_CAPI UBool U_EXPORT2 116izrule_getFirstStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings, 117 UDate& result) { 118 return ((const InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getFirstStart(prevRawOffset, prevDSTSavings, result); 119} 120 121U_CAPI UBool U_EXPORT2 122izrule_getFinalStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings, 123 UDate& result) { 124 return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getFinalStart(prevRawOffset, prevDSTSavings, result); 125} 126 127U_CAPI UBool U_EXPORT2 128izrule_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 133U_CAPI UBool U_EXPORT2 134izrule_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 139U_CAPI UClassID U_EXPORT2 140izrule_getStaticClassID(IZRule* rule) { 141 return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getStaticClassID(); 142} 143 144U_CAPI UClassID U_EXPORT2 145izrule_getDynamicClassID(IZRule* rule) { 146 return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getDynamicClassID(); 147} 148 149#endif 150