Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Unified Diff: source/i18n/islamcal.cpp

Issue 1621843002: ICU 56 update step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@561
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/i18n/identifier_info.cpp ('k') | source/i18n/locdspnm.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/i18n/islamcal.cpp
diff --git a/source/i18n/islamcal.cpp b/source/i18n/islamcal.cpp
index 38ea781b226b0b9a085e101d2b6a4b87a3f7b93b..0a9f09726d9eb41c3c64081523c6a74f4084eb91 100644
--- a/source/i18n/islamcal.cpp
+++ b/source/i18n/islamcal.cpp
@@ -1,6 +1,6 @@
/*
******************************************************************************
-* Copyright (C) 2003-2014, International Business Machines Corporation
+* Copyright (C) 2003-2015, International Business Machines Corporation
* and others. All Rights Reserved.
******************************************************************************
*
@@ -318,6 +318,41 @@ int32_t IslamicCalendar::handleGetLimit(UCalendarDateFields field, ELimitType li
// Assorted calculation utilities
//
+// we could compress this down more if we need to
+static const int8_t umAlQuraYrStartEstimateFix[] = {
+ 0, 0, -1, 0, -1, 0, 0, 0, 0, 0, // 1300..
+ -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, // 1310..
+ 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, // 1320..
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, // 1330..
+ 0, 0, 1, 0, 0, -1, -1, 0, 0, 0, // 1340..
+ 1, 0, 0, -1, 0, 0, 0, 1, 1, 0, // 1350..
+ 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, // 1360..
+ 0, 1, 1, 0, 0, -1, 0, 1, 0, 1, // 1370..
+ 1, 0, 0, -1, 0, 1, 0, 0, 0, -1, // 1380..
+ 0, 1, 0, 1, 0, 0, 0, -1, 0, 0, // 1390..
+ 0, 0, -1, -1, 0, -1, 0, 1, 0, 0, // 1400..
+ 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, // 1410..
+ 0, 1, 0, 0, -1, -1, 0, 0, 0, 1, // 1420..
+ 0, 0, -1, -1, 0, -1, 0, 0, -1, -1, // 1430..
+ 0, -1, 0, -1, 0, 0, -1, -1, 0, 0, // 1440..
+ 0, 0, 0, 0, -1, 0, 1, 0, 1, 1, // 1450..
+ 0, 0, -1, 0, 1, 0, 0, 0, 0, 0, // 1460..
+ 1, 0, 1, 0, 0, 0, -1, 0, 1, 0, // 1470..
+ 0, -1, -1, 0, 0, 0, 1, 0, 0, 0, // 1480..
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, // 1490..
+ 1, 0, 0, -1, 0, 0, 0, 1, 1, 0, // 1500..
+ 0, -1, 0, 1, 0, 1, 1, 0, 0, 0, // 1510..
+ 0, 1, 0, 0, 0, -1, 0, 0, 0, 1, // 1520..
+ 0, 0, 0, -1, 0, 0, 0, 0, 0, -1, // 1530..
+ 0, -1, 0, 1, 0, 0, 0, -1, 0, 1, // 1540..
+ 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, // 1550..
+ -1, 0, 0, 0, 0, 1, 0, 0, 0, -1, // 1560..
+ 0, 0, 0, 0, -1, -1, 0, -1, 0, 1, // 1570..
+ 0, 0, -1, -1, 0, 0, 1, 1, 0, 0, // 1580..
+ -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, // 1590..
+ 1 // 1600
+};
+
/**
* Determine whether a year is a leap year in the Islamic civil calendar
*/
@@ -338,12 +373,11 @@ int32_t IslamicCalendar::yearStart(int32_t year) const{
} else if(cType==ASTRONOMICAL){
return trueMonthStart(12*(year-1));
} else {
- int32_t ys = yearStart(UMALQURA_YEAR_START-1);
- ys+= handleGetYearLength(UMALQURA_YEAR_START-1);
- for(int i=UMALQURA_YEAR_START; i< year; i++){
- ys+= handleGetYearLength(i);
- }
- return ys;
+ year -= UMALQURA_YEAR_START;
+ // rounded least-squares fit of the dates previously calculated from UMALQURA_MONTHLENGTH iteration
+ int32_t yrStartLinearEstimate = (int32_t)((354.36720 * (double)year) + 460322.05 + 0.5);
+ // need a slight correction to some
+ return yrStartLinearEstimate + umAlQuraYrStartEstimateFix[year];
}
}
@@ -352,7 +386,7 @@ int32_t IslamicCalendar::yearStart(int32_t year) const{
* from the Hijri epoch, origin 0.
*
* @param year The hijri year
-* @param year The hijri month, 0-based (assumed to be in range 0..11)
+* @param month The hijri month, 0-based (assumed to be in range 0..11)
*/
int32_t IslamicCalendar::monthStart(int32_t year, int32_t month) const {
if (cType == CIVIL || cType == TBLA) {
« no previous file with comments | « source/i18n/identifier_info.cpp ('k') | source/i18n/locdspnm.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698