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