16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 2009-2011, International Business Machines Corporation and 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C API: Time zone rule classes 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uobject.h" 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "zrule.h" 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/tzrule.h" 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cmemory.h" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/parsepos.h" 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_USE 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/********************************************************************* 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ZRule API 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *********************************************************************/ 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgzrule_close(ZRule* rule) { 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete (TimeZoneRule*)rule; 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UBool U_EXPORT2 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgzrule_equals(const ZRule* rule1, const ZRule* rule2) { 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return *(const TimeZoneRule*)rule1 == *(const TimeZoneRule*)rule2; 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgzrule_getName(ZRule* rule, UChar* name, int32_t nameLength) { 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString s(nameLength==-1, name, nameLength); 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org s = ((TimeZoneRule*)rule)->TimeZoneRule::getName(s); 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nameLength = s.length(); 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memcpy(name, s.getBuffer(), nameLength); 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgzrule_getRawOffset(ZRule* rule) { 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((TimeZoneRule*)rule)->TimeZoneRule::getRawOffset(); 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgzrule_getDSTSavings(ZRule* rule) { 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((TimeZoneRule*)rule)->TimeZoneRule::getDSTSavings(); 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UBool U_EXPORT2 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgzrule_isEquivalentTo(ZRule* rule1, ZRule* rule2) { 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((TimeZoneRule*)rule1)->TimeZoneRule::isEquivalentTo(*(TimeZoneRule*)rule2); 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/********************************************************************* 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * IZRule API 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *********************************************************************/ 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI IZRule* U_EXPORT2 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgizrule_open(const UChar* name, int32_t nameLength, int32_t rawOffset, int32_t dstSavings) { 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString s(nameLength==-1, name, nameLength); 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (IZRule*) new InitialTimeZoneRule(s, rawOffset, dstSavings); 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgizrule_close(IZRule* rule) { 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete (InitialTimeZoneRule*)rule; 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI IZRule* U_EXPORT2 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgizrule_clone(IZRule *rule) { 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (IZRule*) (((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::clone()); 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UBool U_EXPORT2 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgizrule_equals(const IZRule* rule1, const IZRule* rule2) { 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return *(const InitialTimeZoneRule*)rule1 == *(const InitialTimeZoneRule*)rule2; 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgizrule_getName(IZRule* rule, UChar* & name, int32_t & nameLength) { 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // UnicodeString s(nameLength==-1, name, nameLength); 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString s; 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getName(s); 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nameLength = s.length(); 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = (UChar*)uprv_malloc(nameLength); 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memcpy(name, s.getBuffer(), nameLength); 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgizrule_getRawOffset(IZRule* rule) { 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getRawOffset(); 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgizrule_getDSTSavings(IZRule* rule) { 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getDSTSavings(); 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UBool U_EXPORT2 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgizrule_isEquivalentTo(IZRule* rule1, IZRule* rule2) { 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((InitialTimeZoneRule*)rule1)->InitialTimeZoneRule::isEquivalentTo(*(InitialTimeZoneRule*)rule2); 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UBool U_EXPORT2 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgizrule_getFirstStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings, 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate& result) { 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((const InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getFirstStart(prevRawOffset, prevDSTSavings, result); 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UBool U_EXPORT2 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgizrule_getFinalStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings, 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate& result) { 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getFinalStart(prevRawOffset, prevDSTSavings, result); 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UBool U_EXPORT2 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgizrule_getNextStart(IZRule* rule, UDate base, int32_t prevRawOffset, 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t prevDSTSavings, UBool inclusive, UDate& result) { 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getNextStart(base, prevRawOffset, prevDSTSavings, inclusive, result); 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UBool U_EXPORT2 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgizrule_getPreviousStart(IZRule* rule, UDate base, int32_t prevRawOffset, 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t prevDSTSavings, UBool inclusive, UDate& result) { 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getPreviousStart(base, prevRawOffset, prevDSTSavings, inclusive, result); 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UClassID U_EXPORT2 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgizrule_getStaticClassID(IZRule* rule) { 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getStaticClassID(); 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UClassID U_EXPORT2 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgizrule_getDynamicClassID(IZRule* rule) { 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getDynamicClassID(); 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 150