From: Yoshito Umaoka Date: Fri, 1 Feb 2013 07:39:04 +0000 (+0000) Subject: ICU-9648 Changed BasicTimeZone public API methods to const. X-Git-Tag: milestone-59-0-1~3181 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b676128bfed43fe3e10cbe7282525a19d0c839d5;p=icu ICU-9648 Changed BasicTimeZone public API methods to const. X-SVN-Rev: 33109 --- diff --git a/icu4c/source/i18n/basictz.cpp b/icu4c/source/i18n/basictz.cpp index 6b4889a216c..7fee4d0f8a3 100644 --- a/icu4c/source/i18n/basictz.cpp +++ b/icu4c/source/i18n/basictz.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 2007-2010, International Business Machines Corporation and +* Copyright (C) 2007-2013, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* */ @@ -34,8 +34,8 @@ BasicTimeZone::~BasicTimeZone() { } UBool -BasicTimeZone::hasEquivalentTransitions(/*const*/ BasicTimeZone& tz, UDate start, UDate end, - UBool ignoreDstAmount, UErrorCode& status) /*const*/ { +BasicTimeZone::hasEquivalentTransitions(const BasicTimeZone& tz, UDate start, UDate end, + UBool ignoreDstAmount, UErrorCode& status) const { if (U_FAILURE(status)) { return FALSE; } @@ -128,7 +128,7 @@ BasicTimeZone::hasEquivalentTransitions(/*const*/ BasicTimeZone& tz, UDate start void BasicTimeZone::getSimpleRulesNear(UDate date, InitialTimeZoneRule*& initial, - AnnualTimeZoneRule*& std, AnnualTimeZoneRule*& dst, UErrorCode& status) /*const*/ { + AnnualTimeZoneRule*& std, AnnualTimeZoneRule*& dst, UErrorCode& status) const { initial = NULL; std = NULL; dst = NULL; @@ -285,7 +285,7 @@ BasicTimeZone::getSimpleRulesNear(UDate date, InitialTimeZoneRule*& initial, void BasicTimeZone::getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial, - UVector*& transitionRules, UErrorCode& status) /*const*/ { + UVector*& transitionRules, UErrorCode& status) const { if (U_FAILURE(status)) { return; } @@ -546,7 +546,7 @@ error: void BasicTimeZone::getOffsetFromLocal(UDate /*date*/, int32_t /*nonExistingTimeOpt*/, int32_t /*duplicatedTimeOpt*/, - int32_t& /*rawOffset*/, int32_t& /*dstOffset*/, UErrorCode& status) /*const*/ { + int32_t& /*rawOffset*/, int32_t& /*dstOffset*/, UErrorCode& status) const { if (U_FAILURE(status)) { return; } diff --git a/icu4c/source/i18n/olsontz.cpp b/icu4c/source/i18n/olsontz.cpp index 992cfe37daa..826eb1ffbee 100644 --- a/icu4c/source/i18n/olsontz.cpp +++ b/icu4c/source/i18n/olsontz.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2003-2012, International Business Machines +* Copyright (c) 2003-2013, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu @@ -25,6 +25,7 @@ #include // DBL_MAX #include "uresimp.h" // struct UResourceBundle #include "zonemeta.h" +#include "umutex.h" #ifdef U_DEBUG_TZ # include @@ -399,7 +400,7 @@ void OlsonTimeZone::getOffset(UDate date, UBool local, int32_t& rawoff, void OlsonTimeZone::getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt, - int32_t& rawoff, int32_t& dstoff, UErrorCode& ec) /*const*/ { + int32_t& rawoff, int32_t& dstoff, UErrorCode& ec) const { if (U_FAILURE(ec)) { return; } @@ -571,7 +572,7 @@ UBool OlsonTimeZone::useDaylightTime() const { // Return TRUE if DST is observed at any time during the current // year. for (int16_t i = 0; i < transitionCount(); ++i) { - double transition = transitionTimeInSeconds(i); + double transition = (double)transitionTimeInSeconds(i); if (transition >= limit) { break; } @@ -680,6 +681,28 @@ OlsonTimeZone::deleteTransitionRules(void) { clearTransitionRules(); } +/* + * Lazy transition rules initializer + */ +static UMutex gLock = U_MUTEX_INITIALIZER; + +void +OlsonTimeZone::checkTransitionRules(UErrorCode& status) const { + if (U_FAILURE(status)) { + return; + } + UBool initialized; + UMTX_CHECK(&gLock, transitionRulesInitialized, initialized); + if (!initialized) { + umtx_lock(&gLock); + if (!transitionRulesInitialized) { + OlsonTimeZone *ncThis = const_cast(this); + ncThis->initTransitionRules(status); + } + umtx_unlock(&gLock); + } +} + void OlsonTimeZone::initTransitionRules(UErrorCode& status) { if(U_FAILURE(status)) { @@ -860,9 +883,9 @@ OlsonTimeZone::initTransitionRules(UErrorCode& status) { } UBool -OlsonTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/ { +OlsonTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const { UErrorCode status = U_ZERO_ERROR; - initTransitionRules(status); + checkTransitionRules(status); if (U_FAILURE(status)) { return FALSE; } @@ -925,9 +948,9 @@ OlsonTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition } UBool -OlsonTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/ { +OlsonTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const { UErrorCode status = U_ZERO_ERROR; - initTransitionRules(status); + checkTransitionRules(status); if (U_FAILURE(status)) { return FALSE; } @@ -986,11 +1009,11 @@ OlsonTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransi } int32_t -OlsonTimeZone::countTransitionRules(UErrorCode& status) /*const*/ { +OlsonTimeZone::countTransitionRules(UErrorCode& status) const { if (U_FAILURE(status)) { return 0; } - initTransitionRules(status); + checkTransitionRules(status); if (U_FAILURE(status)) { return 0; } @@ -1019,11 +1042,11 @@ void OlsonTimeZone::getTimeZoneRules(const InitialTimeZoneRule*& initial, const TimeZoneRule* trsrules[], int32_t& trscount, - UErrorCode& status) /*const*/ { + UErrorCode& status) const { if (U_FAILURE(status)) { return; } - initTransitionRules(status); + checkTransitionRules(status); if (U_FAILURE(status)) { return; } diff --git a/icu4c/source/i18n/olsontz.h b/icu4c/source/i18n/olsontz.h index 05e89b25085..a263ec05aa4 100644 --- a/icu4c/source/i18n/olsontz.h +++ b/icu4c/source/i18n/olsontz.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2003-2011, International Business Machines +* Copyright (c) 2003-2013, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu @@ -185,7 +185,7 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone { * BasicTimeZone API. */ virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt, - int32_t& rawoff, int32_t& dstoff, UErrorCode& ec) /*const*/; + int32_t& rawoff, int32_t& dstoff, UErrorCode& ec) const; /** * TimeZone API. This method has no effect since objects of this @@ -233,7 +233,7 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone { * @param result Receives the first transition after the base time. * @return TRUE if the transition is found. */ - virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/; + virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const; /** * BasicTimeZone API. @@ -243,7 +243,7 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone { * @param result Receives the most recent transition before the base time. * @return TRUE if the transition is found. */ - virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/; + virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const; /** * BasicTimeZone API. @@ -253,7 +253,7 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone { * @param status Receives error status code. * @return The number of TimeZoneRules representing time transitions. */ - virtual int32_t countTransitionRules(UErrorCode& status) /*const*/; + virtual int32_t countTransitionRules(UErrorCode& status) const; /** * Gets the InitialTimeZoneRule and the set of TimeZoneRule @@ -271,7 +271,7 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone { * @param status Receives error status code. */ virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial, - const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/; + const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const; /** * Internal API returning the canonical ID of this zone. @@ -382,6 +382,7 @@ private: /* BasicTimeZone support */ void clearTransitionRules(void); void deleteTransitionRules(void); + void checkTransitionRules(UErrorCode& status) const; void initTransitionRules(UErrorCode& status); InitialTimeZoneRule *initialRule; diff --git a/icu4c/source/i18n/rbtz.cpp b/icu4c/source/i18n/rbtz.cpp index a9d8db5ec4e..6abc6d1e651 100644 --- a/icu4c/source/i18n/rbtz.cpp +++ b/icu4c/source/i18n/rbtz.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 2007-2012, International Business Machines Corporation and +* Copyright (C) 2007-2013, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* */ @@ -16,6 +16,7 @@ #include "uvector.h" #include "gregoimp.h" #include "cmemory.h" +#include "umutex.h" U_NAMESPACE_BEGIN @@ -143,6 +144,25 @@ RuleBasedTimeZone::addTransitionRule(TimeZoneRule* rule, UErrorCode& status) { fUpToDate = FALSE; } +static UMutex gLock = U_MUTEX_INITIALIZER; + +void +RuleBasedTimeZone::completeConst(UErrorCode& status) const { + if (U_FAILURE(status)) { + return; + } + UBool updated; + UMTX_CHECK(&gLock, fUpToDate, updated); + if (!updated) { + umtx_lock(&gLock); + if (!fUpToDate) { + RuleBasedTimeZone *ncThis = const_cast(this); + ncThis->complete(status); + } + umtx_unlock(&gLock); + } +} + void RuleBasedTimeZone::complete(UErrorCode& status) { if (U_FAILURE(status)) { @@ -387,7 +407,7 @@ RuleBasedTimeZone::getOffset(UDate date, UBool local, int32_t& rawOffset, void RuleBasedTimeZone::getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt, - int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) /*const*/ { + int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const { getOffsetInternal(date, TRUE, nonExistingTimeOpt, duplicatedTimeOpt, rawOffset, dstOffset, status); } @@ -525,9 +545,9 @@ RuleBasedTimeZone::hasSameRules(const TimeZone& other) const { } UBool -RuleBasedTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/ { +RuleBasedTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const { UErrorCode status = U_ZERO_ERROR; - complete(status); + completeConst(status); if (U_FAILURE(status)) { return FALSE; } @@ -544,9 +564,9 @@ RuleBasedTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransi } UBool -RuleBasedTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/ { +RuleBasedTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const { UErrorCode status = U_ZERO_ERROR; - complete(status); + completeConst(status); if (U_FAILURE(status)) { return FALSE; } @@ -563,7 +583,7 @@ RuleBasedTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTr } int32_t -RuleBasedTimeZone::countTransitionRules(UErrorCode& /*status*/) /*const*/ { +RuleBasedTimeZone::countTransitionRules(UErrorCode& /*status*/) const { int32_t count = 0; if (fHistoricRules != NULL) { count += fHistoricRules->size(); @@ -578,7 +598,7 @@ void RuleBasedTimeZone::getTimeZoneRules(const InitialTimeZoneRule*& initial, const TimeZoneRule* trsrules[], int32_t& trscount, - UErrorCode& status) /*const*/ { + UErrorCode& status) const { if (U_FAILURE(status)) { return; } diff --git a/icu4c/source/i18n/simpletz.cpp b/icu4c/source/i18n/simpletz.cpp index 2f3b9cc61e9..2faa55893b9 100644 --- a/icu4c/source/i18n/simpletz.cpp +++ b/icu4c/source/i18n/simpletz.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* - * Copyright (C) 1997-2012, International Business Machines Corporation and + * Copyright (C) 1997-2013, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* * @@ -32,6 +32,7 @@ #include "unicode/smpdtfmt.h" #include "gregoimp.h" +#include "umutex.h" U_NAMESPACE_BEGIN @@ -506,7 +507,7 @@ SimpleTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, void SimpleTimeZone::getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt, - int32_t& rawOffsetGMT, int32_t& savingsDST, UErrorCode& status) /*const*/ { + int32_t& rawOffsetGMT, int32_t& savingsDST, UErrorCode& status) const { if (U_FAILURE(status)) { return; } @@ -967,13 +968,13 @@ SimpleTimeZone::decodeEndRule(UErrorCode& status) } UBool -SimpleTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/ { +SimpleTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const { if (!useDaylight) { return FALSE; } UErrorCode status = U_ZERO_ERROR; - initTransitionRules(status); + checkTransitionRules(status); if (U_FAILURE(status)) { return FALSE; } @@ -1001,13 +1002,13 @@ SimpleTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransitio } UBool -SimpleTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/ { +SimpleTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const { if (!useDaylight) { return FALSE; } UErrorCode status = U_ZERO_ERROR; - initTransitionRules(status); + checkTransitionRules(status); if (U_FAILURE(status)) { return FALSE; } @@ -1060,6 +1061,28 @@ SimpleTimeZone::deleteTransitionRules(void) { clearTransitionRules(); } +/* + * Lazy transition rules initializer + */ +static UMutex gLock = U_MUTEX_INITIALIZER; + +void +SimpleTimeZone::checkTransitionRules(UErrorCode& status) const { + if (U_FAILURE(status)) { + return; + } + UBool initialized; + UMTX_CHECK(&gLock, transitionRulesInitialized, initialized); + if (!initialized) { + umtx_lock(&gLock); + if (!transitionRulesInitialized) { + SimpleTimeZone *ncThis = const_cast(this); + ncThis->initTransitionRules(status); + } + umtx_unlock(&gLock); + } +} + void SimpleTimeZone::initTransitionRules(UErrorCode& status) { if (U_FAILURE(status)) { @@ -1099,8 +1122,8 @@ SimpleTimeZone::initTransitionRules(UErrorCode& status) { } // Check for Null pointer if (dtRule == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return; + status = U_MEMORY_ALLOCATION_ERROR; + return; } // For now, use ID + "(DST)" as the name dstRule = new AnnualTimeZoneRule(tzid+UnicodeString(DST_STR), getRawOffset(), getDSTSavings(), @@ -1108,9 +1131,9 @@ SimpleTimeZone::initTransitionRules(UErrorCode& status) { // Check for Null pointer if (dstRule == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - deleteTransitionRules(); - return; + status = U_MEMORY_ALLOCATION_ERROR; + deleteTransitionRules(); + return; } // Calculate the first DST start time @@ -1136,9 +1159,9 @@ SimpleTimeZone::initTransitionRules(UErrorCode& status) { // Check for Null pointer if (dtRule == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - deleteTransitionRules(); - return; + status = U_MEMORY_ALLOCATION_ERROR; + deleteTransitionRules(); + return; } // For now, use ID + "(STD)" as the name stdRule = new AnnualTimeZoneRule(tzid+UnicodeString(STD_STR), getRawOffset(), 0, @@ -1146,9 +1169,9 @@ SimpleTimeZone::initTransitionRules(UErrorCode& status) { //Check for Null pointer if (stdRule == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - deleteTransitionRules(); - return; + status = U_MEMORY_ALLOCATION_ERROR; + deleteTransitionRules(); + return; } // Calculate the first STD start time @@ -1164,9 +1187,9 @@ SimpleTimeZone::initTransitionRules(UErrorCode& status) { } // Check for null pointers. if (initialRule == NULL || firstTransition == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - deleteTransitionRules(); - return; + status = U_MEMORY_ALLOCATION_ERROR; + deleteTransitionRules(); + return; } } else { @@ -1174,17 +1197,17 @@ SimpleTimeZone::initTransitionRules(UErrorCode& status) { initialRule = new InitialTimeZoneRule(tzid, getRawOffset(), 0); // Check for null pointer. if (initialRule == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - deleteTransitionRules(); - return; + status = U_MEMORY_ALLOCATION_ERROR; + deleteTransitionRules(); + return; } } - transitionRulesInitialized = true; + transitionRulesInitialized = TRUE; } int32_t -SimpleTimeZone::countTransitionRules(UErrorCode& /*status*/) /*const*/ { +SimpleTimeZone::countTransitionRules(UErrorCode& /*status*/) const { return (useDaylight) ? 2 : 0; } @@ -1192,11 +1215,11 @@ void SimpleTimeZone::getTimeZoneRules(const InitialTimeZoneRule*& initial, const TimeZoneRule* trsrules[], int32_t& trscount, - UErrorCode& status) /*const*/ { + UErrorCode& status) const { if (U_FAILURE(status)) { return; } - initTransitionRules(status); + checkTransitionRules(status); if (U_FAILURE(status)) { return; } diff --git a/icu4c/source/i18n/ucal.cpp b/icu4c/source/i18n/ucal.cpp index a2edadb8154..ff231eedf03 100644 --- a/icu4c/source/i18n/ucal.cpp +++ b/icu4c/source/i18n/ucal.cpp @@ -755,11 +755,10 @@ ucal_getTimeZoneTransitionDate(const UCalendar* cal, UTimeZoneTransitionType typ const BasicTimeZone * btz = dynamic_cast(&tz); if (btz != NULL && U_SUCCESS(*status)) { TimeZoneTransition tzt; - LocalPointer btzClone(static_cast(btz->clone())); // getNext/PreviousTransition are non-const UBool inclusive = (type == UCAL_TZ_TRANSITION_NEXT_INCLUSIVE || type == UCAL_TZ_TRANSITION_PREVIOUS_INCLUSIVE); UBool result = (type == UCAL_TZ_TRANSITION_NEXT || type == UCAL_TZ_TRANSITION_NEXT_INCLUSIVE)? - btzClone->getNextTransition(base, inclusive, tzt): - btzClone->getPreviousTransition(base, inclusive, tzt); + btz->getNextTransition(base, inclusive, tzt): + btz->getPreviousTransition(base, inclusive, tzt); if (result) { *transition = tzt.getTime(); return TRUE; diff --git a/icu4c/source/i18n/unicode/basictz.h b/icu4c/source/i18n/unicode/basictz.h index 60494a4b450..f1e477f4743 100644 --- a/icu4c/source/i18n/unicode/basictz.h +++ b/icu4c/source/i18n/unicode/basictz.h @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 2007-2011, International Business Machines Corporation and +* Copyright (C) 2007-2013, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* */ @@ -47,7 +47,7 @@ public: * @return TRUE if the transition is found. * @stable ICU 3.8 */ - virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/ = 0; + virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const = 0; /** * Gets the most recent time zone transition before the base time. @@ -57,7 +57,7 @@ public: * @return TRUE if the transition is found. * @stable ICU 3.8 */ - virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/ = 0; + virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const = 0; /** * Checks if the time zone has equivalent transitions in the time range. @@ -79,8 +79,8 @@ public: * time range. * @stable ICU 3.8 */ - virtual UBool hasEquivalentTransitions(/*const*/ BasicTimeZone& tz, UDate start, UDate end, - UBool ignoreDstAmount, UErrorCode& ec) /*const*/; + virtual UBool hasEquivalentTransitions(const BasicTimeZone& tz, UDate start, UDate end, + UBool ignoreDstAmount, UErrorCode& ec) const; /** * Returns the number of TimeZoneRules which represents time transitions, @@ -90,7 +90,7 @@ public: * @return The number of TimeZoneRules representing time transitions. * @stable ICU 3.8 */ - virtual int32_t countTransitionRules(UErrorCode& status) /*const*/ = 0; + virtual int32_t countTransitionRules(UErrorCode& status) const = 0; /** * Gets the InitialTimeZoneRule and the set of TimeZoneRule @@ -109,7 +109,7 @@ public: * @stable ICU 3.8 */ virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial, - const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/ = 0; + const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const = 0; /** * Gets the set of time zone rules valid at the specified time. Some known external time zone @@ -138,7 +138,7 @@ public: * @stable ICU 3.8 */ virtual void getSimpleRulesNear(UDate date, InitialTimeZoneRule*& initial, - AnnualTimeZoneRule*& std, AnnualTimeZoneRule*& dst, UErrorCode& status) /*const*/; + AnnualTimeZoneRule*& std, AnnualTimeZoneRule*& dst, UErrorCode& status) const; #ifndef U_HIDE_INTERNAL_API @@ -159,7 +159,7 @@ public: * @internal */ virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt, - int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) /*const*/; + int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const; protected: @@ -202,7 +202,7 @@ protected: * @param status Receives error status code */ void getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial, UVector*& transitionRules, - UErrorCode& status) /*const*/; + UErrorCode& status) const; }; U_NAMESPACE_END diff --git a/icu4c/source/i18n/unicode/rbtz.h b/icu4c/source/i18n/unicode/rbtz.h index 2be29670cbf..f20fc81a4e5 100644 --- a/icu4c/source/i18n/unicode/rbtz.h +++ b/icu4c/source/i18n/unicode/rbtz.h @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 2007-2008, International Business Machines Corporation and * +* Copyright (C) 2007-2013, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ @@ -255,7 +255,7 @@ public: * @return TRUE if the transition is found. * @stable ICU 3.8 */ - virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/; + virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const; /** * Gets the most recent time zone transition before the base time. @@ -265,7 +265,7 @@ public: * @return TRUE if the transition is found. * @stable ICU 3.8 */ - virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/; + virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const; /** * Returns the number of TimeZoneRules which represents time transitions, @@ -275,7 +275,7 @@ public: * @return The number of TimeZoneRules representing time transitions. * @stable ICU 3.8 */ - virtual int32_t countTransitionRules(UErrorCode& status) /*const*/; + virtual int32_t countTransitionRules(UErrorCode& status) const; /** * Gets the InitialTimeZoneRule and the set of TimeZoneRule @@ -294,14 +294,14 @@ public: * @stable ICU 3.8 */ virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial, - const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/; + const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const; /** * Get time zone offsets from local wall time. * @internal */ virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt, - int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) /*const*/; + int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const; private: void deleteRules(void); @@ -317,6 +317,7 @@ private: int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const; void getOffsetInternal(UDate date, UBool local, int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt, int32_t& rawOffset, int32_t& dstOffset, UErrorCode& ec) const; + void completeConst(UErrorCode &status) const; InitialTimeZoneRule *fInitialRule; UVector *fHistoricRules; diff --git a/icu4c/source/i18n/unicode/simpletz.h b/icu4c/source/i18n/unicode/simpletz.h index 9e74fc51710..4762f639956 100644 --- a/icu4c/source/i18n/unicode/simpletz.h +++ b/icu4c/source/i18n/unicode/simpletz.h @@ -1,6 +1,6 @@ /* ******************************************************************************** - * Copyright (C) 1997-2011, International Business Machines * + * Copyright (C) 1997-2013, International Business Machines * * Corporation and others. All Rights Reserved. * ******************************************************************************** * @@ -621,7 +621,7 @@ public: * @internal */ virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt, - int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) /*const*/; + int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const; /** * Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add @@ -709,7 +709,7 @@ public: * @return TRUE if the transition is found. * @stable ICU 3.8 */ - virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/; + virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const; /** * Gets the most recent time zone transition before the base time. @@ -719,7 +719,7 @@ public: * @return TRUE if the transition is found. * @stable ICU 3.8 */ - virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/; + virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const; /** * Returns the number of TimeZoneRules which represents time transitions, @@ -729,7 +729,7 @@ public: * @return The number of TimeZoneRules representing time transitions. * @stable ICU 3.8 */ - virtual int32_t countTransitionRules(UErrorCode& status) /*const*/; + virtual int32_t countTransitionRules(UErrorCode& status) const; /** * Gets the InitialTimeZoneRule and the set of TimeZoneRule @@ -748,7 +748,7 @@ public: * @stable ICU 3.8 */ virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial, - const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/; + const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const; public: @@ -870,6 +870,7 @@ private: int32_t dstSavings; /* Private for BasicTimeZone implementation */ + void checkTransitionRules(UErrorCode& status) const; void initTransitionRules(UErrorCode& status); void clearTransitionRules(void); void deleteTransitionRules(void); diff --git a/icu4c/source/i18n/unicode/vtzone.h b/icu4c/source/i18n/unicode/vtzone.h index 9b0a1f0cf2d..92817ba16ba 100644 --- a/icu4c/source/i18n/unicode/vtzone.h +++ b/icu4c/source/i18n/unicode/vtzone.h @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 2007-2012, International Business Machines Corporation and +* Copyright (C) 2007-2013, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* */ @@ -160,7 +160,7 @@ public: * @param status Output param to filled in with a success or an error. * @stable ICU 3.8 */ - void write(UDate start, UnicodeString& result, UErrorCode& status) /*const*/; + void write(UDate start, UnicodeString& result, UErrorCode& status) const; /** * Writes RFC2445 VTIMEZONE data applicalbe for the specified date. @@ -175,7 +175,7 @@ public: * @param status Output param to filled in with a success or an error. * @stable ICU 3.8 */ - void writeSimple(UDate time, UnicodeString& result, UErrorCode& status) /*const*/; + void writeSimple(UDate time, UnicodeString& result, UErrorCode& status) const; /** * Clones TimeZone objects polymorphically. Clients are responsible for deleting @@ -319,7 +319,7 @@ public: * @return TRUE if the transition is found. * @stable ICU 3.8 */ - virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/; + virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const; /** * Gets the most recent time zone transition before the base time. @@ -329,7 +329,7 @@ public: * @return TRUE if the transition is found. * @stable ICU 3.8 */ - virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/; + virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const; /** * Returns the number of TimeZoneRules which represents time transitions, @@ -339,7 +339,7 @@ public: * @return The number of TimeZoneRules representing time transitions. * @stable ICU 3.8 */ - virtual int32_t countTransitionRules(UErrorCode& status) /*const*/; + virtual int32_t countTransitionRules(UErrorCode& status) const; /** * Gets the InitialTimeZoneRule and the set of TimeZoneRule @@ -358,7 +358,7 @@ public: * @stable ICU 3.8 */ virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial, - const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/; + const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const; private: enum { DEFAULT_VTIMEZONE_LINES = 100 }; @@ -369,8 +369,8 @@ private: VTimeZone(); static VTimeZone* createVTimeZone(VTZReader* reader); void write(VTZWriter& writer, UErrorCode& status) const; - void write(UDate start, VTZWriter& writer, UErrorCode& status) /*const*/; - void writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) /*const*/; + void write(UDate start, VTZWriter& writer, UErrorCode& status) const; + void writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) const; void load(VTZReader& reader, UErrorCode& status); void parse(UErrorCode& status); diff --git a/icu4c/source/i18n/vtzone.cpp b/icu4c/source/i18n/vtzone.cpp index b000b22e03f..dba7a29245a 100644 --- a/icu4c/source/i18n/vtzone.cpp +++ b/icu4c/source/i18n/vtzone.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 2007-2012, International Business Machines Corporation and +* Copyright (C) 2007-2013, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* */ @@ -1161,14 +1161,14 @@ VTimeZone::write(UnicodeString& result, UErrorCode& status) const { } void -VTimeZone::write(UDate start, UnicodeString& result, UErrorCode& status) /*const*/ { +VTimeZone::write(UDate start, UnicodeString& result, UErrorCode& status) const { result.remove(); VTZWriter writer(result); write(start, writer, status); } void -VTimeZone::writeSimple(UDate time, UnicodeString& result, UErrorCode& status) /*const*/ { +VTimeZone::writeSimple(UDate time, UnicodeString& result, UErrorCode& status) const { result.remove(); VTZWriter writer(result); writeSimple(time, writer, status); @@ -1224,24 +1224,24 @@ VTimeZone::hasSameRules(const TimeZone& other) const { } UBool -VTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/ { +VTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const { return tz->getNextTransition(base, inclusive, result); } UBool -VTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/ { +VTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const { return tz->getPreviousTransition(base, inclusive, result); } int32_t -VTimeZone::countTransitionRules(UErrorCode& status) /*const*/ { +VTimeZone::countTransitionRules(UErrorCode& status) const { return tz->countTransitionRules(status); } void VTimeZone::getTimeZoneRules(const InitialTimeZoneRule*& initial, const TimeZoneRule* trsrules[], int32_t& trscount, - UErrorCode& status) /*const*/ { + UErrorCode& status) const { tz->getTimeZoneRules(initial, trsrules, trscount, status); } @@ -1768,7 +1768,7 @@ VTimeZone::write(VTZWriter& writer, UErrorCode& status) const { } void -VTimeZone::write(UDate start, VTZWriter& writer, UErrorCode& status) /*const*/ { +VTimeZone::write(UDate start, VTZWriter& writer, UErrorCode& status) const { if (U_FAILURE(status)) { return; } @@ -1833,7 +1833,7 @@ cleanupWritePartial: } void -VTimeZone::writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) /*const*/ { +VTimeZone::writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) const { if (U_FAILURE(status)) { return; }