16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 2007-2012, International Business Machines Corporation and
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* others. All Rights Reserved.
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "utypeinfo.h"  // for 'typeid' to work
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/tzrule.h"
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/tztrans.h"
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUOBJECT_DEFINE_RTTI_IMPLEMENTATION(TimeZoneTransition)
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition::TimeZoneTransition(UDate time, const TimeZoneRule& from, const TimeZoneRule& to)
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org: UObject(), fTime(time), fFrom(from.clone()), fTo(to.clone()) {
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition::TimeZoneTransition()
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org: UObject(), fTime(0), fFrom(NULL), fTo(NULL) {
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition::TimeZoneTransition(const TimeZoneTransition& source)
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org: UObject(), fTime(source.fTime), fFrom(NULL), fTo(NULL) {
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      if (source.fFrom != NULL) {
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          fFrom = source.fFrom->clone();
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      }
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      if (source.fTo != NULL) {
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          fTo = source.fTo->clone();
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      }
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition::~TimeZoneTransition() {
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (fFrom != NULL) {
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete fFrom;
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (fTo != NULL) {
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete fTo;
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition*
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition::clone(void) const {
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return new TimeZoneTransition(*this);
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition&
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition::operator=(const TimeZoneTransition& right) {
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (this != &right) {
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fTime = right.fTime;
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        setFrom(*right.fFrom);
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        setTo(*right.fTo);
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return *this;
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition::operator==(const TimeZoneTransition& that) const {
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (this == &that) {
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return TRUE;
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (typeid(*this) != typeid(that)) {
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return FALSE;
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (fTime != that.fTime) {
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return FALSE;
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if ((fFrom == NULL && that.fFrom == NULL)
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        || (fFrom != NULL && that.fFrom != NULL && *fFrom == *(that.fFrom))) {
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if ((fTo == NULL && that.fTo == NULL)
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            || (fTo != NULL && that.fTo != NULL && *fTo == *(that.fTo))) {
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            return TRUE;
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return FALSE;
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition::operator!=(const TimeZoneTransition& that) const {
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return !operator==(that);
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition::setTime(UDate time) {
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fTime = time;
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition::setFrom(const TimeZoneRule& from) {
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (fFrom != NULL) {
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete fFrom;
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fFrom = from.clone();
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition::adoptFrom(TimeZoneRule* from) {
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (fFrom != NULL) {
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete fFrom;
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fFrom = from;
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition::setTo(const TimeZoneRule& to) {
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (fTo != NULL) {
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete fTo;
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fTo = to.clone();
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition::adoptTo(TimeZoneRule* to) {
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (fTo != NULL) {
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete fTo;
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fTo = to;
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUDate
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition::getTime(void) const {
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return fTime;
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst TimeZoneRule*
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition::getTo(void) const {
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return fTo;
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst TimeZoneRule*
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZoneTransition::getFrom(void) const {
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return fFrom;
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//eof
147