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