Home | History | Annotate | Download | only in i18n
      1 //  2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 /*
      4 *******************************************************************************
      5 * Copyright (C) 2009-2011, International Business Machines Corporation and
      6 * others. All Rights Reserved.
      7 *******************************************************************************
      8 */
      9 
     10 /**
     11  * \file
     12  * \brief C API: Time zone rule classes
     13  */
     14 
     15 #include "unicode/utypes.h"
     16 
     17 #if !UCONFIG_NO_FORMATTING
     18 
     19 #include "unicode/uobject.h"
     20 #include "zrule.h"
     21 #include "unicode/tzrule.h"
     22 #include "cmemory.h"
     23 #include "unicode/ustring.h"
     24 #include "unicode/parsepos.h"
     25 
     26 U_NAMESPACE_USE
     27 
     28 /*********************************************************************
     29  * ZRule API
     30  *********************************************************************/
     31 
     32 U_CAPI void U_EXPORT2
     33 zrule_close(ZRule* rule) {
     34     delete (TimeZoneRule*)rule;
     35 }
     36 
     37 U_CAPI UBool U_EXPORT2
     38 zrule_equals(const ZRule* rule1, const ZRule* rule2) {
     39     return *(const TimeZoneRule*)rule1 == *(const TimeZoneRule*)rule2;
     40 }
     41 
     42 U_CAPI void U_EXPORT2
     43 zrule_getName(ZRule* rule, UChar* name, int32_t nameLength) {
     44     UnicodeString s(nameLength==-1, name, nameLength);
     45     s = ((TimeZoneRule*)rule)->TimeZoneRule::getName(s);
     46     nameLength = s.length();
     47     memcpy(name, s.getBuffer(), nameLength);
     48     return;
     49 }
     50 
     51 U_CAPI int32_t U_EXPORT2
     52 zrule_getRawOffset(ZRule* rule) {
     53     return ((TimeZoneRule*)rule)->TimeZoneRule::getRawOffset();
     54 }
     55 
     56 U_CAPI int32_t U_EXPORT2
     57 zrule_getDSTSavings(ZRule* rule) {
     58     return ((TimeZoneRule*)rule)->TimeZoneRule::getDSTSavings();
     59 }
     60 
     61 U_CAPI UBool U_EXPORT2
     62 zrule_isEquivalentTo(ZRule* rule1,  ZRule* rule2) {
     63     return ((TimeZoneRule*)rule1)->TimeZoneRule::isEquivalentTo(*(TimeZoneRule*)rule2);
     64 }
     65 
     66 /*********************************************************************
     67  * IZRule API
     68  *********************************************************************/
     69 
     70 U_CAPI IZRule* U_EXPORT2
     71 izrule_open(const UChar* name, int32_t nameLength, int32_t rawOffset, int32_t dstSavings) {
     72     UnicodeString s(nameLength==-1, name, nameLength);
     73     return (IZRule*) new InitialTimeZoneRule(s, rawOffset, dstSavings);
     74 }
     75 
     76 U_CAPI void U_EXPORT2
     77 izrule_close(IZRule* rule) {
     78     delete (InitialTimeZoneRule*)rule;
     79 }
     80 
     81 U_CAPI IZRule* U_EXPORT2
     82 izrule_clone(IZRule *rule) {
     83     return (IZRule*) (((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::clone());
     84 }
     85 
     86 U_CAPI UBool U_EXPORT2
     87 izrule_equals(const IZRule* rule1, const IZRule* rule2) {
     88     return *(const InitialTimeZoneRule*)rule1 == *(const InitialTimeZoneRule*)rule2;
     89 }
     90 
     91 U_CAPI void U_EXPORT2
     92 izrule_getName(IZRule* rule, UChar* & name, int32_t & nameLength) {
     93     // UnicodeString s(nameLength==-1, name, nameLength);
     94     UnicodeString s;
     95     ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getName(s);
     96     nameLength = s.length();
     97     name = (UChar*)uprv_malloc(nameLength);
     98     memcpy(name, s.getBuffer(), nameLength);
     99     return;
    100 }
    101 
    102 U_CAPI int32_t U_EXPORT2
    103 izrule_getRawOffset(IZRule* rule) {
    104     return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getRawOffset();
    105 }
    106 
    107 U_CAPI int32_t U_EXPORT2
    108 izrule_getDSTSavings(IZRule* rule) {
    109     return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getDSTSavings();
    110 }
    111 
    112 U_CAPI UBool U_EXPORT2
    113 izrule_isEquivalentTo(IZRule* rule1,  IZRule* rule2) {
    114     return ((InitialTimeZoneRule*)rule1)->InitialTimeZoneRule::isEquivalentTo(*(InitialTimeZoneRule*)rule2);
    115 }
    116 
    117 U_CAPI UBool U_EXPORT2
    118 izrule_getFirstStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings,
    119                     UDate& result) {
    120     return ((const InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getFirstStart(prevRawOffset, prevDSTSavings, result);
    121 }
    122 
    123 U_CAPI UBool U_EXPORT2
    124 izrule_getFinalStart(IZRule* rule, int32_t prevRawOffset, int32_t prevDSTSavings,
    125                     UDate& result) {
    126     return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getFinalStart(prevRawOffset, prevDSTSavings, result);
    127 }
    128 
    129 U_CAPI UBool U_EXPORT2
    130 izrule_getNextStart(IZRule* rule, UDate base, int32_t prevRawOffset,
    131                    int32_t prevDSTSavings, UBool inclusive, UDate& result) {
    132     return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getNextStart(base, prevRawOffset, prevDSTSavings, inclusive, result);
    133 }
    134 
    135 U_CAPI UBool U_EXPORT2
    136 izrule_getPreviousStart(IZRule* rule, UDate base, int32_t prevRawOffset,
    137                        int32_t prevDSTSavings, UBool inclusive, UDate& result) {
    138     return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getPreviousStart(base, prevRawOffset, prevDSTSavings, inclusive, result);
    139 }
    140 
    141 U_CAPI UClassID U_EXPORT2
    142 izrule_getStaticClassID(IZRule* rule) {
    143     return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getStaticClassID();
    144 }
    145 
    146 U_CAPI UClassID U_EXPORT2
    147 izrule_getDynamicClassID(IZRule* rule) {
    148     return ((InitialTimeZoneRule*)rule)->InitialTimeZoneRule::getDynamicClassID();
    149 }
    150 
    151 #endif
    152