150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/*
250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*******************************************************************************
350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* Copyright (C) 2009-2010, International Business Machines Corporation and         *
450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* others. All Rights Reserved.                                                *
550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*******************************************************************************
650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*/
750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/**
950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * \file
1050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * \brief C API: Time zone rule classes
1150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */
1250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/utypes.h"
1427f654740f2a26ad62a5c155af9199af9e69b889claireho
1527f654740f2a26ad62a5c155af9199af9e69b889claireho#if !UCONFIG_NO_FORMATTING
1627f654740f2a26ad62a5c155af9199af9e69b889claireho
1750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/uobject.h"
1850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "zrule.h"
1950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/tzrule.h"
2050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "cmemory.h"
2150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/ustring.h"
2250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/parsepos.h"
2350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_USE
2550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/*********************************************************************
2750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * ZRule API
2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *********************************************************************/
2950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI void U_EXPORT2
3150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehozrule_close(ZRule* rule) {
3250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete (TimeZoneRule*)rule;
3350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
3450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI UBool U_EXPORT2
3650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehozrule_equals(const ZRule* rule1, const ZRule* rule2) {
3750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return *(const TimeZoneRule*)rule1 == *(const TimeZoneRule*)rule2;
3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
3950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
4050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI void U_EXPORT2
4150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehozrule_getName(ZRule* rule, UChar* name, int32_t nameLength) {
4250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString s(nameLength==-1, name, nameLength);
4350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    s = ((TimeZoneRule*)rule)->TimeZoneRule::getName(s);
4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    nameLength = s.length();
4550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    memcpy(name, s.getBuffer(), nameLength);
4650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return;
4750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
4850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
4950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI int32_t U_EXPORT2
5050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehozrule_getRawOffset(ZRule* rule) {
5150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return ((TimeZoneRule*)rule)->TimeZoneRule::getRawOffset();
5250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
5350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
5450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI int32_t U_EXPORT2
5550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehozrule_getDSTSavings(ZRule* rule) {
5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return ((TimeZoneRule*)rule)->TimeZoneRule::getDSTSavings();
5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
5850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
5950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI UBool U_EXPORT2
6050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehozrule_isEquivalentTo(ZRule* rule1,  ZRule* rule2) {
6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return ((TimeZoneRule*)rule1)->TimeZoneRule::isEquivalentTo(*(TimeZoneRule*)rule2);
6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/*********************************************************************
6550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * IZRule API
6650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *********************************************************************/
6750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
6850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI IZRule* U_EXPORT2
6950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoizrule_open(const UChar* name, int32_t nameLength, int32_t rawOffset, int32_t dstSavings) {
7050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString s(nameLength==-1, name, nameLength);
7150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return (IZRule*) new InitialTimeZoneRule(name, rawOffset, dstSavings);
7250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
7350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
7450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI void U_EXPORT2
7550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoizrule_close(IZRule* rule) {
7650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete (InitialTimeZoneRule*)rule;
7750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
7850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
7950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI IZRule* U_EXPORT2
8050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoizrule_clone(IZRule *rule) {
8150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return (IZRule*) (((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::clone());
8250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
8350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
8450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI UBool U_EXPORT2
8550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoizrule_equals(const IZRule* rule1, const IZRule* rule2) {
8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return *(const InitialTimeZoneRule*)rule1 == *(const InitialTimeZoneRule*)rule2;
8750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
8850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
8950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI void U_EXPORT2
9050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoizrule_getName(IZRule* rule, UChar* & name, int32_t & nameLength) {
9150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // UnicodeString s(nameLength==-1, name, nameLength);
9250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString s;
9350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getName(s);
9450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    nameLength = s.length();
9550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    name = (UChar*)uprv_malloc(nameLength);
9650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    memcpy(name, s.getBuffer(), nameLength);
9750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return;
9850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
9950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
10050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI int32_t U_EXPORT2
10150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoizrule_getRawOffset(IZRule* rule) {
10250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getRawOffset();
10350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
10450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
10550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI int32_t U_EXPORT2
10650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoizrule_getDSTSavings(IZRule* rule) {
10750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getDSTSavings();
10850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
10950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
11050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI UBool U_EXPORT2
11150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoizrule_isEquivalentTo(IZRule* rule1,  IZRule* rule2) {
11250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return ((InitialTimeZoneRule*)rule1)->InitialTimeZoneRule::isEquivalentTo(*(InitialTimeZoneRule*)rule2);
11350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
11450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
11550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI UBool U_EXPORT2
11650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoizrule_getFirstStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings,
11750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UDate& result) {
11850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return ((const InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getFirstStart(prevRawOffset, prevDSTSavings, result);
11950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
12050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
12150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI UBool U_EXPORT2
12250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoizrule_getFinalStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings,
12350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UDate& result) {
12450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getFinalStart(prevRawOffset, prevDSTSavings, result);
12550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
12650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
12750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI UBool U_EXPORT2
12850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoizrule_getNextStart(IZRule* rule, UDate base, int32_t prevRawOffset,
12950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                   int32_t prevDSTSavings, UBool inclusive, UDate& result) {
13050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getNextStart(base, prevRawOffset, prevDSTSavings, inclusive, result);
13150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
13250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
13350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI UBool U_EXPORT2
13450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoizrule_getPreviousStart(IZRule* rule, UDate base, int32_t prevRawOffset,
13550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                       int32_t prevDSTSavings, UBool inclusive, UDate& result) {
13650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getPreviousStart(base, prevRawOffset, prevDSTSavings, inclusive, result);
13750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
13850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
13950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI UClassID U_EXPORT2
14050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoizrule_getStaticClassID(IZRule* rule) {
14150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getStaticClassID();
14250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
14350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
14450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI UClassID U_EXPORT2
14550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoizrule_getDynamicClassID(IZRule* rule) {
14650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getDynamicClassID();
14750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
14850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
14927f654740f2a26ad62a5c155af9199af9e69b889claireho#endif
150