1 // Copyright (C) 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 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 27 TimeZoneTransition::TimeZoneTransition() 28 : UObject(), fTime(0), fFrom(NULL), fTo(NULL) { 29 } 30 31 TimeZoneTransition::TimeZoneTransition(const TimeZoneTransition& source) 32 : UObject(), fTime(source.fTime), fFrom(NULL), fTo(NULL) { 33 if (source.fFrom != NULL) { 34 fFrom = source.fFrom->clone(); 35 } 36 37 if (source.fTo != NULL) { 38 fTo = source.fTo->clone(); 39 } 40 } 41 42 TimeZoneTransition::~TimeZoneTransition() { 43 if (fFrom != NULL) { 44 delete fFrom; 45 } 46 if (fTo != NULL) { 47 delete fTo; 48 } 49 } 50 51 TimeZoneTransition* 52 TimeZoneTransition::clone(void) const { 53 return new TimeZoneTransition(*this); 54 } 55 56 TimeZoneTransition& 57 TimeZoneTransition::operator=(const TimeZoneTransition& right) { 58 if (this != &right) { 59 fTime = right.fTime; 60 setFrom(*right.fFrom); 61 setTo(*right.fTo); 62 } 63 return *this; 64 } 65 66 UBool 67 TimeZoneTransition::operator==(const TimeZoneTransition& that) const { 68 if (this == &that) { 69 return TRUE; 70 } 71 if (typeid(*this) != typeid(that)) { 72 return FALSE; 73 } 74 if (fTime != that.fTime) { 75 return FALSE; 76 } 77 if ((fFrom == NULL && that.fFrom == NULL) 78 || (fFrom != NULL && that.fFrom != NULL && *fFrom == *(that.fFrom))) { 79 if ((fTo == NULL && that.fTo == NULL) 80 || (fTo != NULL && that.fTo != NULL && *fTo == *(that.fTo))) { 81 return TRUE; 82 } 83 } 84 return FALSE; 85 } 86 87 UBool 88 TimeZoneTransition::operator!=(const TimeZoneTransition& that) const { 89 return !operator==(that); 90 } 91 92 void 93 TimeZoneTransition::setTime(UDate time) { 94 fTime = time; 95 } 96 97 void 98 TimeZoneTransition::setFrom(const TimeZoneRule& from) { 99 if (fFrom != NULL) { 100 delete fFrom; 101 } 102 fFrom = from.clone(); 103 } 104 105 void 106 TimeZoneTransition::adoptFrom(TimeZoneRule* from) { 107 if (fFrom != NULL) { 108 delete fFrom; 109 } 110 fFrom = from; 111 } 112 113 void 114 TimeZoneTransition::setTo(const TimeZoneRule& to) { 115 if (fTo != NULL) { 116 delete fTo; 117 } 118 fTo = to.clone(); 119 } 120 121 void 122 TimeZoneTransition::adoptTo(TimeZoneRule* to) { 123 if (fTo != NULL) { 124 delete fTo; 125 } 126 fTo = to; 127 } 128 129 UDate 130 TimeZoneTransition::getTime(void) const { 131 return fTime; 132 } 133 134 const TimeZoneRule* 135 TimeZoneTransition::getTo(void) const { 136 return fTo; 137 } 138 139 const TimeZoneRule* 140 TimeZoneTransition::getFrom(void) const { 141 return fFrom; 142 } 143 144 U_NAMESPACE_END 145 146 #endif 147 148 //eof 149