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

Side by Side 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 unified diff | Download patch
« no previous file with comments | « source/i18n/identifier_info.cpp ('k') | source/i18n/locdspnm.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 ****************************************************************************** 2 ******************************************************************************
3 * Copyright (C) 2003-2014, International Business Machines Corporation 3 * Copyright (C) 2003-2015, International Business Machines Corporation
4 * and others. All Rights Reserved. 4 * and others. All Rights Reserved.
5 ****************************************************************************** 5 ******************************************************************************
6 * 6 *
7 * File ISLAMCAL.H 7 * File ISLAMCAL.H
8 * 8 *
9 * Modification History: 9 * Modification History:
10 * 10 *
11 * Date Name Description 11 * Date Name Description
12 * 10/14/2003 srl ported from java IslamicCalendar 12 * 10/14/2003 srl ported from java IslamicCalendar
13 ***************************************************************************** 13 *****************************************************************************
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 * @draft ICU 2.4 311 * @draft ICU 2.4
312 */ 312 */
313 int32_t IslamicCalendar::handleGetLimit(UCalendarDateFields field, ELimitType li mitType) const { 313 int32_t IslamicCalendar::handleGetLimit(UCalendarDateFields field, ELimitType li mitType) const {
314 return LIMITS[field][limitType]; 314 return LIMITS[field][limitType];
315 } 315 }
316 316
317 //------------------------------------------------------------------------- 317 //-------------------------------------------------------------------------
318 // Assorted calculation utilities 318 // Assorted calculation utilities
319 // 319 //
320 320
321 // we could compress this down more if we need to
322 static const int8_t umAlQuraYrStartEstimateFix[] = {
323 0, 0, -1, 0, -1, 0, 0, 0, 0, 0, // 1300..
324 -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, // 1310..
325 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, // 1320..
326 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, // 1330..
327 0, 0, 1, 0, 0, -1, -1, 0, 0, 0, // 1340..
328 1, 0, 0, -1, 0, 0, 0, 1, 1, 0, // 1350..
329 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, // 1360..
330 0, 1, 1, 0, 0, -1, 0, 1, 0, 1, // 1370..
331 1, 0, 0, -1, 0, 1, 0, 0, 0, -1, // 1380..
332 0, 1, 0, 1, 0, 0, 0, -1, 0, 0, // 1390..
333 0, 0, -1, -1, 0, -1, 0, 1, 0, 0, // 1400..
334 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, // 1410..
335 0, 1, 0, 0, -1, -1, 0, 0, 0, 1, // 1420..
336 0, 0, -1, -1, 0, -1, 0, 0, -1, -1, // 1430..
337 0, -1, 0, -1, 0, 0, -1, -1, 0, 0, // 1440..
338 0, 0, 0, 0, -1, 0, 1, 0, 1, 1, // 1450..
339 0, 0, -1, 0, 1, 0, 0, 0, 0, 0, // 1460..
340 1, 0, 1, 0, 0, 0, -1, 0, 1, 0, // 1470..
341 0, -1, -1, 0, 0, 0, 1, 0, 0, 0, // 1480..
342 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, // 1490..
343 1, 0, 0, -1, 0, 0, 0, 1, 1, 0, // 1500..
344 0, -1, 0, 1, 0, 1, 1, 0, 0, 0, // 1510..
345 0, 1, 0, 0, 0, -1, 0, 0, 0, 1, // 1520..
346 0, 0, 0, -1, 0, 0, 0, 0, 0, -1, // 1530..
347 0, -1, 0, 1, 0, 0, 0, -1, 0, 1, // 1540..
348 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, // 1550..
349 -1, 0, 0, 0, 0, 1, 0, 0, 0, -1, // 1560..
350 0, 0, 0, 0, -1, -1, 0, -1, 0, 1, // 1570..
351 0, 0, -1, -1, 0, 0, 1, 1, 0, 0, // 1580..
352 -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, // 1590..
353 1 // 1600
354 };
355
321 /** 356 /**
322 * Determine whether a year is a leap year in the Islamic civil calendar 357 * Determine whether a year is a leap year in the Islamic civil calendar
323 */ 358 */
324 UBool IslamicCalendar::civilLeapYear(int32_t year) 359 UBool IslamicCalendar::civilLeapYear(int32_t year)
325 { 360 {
326 return (14 + 11 * year) % 30 < 11; 361 return (14 + 11 * year) % 30 < 11;
327 } 362 }
328 363
329 /** 364 /**
330 * Return the day # on which the given year starts. Days are counted 365 * Return the day # on which the given year starts. Days are counted
331 * from the Hijri epoch, origin 0. 366 * from the Hijri epoch, origin 0.
332 */ 367 */
333 int32_t IslamicCalendar::yearStart(int32_t year) const{ 368 int32_t IslamicCalendar::yearStart(int32_t year) const{
334 if (cType == CIVIL || cType == TBLA || 369 if (cType == CIVIL || cType == TBLA ||
335 (cType == UMALQURA && (year < UMALQURA_YEAR_START || year > UMALQURA_YEA R_END))) 370 (cType == UMALQURA && (year < UMALQURA_YEAR_START || year > UMALQURA_YEA R_END)))
336 { 371 {
337 return (year-1)*354 + ClockMath::floorDivide((3+11*year),30); 372 return (year-1)*354 + ClockMath::floorDivide((3+11*year),30);
338 } else if(cType==ASTRONOMICAL){ 373 } else if(cType==ASTRONOMICAL){
339 return trueMonthStart(12*(year-1)); 374 return trueMonthStart(12*(year-1));
340 } else { 375 } else {
341 int32_t ys = yearStart(UMALQURA_YEAR_START-1); 376 year -= UMALQURA_YEAR_START;
342 ys+= handleGetYearLength(UMALQURA_YEAR_START-1); 377 // rounded least-squares fit of the dates previously calculated from UMA LQURA_MONTHLENGTH iteration
343 for(int i=UMALQURA_YEAR_START; i< year; i++){ 378 int32_t yrStartLinearEstimate = (int32_t)((354.36720 * (double)year) + 4 60322.05 + 0.5);
344 ys+= handleGetYearLength(i); 379 // need a slight correction to some
345 } 380 return yrStartLinearEstimate + umAlQuraYrStartEstimateFix[year];
346 return ys;
347 } 381 }
348 } 382 }
349 383
350 /** 384 /**
351 * Return the day # on which the given month starts. Days are counted 385 * Return the day # on which the given month starts. Days are counted
352 * from the Hijri epoch, origin 0. 386 * from the Hijri epoch, origin 0.
353 * 387 *
354 * @param year The hijri year 388 * @param year The hijri year
355 * @param year The hijri month, 0-based (assumed to be in range 0..11) 389 * @param month The hijri month, 0-based (assumed to be in range 0..11)
356 */ 390 */
357 int32_t IslamicCalendar::monthStart(int32_t year, int32_t month) const { 391 int32_t IslamicCalendar::monthStart(int32_t year, int32_t month) const {
358 if (cType == CIVIL || cType == TBLA) { 392 if (cType == CIVIL || cType == TBLA) {
359 // This does not handle months out of the range 0..11 393 // This does not handle months out of the range 0..11
360 return (int32_t)uprv_ceil(29.5*month) 394 return (int32_t)uprv_ceil(29.5*month)
361 + (year-1)*354 + (int32_t)ClockMath::floorDivide((3+11*year),30); 395 + (year-1)*354 + (int32_t)ClockMath::floorDivide((3+11*year),30);
362 } else if(cType==ASTRONOMICAL){ 396 } else if(cType==ASTRONOMICAL){
363 return trueMonthStart(12*(year-1) + month); 397 return trueMonthStart(12*(year-1) + month);
364 } else { 398 } else {
365 int32_t ms = yearStart(year); 399 int32_t ms = yearStart(year);
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 } 754 }
721 755
722 756
723 757
724 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IslamicCalendar) 758 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IslamicCalendar)
725 759
726 U_NAMESPACE_END 760 U_NAMESPACE_END
727 761
728 #endif 762 #endif
729 763
OLDNEW
« 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