buddhcal.cpp revision 85bf2e2fbc60a9f938064abc8127d61da7d19882
1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru******************************************************************************* 385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho* Copyright (C) 2003-2008, International Business Machines Corporation and * 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* others. All Rights Reserved. * 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru******************************************************************************* 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* File BUDDHCAL.CPP 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Modification History: 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 05/13/2003 srl copied from gregocal.cpp 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/ 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h" 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "buddhcal.h" 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/gregocal.h" 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "umutex.h" 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include <float.h> 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_BEGIN 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUOBJECT_DEFINE_RTTI_IMPLEMENTATION(BuddhistCalendar) 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const int32_t kMaxEra = 0; // only 1 era 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const int32_t kBuddhistEraStart = -543; // 544 BC (Gregorian) 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const int32_t kGregorianEpoch = 1970; // used as the default value of EXTENDED_YEAR 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruBuddhistCalendar::BuddhistCalendar(const Locale& aLocale, UErrorCode& success) 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru: GregorianCalendar(aLocale, success) 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru setTimeInMillis(getNow(), success); // Call this again now that the vtable is set up properly. 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruBuddhistCalendar::~BuddhistCalendar() 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruBuddhistCalendar::BuddhistCalendar(const BuddhistCalendar& source) 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru: GregorianCalendar(source) 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruBuddhistCalendar& BuddhistCalendar::operator= ( const BuddhistCalendar& right) 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru GregorianCalendar::operator=(right); 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return *this; 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCalendar* BuddhistCalendar::clone(void) const 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return new BuddhistCalendar(*this); 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char *BuddhistCalendar::getType() const 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return "buddhist"; 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruint32_t BuddhistCalendar::handleGetExtendedYear() 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // EXTENDED_YEAR in BuddhistCalendar is a Gregorian year. 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // The default value of EXTENDED_YEAR is 1970 (Buddhist 2513) 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t year; 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (newerField(UCAL_EXTENDED_YEAR, UCAL_YEAR) == UCAL_EXTENDED_YEAR) { 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru year = internalGet(UCAL_EXTENDED_YEAR, kGregorianEpoch); 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // extended year is a gregorian year, where 1 = 1AD, 0 = 1BC, -1 = 2BC, etc 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru year = internalGet(UCAL_YEAR, kGregorianEpoch - kBuddhistEraStart) 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru + kBuddhistEraStart; 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return year; 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruint32_t BuddhistCalendar::handleComputeMonthStart(int32_t eyear, int32_t month, 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool useMonth) const 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return GregorianCalendar::handleComputeMonthStart(eyear, month, useMonth); 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid BuddhistCalendar::handleComputeFields(int32_t julianDay, UErrorCode& status) 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru GregorianCalendar::handleComputeFields(julianDay, status); 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t y = internalGet(UCAL_EXTENDED_YEAR) - kBuddhistEraStart; 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru internalSet(UCAL_ERA, 0); 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru internalSet(UCAL_YEAR, y); 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruint32_t BuddhistCalendar::handleGetLimit(UCalendarDateFields field, ELimitType limitType) const 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(field == UCAL_ERA) { 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return BE; 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return GregorianCalendar::handleGetLimit(field,limitType); 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if 0 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid BuddhistCalendar::timeToFields(UDate theTime, UBool quick, UErrorCode& status) 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru //Calendar::timeToFields(theTime, quick, status); 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t era = internalGet(UCAL_ERA); 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t year = internalGet(UCAL_YEAR); 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(era == GregorianCalendar::BC) { 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru year = 1-year; 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru era = BuddhistCalendar::BE; 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else if(era == GregorianCalendar::AD) { 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru era = BuddhistCalendar::BE; 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_INTERNAL_PROGRAM_ERROR; 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru year = year - kBuddhistEraStart; 121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru internalSet(UCAL_ERA, era); 123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru internalSet(UCAL_YEAR, year); 124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// default century 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst UDate BuddhistCalendar::fgSystemDefaultCentury = DBL_MIN; 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst int32_t BuddhistCalendar::fgSystemDefaultCenturyYear = -1; 130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUDate BuddhistCalendar::fgSystemDefaultCenturyStart = DBL_MIN; 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruint32_t BuddhistCalendar::fgSystemDefaultCenturyStartYear = -1; 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUBool BuddhistCalendar::haveDefaultCentury() const 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return TRUE; 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUDate BuddhistCalendar::defaultCenturyStart() const 141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return internalGetDefaultCenturyStart(); 143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruint32_t BuddhistCalendar::defaultCenturyStartYear() const 146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return internalGetDefaultCenturyStartYear(); 148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUDate 151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruBuddhistCalendar::internalGetDefaultCenturyStart() const 152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // lazy-evaluate systemDefaultCenturyStart 154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool needsUpdate; 155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UMTX_CHECK(NULL, (fgSystemDefaultCenturyStart == fgSystemDefaultCentury), needsUpdate); 156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (needsUpdate) { 158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru initializeSystemDefaultCentury(); 159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // use defaultCenturyStart unless it's the flag value; 162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // then use systemDefaultCenturyStart 163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return fgSystemDefaultCenturyStart; 165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruint32_t 168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruBuddhistCalendar::internalGetDefaultCenturyStartYear() const 169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // lazy-evaluate systemDefaultCenturyStartYear 171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool needsUpdate; 172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UMTX_CHECK(NULL, (fgSystemDefaultCenturyStart == fgSystemDefaultCentury), needsUpdate); 173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (needsUpdate) { 175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru initializeSystemDefaultCentury(); 176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // use defaultCenturyStart unless it's the flag value; 179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // then use systemDefaultCenturyStartYear 180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return fgSystemDefaultCenturyStartYear; 182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruBuddhistCalendar::initializeSystemDefaultCentury() 186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // initialize systemDefaultCentury and systemDefaultCenturyYear based 188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // on the current time. They'll be set to 80 years before 189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // the current time. 19085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UErrorCode status = U_ZERO_ERROR; 19185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho BuddhistCalendar calendar(Locale("@calendar=buddhist"),status); 19285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if (U_SUCCESS(status)) 193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 19485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho calendar.setTime(Calendar::getNow(), status); 19585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho calendar.add(UCAL_YEAR, -80, status); 19685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UDate newStart = calendar.getTime(status); 19785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t newYear = calendar.get(UCAL_YEAR, status); 19885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho umtx_lock(NULL); 19985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if (fgSystemDefaultCenturyStart == fgSystemDefaultCentury) { 20085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho fgSystemDefaultCenturyStartYear = newYear; 20185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho fgSystemDefaultCenturyStart = newStart; 202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 20385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho umtx_unlock(NULL); 204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 20585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho // We have no recourse upon failure unless we want to propagate the failure 20685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho // out. 207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_END 211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 213