xref: /aosp_15_r20/external/icu/icu4c/source/i18n/tztrans.cpp (revision 0e209d3975ff4a8c132096b14b0e9364a753506e)
1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others.
2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html
3*0e209d39SAndroid Build Coastguard Worker /*
4*0e209d39SAndroid Build Coastguard Worker *******************************************************************************
5*0e209d39SAndroid Build Coastguard Worker * Copyright (C) 2007-2012, International Business Machines Corporation and
6*0e209d39SAndroid Build Coastguard Worker * others. All Rights Reserved.
7*0e209d39SAndroid Build Coastguard Worker *******************************************************************************
8*0e209d39SAndroid Build Coastguard Worker */
9*0e209d39SAndroid Build Coastguard Worker 
10*0e209d39SAndroid Build Coastguard Worker #include "utypeinfo.h"  // for 'typeid' to work
11*0e209d39SAndroid Build Coastguard Worker 
12*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h"
13*0e209d39SAndroid Build Coastguard Worker 
14*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_FORMATTING
15*0e209d39SAndroid Build Coastguard Worker 
16*0e209d39SAndroid Build Coastguard Worker #include "unicode/tzrule.h"
17*0e209d39SAndroid Build Coastguard Worker #include "unicode/tztrans.h"
18*0e209d39SAndroid Build Coastguard Worker 
19*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
20*0e209d39SAndroid Build Coastguard Worker 
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TimeZoneTransition)21*0e209d39SAndroid Build Coastguard Worker UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TimeZoneTransition)
22*0e209d39SAndroid Build Coastguard Worker 
23*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition::TimeZoneTransition(UDate time, const TimeZoneRule& from, const TimeZoneRule& to)
24*0e209d39SAndroid Build Coastguard Worker : UObject(), fTime(time), fFrom(from.clone()), fTo(to.clone()) {
25*0e209d39SAndroid Build Coastguard Worker }
26*0e209d39SAndroid Build Coastguard Worker 
TimeZoneTransition()27*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition::TimeZoneTransition()
28*0e209d39SAndroid Build Coastguard Worker : UObject(), fTime(0), fFrom(nullptr), fTo(nullptr) {
29*0e209d39SAndroid Build Coastguard Worker }
30*0e209d39SAndroid Build Coastguard Worker 
TimeZoneTransition(const TimeZoneTransition & source)31*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition::TimeZoneTransition(const TimeZoneTransition& source)
32*0e209d39SAndroid Build Coastguard Worker : UObject(), fTime(source.fTime), fFrom(nullptr), fTo(nullptr) {
33*0e209d39SAndroid Build Coastguard Worker       if (source.fFrom != nullptr) {
34*0e209d39SAndroid Build Coastguard Worker           fFrom = source.fFrom->clone();
35*0e209d39SAndroid Build Coastguard Worker       }
36*0e209d39SAndroid Build Coastguard Worker 
37*0e209d39SAndroid Build Coastguard Worker       if (source.fTo != nullptr) {
38*0e209d39SAndroid Build Coastguard Worker           fTo = source.fTo->clone();
39*0e209d39SAndroid Build Coastguard Worker       }
40*0e209d39SAndroid Build Coastguard Worker }
41*0e209d39SAndroid Build Coastguard Worker 
~TimeZoneTransition()42*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition::~TimeZoneTransition() {
43*0e209d39SAndroid Build Coastguard Worker     delete fFrom;
44*0e209d39SAndroid Build Coastguard Worker     delete fTo;
45*0e209d39SAndroid Build Coastguard Worker }
46*0e209d39SAndroid Build Coastguard Worker 
47*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition*
clone() const48*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition::clone() const {
49*0e209d39SAndroid Build Coastguard Worker     return new TimeZoneTransition(*this);
50*0e209d39SAndroid Build Coastguard Worker }
51*0e209d39SAndroid Build Coastguard Worker 
52*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition&
operator =(const TimeZoneTransition & right)53*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition::operator=(const TimeZoneTransition& right) {
54*0e209d39SAndroid Build Coastguard Worker     if (this != &right) {
55*0e209d39SAndroid Build Coastguard Worker         fTime = right.fTime;
56*0e209d39SAndroid Build Coastguard Worker         setFrom(*right.fFrom);
57*0e209d39SAndroid Build Coastguard Worker         setTo(*right.fTo);
58*0e209d39SAndroid Build Coastguard Worker     }
59*0e209d39SAndroid Build Coastguard Worker     return *this;
60*0e209d39SAndroid Build Coastguard Worker }
61*0e209d39SAndroid Build Coastguard Worker 
62*0e209d39SAndroid Build Coastguard Worker bool
operator ==(const TimeZoneTransition & that) const63*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition::operator==(const TimeZoneTransition& that) const {
64*0e209d39SAndroid Build Coastguard Worker     if (this == &that) {
65*0e209d39SAndroid Build Coastguard Worker         return true;
66*0e209d39SAndroid Build Coastguard Worker     }
67*0e209d39SAndroid Build Coastguard Worker     if (typeid(*this) != typeid(that)) {
68*0e209d39SAndroid Build Coastguard Worker         return false;
69*0e209d39SAndroid Build Coastguard Worker     }
70*0e209d39SAndroid Build Coastguard Worker     if (fTime != that.fTime) {
71*0e209d39SAndroid Build Coastguard Worker         return false;
72*0e209d39SAndroid Build Coastguard Worker     }
73*0e209d39SAndroid Build Coastguard Worker     if ((fFrom == nullptr && that.fFrom == nullptr)
74*0e209d39SAndroid Build Coastguard Worker         || (fFrom != nullptr && that.fFrom != nullptr && *fFrom == *(that.fFrom))) {
75*0e209d39SAndroid Build Coastguard Worker         if ((fTo == nullptr && that.fTo == nullptr)
76*0e209d39SAndroid Build Coastguard Worker             || (fTo != nullptr && that.fTo != nullptr && *fTo == *(that.fTo))) {
77*0e209d39SAndroid Build Coastguard Worker             return true;
78*0e209d39SAndroid Build Coastguard Worker         }
79*0e209d39SAndroid Build Coastguard Worker     }
80*0e209d39SAndroid Build Coastguard Worker     return false;
81*0e209d39SAndroid Build Coastguard Worker }
82*0e209d39SAndroid Build Coastguard Worker 
83*0e209d39SAndroid Build Coastguard Worker bool
operator !=(const TimeZoneTransition & that) const84*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition::operator!=(const TimeZoneTransition& that) const {
85*0e209d39SAndroid Build Coastguard Worker     return !operator==(that);
86*0e209d39SAndroid Build Coastguard Worker }
87*0e209d39SAndroid Build Coastguard Worker 
88*0e209d39SAndroid Build Coastguard Worker void
setTime(UDate time)89*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition::setTime(UDate time) {
90*0e209d39SAndroid Build Coastguard Worker     fTime = time;
91*0e209d39SAndroid Build Coastguard Worker }
92*0e209d39SAndroid Build Coastguard Worker 
93*0e209d39SAndroid Build Coastguard Worker void
setFrom(const TimeZoneRule & from)94*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition::setFrom(const TimeZoneRule& from) {
95*0e209d39SAndroid Build Coastguard Worker     delete fFrom;
96*0e209d39SAndroid Build Coastguard Worker     fFrom = from.clone();
97*0e209d39SAndroid Build Coastguard Worker }
98*0e209d39SAndroid Build Coastguard Worker 
99*0e209d39SAndroid Build Coastguard Worker void
adoptFrom(TimeZoneRule * from)100*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition::adoptFrom(TimeZoneRule* from) {
101*0e209d39SAndroid Build Coastguard Worker     delete fFrom;
102*0e209d39SAndroid Build Coastguard Worker     fFrom = from;
103*0e209d39SAndroid Build Coastguard Worker }
104*0e209d39SAndroid Build Coastguard Worker 
105*0e209d39SAndroid Build Coastguard Worker void
setTo(const TimeZoneRule & to)106*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition::setTo(const TimeZoneRule& to) {
107*0e209d39SAndroid Build Coastguard Worker     delete fTo;
108*0e209d39SAndroid Build Coastguard Worker     fTo = to.clone();
109*0e209d39SAndroid Build Coastguard Worker }
110*0e209d39SAndroid Build Coastguard Worker 
111*0e209d39SAndroid Build Coastguard Worker void
adoptTo(TimeZoneRule * to)112*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition::adoptTo(TimeZoneRule* to) {
113*0e209d39SAndroid Build Coastguard Worker     delete fTo;
114*0e209d39SAndroid Build Coastguard Worker     fTo = to;
115*0e209d39SAndroid Build Coastguard Worker }
116*0e209d39SAndroid Build Coastguard Worker 
117*0e209d39SAndroid Build Coastguard Worker UDate
getTime() const118*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition::getTime() const {
119*0e209d39SAndroid Build Coastguard Worker     return fTime;
120*0e209d39SAndroid Build Coastguard Worker }
121*0e209d39SAndroid Build Coastguard Worker 
122*0e209d39SAndroid Build Coastguard Worker const TimeZoneRule*
getTo() const123*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition::getTo() const {
124*0e209d39SAndroid Build Coastguard Worker     return fTo;
125*0e209d39SAndroid Build Coastguard Worker }
126*0e209d39SAndroid Build Coastguard Worker 
127*0e209d39SAndroid Build Coastguard Worker const TimeZoneRule*
getFrom() const128*0e209d39SAndroid Build Coastguard Worker TimeZoneTransition::getFrom() const {
129*0e209d39SAndroid Build Coastguard Worker     return fFrom;
130*0e209d39SAndroid Build Coastguard Worker }
131*0e209d39SAndroid Build Coastguard Worker 
132*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
133*0e209d39SAndroid Build Coastguard Worker 
134*0e209d39SAndroid Build Coastguard Worker #endif
135*0e209d39SAndroid Build Coastguard Worker 
136*0e209d39SAndroid Build Coastguard Worker //eof
137