Home | History | Annotate | Download | only in i18n
      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
     31 zrule_close(ZRule* rule) {
     32     delete (TimeZoneRule*)rule;
     33 }
     34 
     35 U_CAPI UBool U_EXPORT2
     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
     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
     50 zrule_getRawOffset(ZRule* rule) {
     51     return ((TimeZoneRule*)rule)->TimeZoneRule::getRawOffset();
     52 }
     53 
     54 U_CAPI int32_t U_EXPORT2
     55 zrule_getDSTSavings(ZRule* rule) {
     56     return ((TimeZoneRule*)rule)->TimeZoneRule::getDSTSavings();
     57 }
     58 
     59 U_CAPI UBool U_EXPORT2
     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
     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
     75 izrule_close(IZRule* rule) {
     76     delete (InitialTimeZoneRule*)rule;
     77 }
     78 
     79 U_CAPI IZRule* U_EXPORT2
     80 izrule_clone(IZRule *rule) {
     81     return (IZRule*) (((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::clone());
     82 }
     83 
     84 U_CAPI UBool U_EXPORT2
     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
     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
    101 izrule_getRawOffset(IZRule* rule) {
    102     return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getRawOffset();
    103 }
    104 
    105 U_CAPI int32_t U_EXPORT2
    106 izrule_getDSTSavings(IZRule* rule) {
    107     return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getDSTSavings();
    108 }
    109 
    110 U_CAPI UBool U_EXPORT2
    111 izrule_isEquivalentTo(IZRule* rule1,  IZRule* rule2) {
    112     return ((InitialTimeZoneRule*)rule1)->InitialTimeZoneRule::isEquivalentTo(*(InitialTimeZoneRule*)rule2);
    113 }
    114 
    115 U_CAPI UBool U_EXPORT2
    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
    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
    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
    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
    140 izrule_getStaticClassID(IZRule* rule) {
    141     return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getStaticClassID();
    142 }
    143 
    144 U_CAPI UClassID U_EXPORT2
    145 izrule_getDynamicClassID(IZRule* rule) {
    146     return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getDynamicClassID();
    147 }
    148 
    149 #endif
    150