Home | History | Annotate | Download | only in unicode
      1 //  2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 /*
      4 *******************************************************************************
      5 * Copyright (C) 2007-2008, International Business Machines Corporation and         *
      6 * others. All Rights Reserved.                                                *
      7 *******************************************************************************
      8 */
      9 #ifndef TZTRANS_H
     10 #define TZTRANS_H
     11 
     12 /**
     13  * \file
     14  * \brief C++ API: Time zone transition
     15  */
     16 
     17 #include "unicode/utypes.h"
     18 
     19 #if !UCONFIG_NO_FORMATTING
     20 
     21 #include "unicode/uobject.h"
     22 
     23 U_NAMESPACE_BEGIN
     24 
     25 // Forward declaration
     26 class TimeZoneRule;
     27 
     28 /**
     29  * <code>TimeZoneTransition</code> is a class representing a time zone transition.
     30  * An instance has a time of transition and rules for both before and after the transition.
     31  * @stable ICU 3.8
     32  */
     33 class U_I18N_API TimeZoneTransition : public UObject {
     34 public:
     35     /**
     36      * Constructs a <code>TimeZoneTransition</code> with the time and the rules before/after
     37      * the transition.
     38      *
     39      * @param time  The time of transition in milliseconds since the base time.
     40      * @param from  The time zone rule used before the transition.
     41      * @param to    The time zone rule used after the transition.
     42      * @stable ICU 3.8
     43      */
     44     TimeZoneTransition(UDate time, const TimeZoneRule& from, const TimeZoneRule& to);
     45 
     46     /**
     47      * Constructs an empty <code>TimeZoneTransition</code>
     48      * @stable ICU 3.8
     49      */
     50     TimeZoneTransition();
     51 
     52     /**
     53      * Copy constructor.
     54      * @param source    The TimeZoneTransition object to be copied.
     55      * @stable ICU 3.8
     56      */
     57     TimeZoneTransition(const TimeZoneTransition& source);
     58 
     59     /**
     60      * Destructor.
     61      * @stable ICU 3.8
     62      */
     63     ~TimeZoneTransition();
     64 
     65     /**
     66      * Clone this TimeZoneTransition object polymorphically. The caller owns the result and
     67      * should delete it when done.
     68      * @return  A copy of the object.
     69      * @stable ICU 3.8
     70      */
     71     TimeZoneTransition* clone(void) const;
     72 
     73     /**
     74      * Assignment operator.
     75      * @param right The object to be copied.
     76      * @stable ICU 3.8
     77      */
     78     TimeZoneTransition& operator=(const TimeZoneTransition& right);
     79 
     80     /**
     81      * Return true if the given TimeZoneTransition objects are semantically equal. Objects
     82      * of different subclasses are considered unequal.
     83      * @param that  The object to be compared with.
     84      * @return  true if the given TimeZoneTransition objects are semantically equal.
     85      * @stable ICU 3.8
     86      */
     87     UBool operator==(const TimeZoneTransition& that) const;
     88 
     89     /**
     90      * Return true if the given TimeZoneTransition objects are semantically unequal. Objects
     91      * of different subclasses are considered unequal.
     92      * @param that  The object to be compared with.
     93      * @return  true if the given TimeZoneTransition objects are semantically unequal.
     94      * @stable ICU 3.8
     95      */
     96     UBool operator!=(const TimeZoneTransition& that) const;
     97 
     98     /**
     99      * Returns the time of transition in milliseconds.
    100      * @return The time of the transition in milliseconds since the 1970 Jan 1 epoch time.
    101      * @stable ICU 3.8
    102      */
    103     UDate getTime(void) const;
    104 
    105     /**
    106      * Sets the time of transition in milliseconds.
    107      * @param time The time of the transition in milliseconds since the 1970 Jan 1 epoch time.
    108      * @stable ICU 3.8
    109      */
    110     void setTime(UDate time);
    111 
    112     /**
    113      * Returns the rule used before the transition.
    114      * @return The time zone rule used after the transition.
    115      * @stable ICU 3.8
    116      */
    117     const TimeZoneRule* getFrom(void) const;
    118 
    119     /**
    120      * Sets the rule used before the transition.  The caller remains
    121      * responsible for deleting the <code>TimeZoneRule</code> object.
    122      * @param from The time zone rule used before the transition.
    123      * @stable ICU 3.8
    124      */
    125     void setFrom(const TimeZoneRule& from);
    126 
    127     /**
    128      * Adopts the rule used before the transition.  The caller must
    129      * not delete the <code>TimeZoneRule</code> object passed in.
    130      * @param from The time zone rule used before the transition.
    131      * @stable ICU 3.8
    132      */
    133     void adoptFrom(TimeZoneRule* from);
    134 
    135     /**
    136      * Sets the rule used after the transition.  The caller remains
    137      * responsible for deleting the <code>TimeZoneRule</code> object.
    138      * @param to The time zone rule used after the transition.
    139      * @stable ICU 3.8
    140      */
    141     void setTo(const TimeZoneRule& to);
    142 
    143     /**
    144      * Adopts the rule used after the transition.  The caller must
    145      * not delete the <code>TimeZoneRule</code> object passed in.
    146      * @param to The time zone rule used after the transition.
    147      * @stable ICU 3.8
    148      */
    149     void adoptTo(TimeZoneRule* to);
    150 
    151     /**
    152      * Returns the rule used after the transition.
    153      * @return The time zone rule used after the transition.
    154      * @stable ICU 3.8
    155      */
    156     const TimeZoneRule* getTo(void) const;
    157 
    158 private:
    159     UDate   fTime;
    160     TimeZoneRule*   fFrom;
    161     TimeZoneRule*   fTo;
    162 
    163 public:
    164     /**
    165      * Return the class ID for this class. This is useful only for comparing to
    166      * a return value from getDynamicClassID(). For example:
    167      * <pre>
    168      * .   Base* polymorphic_pointer = createPolymorphicObject();
    169      * .   if (polymorphic_pointer->getDynamicClassID() ==
    170      * .       erived::getStaticClassID()) ...
    171      * </pre>
    172      * @return          The class ID for all objects of this class.
    173      * @stable ICU 3.8
    174      */
    175     static UClassID U_EXPORT2 getStaticClassID(void);
    176 
    177     /**
    178      * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This
    179      * method is to implement a simple version of RTTI, since not all C++
    180      * compilers support genuine RTTI. Polymorphic operator==() and clone()
    181      * methods call this method.
    182      *
    183      * @return          The class ID for this object. All objects of a
    184      *                  given class have the same class ID.  Objects of
    185      *                  other classes have different class IDs.
    186      * @stable ICU 3.8
    187      */
    188     virtual UClassID getDynamicClassID(void) const;
    189 };
    190 
    191 U_NAMESPACE_END
    192 
    193 #endif /* #if !UCONFIG_NO_FORMATTING */
    194 
    195 #endif // TZTRANS_H
    196 
    197 //eof
    198