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