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