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