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