LCOV - code coverage report
Current view: top level - intl/icu/source/i18n - taiwncal.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 60 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 16 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // © 2016 and later: Unicode, Inc. and others.
       2             : // License & terms of use: http://www.unicode.org/copyright.html
       3             : /*
       4             :  *******************************************************************************
       5             :  * Copyright (C) 2003-2013, International Business Machines Corporation and
       6             :  * others. All Rights Reserved.
       7             :  *******************************************************************************
       8             :  *
       9             :  * File TAIWNCAL.CPP
      10             :  *
      11             :  * Modification History:
      12             :  *  05/13/2003    srl     copied from gregocal.cpp
      13             :  *  06/29/2007    srl     copied from buddhcal.cpp
      14             :  *  05/12/2008    jce     modified to use calendar=roc per CLDR
      15             :  *
      16             :  */
      17             : 
      18             : #include "unicode/utypes.h"
      19             : 
      20             : #if !UCONFIG_NO_FORMATTING
      21             : 
      22             : #include "taiwncal.h"
      23             : #include "unicode/gregocal.h"
      24             : #include "umutex.h"
      25             : #include <float.h>
      26             : 
      27             : U_NAMESPACE_BEGIN
      28             : 
      29           0 : UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TaiwanCalendar)
      30             : 
      31             : static const int32_t kTaiwanEraStart = 1911;  // 1911 (Gregorian)
      32             : 
      33             : static const int32_t kGregorianEpoch = 1970; 
      34             : 
      35           0 : TaiwanCalendar::TaiwanCalendar(const Locale& aLocale, UErrorCode& success)
      36           0 : :   GregorianCalendar(aLocale, success)
      37             : {
      38           0 :     setTimeInMillis(getNow(), success); // Call this again now that the vtable is set up properly.
      39           0 : }
      40             : 
      41           0 : TaiwanCalendar::~TaiwanCalendar()
      42             : {
      43           0 : }
      44             : 
      45           0 : TaiwanCalendar::TaiwanCalendar(const TaiwanCalendar& source)
      46           0 : : GregorianCalendar(source)
      47             : {
      48           0 : }
      49             : 
      50           0 : TaiwanCalendar& TaiwanCalendar::operator= ( const TaiwanCalendar& right)
      51             : {
      52           0 :     GregorianCalendar::operator=(right);
      53           0 :     return *this;
      54             : }
      55             : 
      56           0 : Calendar* TaiwanCalendar::clone(void) const
      57             : {
      58           0 :     return new TaiwanCalendar(*this);
      59             : }
      60             : 
      61           0 : const char *TaiwanCalendar::getType() const
      62             : {
      63           0 :     return "roc";
      64             : }
      65             : 
      66           0 : int32_t TaiwanCalendar::handleGetExtendedYear()
      67             : {
      68             :     // EXTENDED_YEAR in TaiwanCalendar is a Gregorian year
      69             :     // The default value of EXTENDED_YEAR is 1970 (Minguo 59)
      70           0 :     int32_t year = kGregorianEpoch;
      71             : 
      72           0 :     if (newerField(UCAL_EXTENDED_YEAR, UCAL_YEAR) == UCAL_EXTENDED_YEAR
      73           0 :         && newerField(UCAL_EXTENDED_YEAR, UCAL_ERA) == UCAL_EXTENDED_YEAR) {
      74           0 :         year = internalGet(UCAL_EXTENDED_YEAR, kGregorianEpoch);
      75             :     } else {
      76           0 :         int32_t era = internalGet(UCAL_ERA, MINGUO);
      77           0 :         if(era == MINGUO) {
      78           0 :             year =     internalGet(UCAL_YEAR, 1) + kTaiwanEraStart;
      79           0 :         } else if(era == BEFORE_MINGUO) {
      80           0 :             year = 1 - internalGet(UCAL_YEAR, 1) + kTaiwanEraStart;
      81             :         }
      82             :     }
      83           0 :     return year;
      84             : }
      85             : 
      86           0 : void TaiwanCalendar::handleComputeFields(int32_t julianDay, UErrorCode& status)
      87             : {
      88           0 :     GregorianCalendar::handleComputeFields(julianDay, status);
      89           0 :     int32_t y = internalGet(UCAL_EXTENDED_YEAR) - kTaiwanEraStart;
      90           0 :     if(y>0) {
      91           0 :         internalSet(UCAL_ERA, MINGUO);
      92           0 :         internalSet(UCAL_YEAR, y);
      93             :     } else {
      94           0 :         internalSet(UCAL_ERA, BEFORE_MINGUO);
      95           0 :         internalSet(UCAL_YEAR, 1-y);
      96             :     }
      97           0 : }
      98             : 
      99           0 : int32_t TaiwanCalendar::handleGetLimit(UCalendarDateFields field, ELimitType limitType) const
     100             : {
     101           0 :     if(field == UCAL_ERA) {
     102           0 :         if(limitType == UCAL_LIMIT_MINIMUM || limitType == UCAL_LIMIT_GREATEST_MINIMUM) {
     103           0 :             return BEFORE_MINGUO;
     104             :         } else {
     105           0 :             return MINGUO;
     106             :         }
     107             :     } else {
     108           0 :         return GregorianCalendar::handleGetLimit(field,limitType);
     109             :     }
     110             : }
     111             : 
     112             : #if 0
     113             : void TaiwanCalendar::timeToFields(UDate theTime, UBool quick, UErrorCode& status)
     114             : {
     115             :     //Calendar::timeToFields(theTime, quick, status);
     116             : 
     117             :     int32_t era = internalGet(UCAL_ERA);
     118             :     int32_t year = internalGet(UCAL_YEAR);
     119             : 
     120             :     if(era == GregorianCalendar::BC) {
     121             :         year = 1-year;
     122             :         era = TaiwanCalendar::MINGUO;
     123             :     } else if(era == GregorianCalendar::AD) {
     124             :         era = TaiwanCalendar::MINGUO;
     125             :     } else {
     126             :         status = U_INTERNAL_PROGRAM_ERROR;
     127             :     }
     128             : 
     129             :     year = year - kTaiwanEraStart;
     130             : 
     131             :     internalSet(UCAL_ERA, era);
     132             :     internalSet(UCAL_YEAR, year);
     133             : }
     134             : #endif
     135             : 
     136             : /**
     137             :  * The system maintains a static default century start date and Year.  They are
     138             :  * initialized the first time they are used.  Once the system default century date 
     139             :  * and year are set, they do not change.
     140             :  */
     141             : static UDate           gSystemDefaultCenturyStart       = DBL_MIN;
     142             : static int32_t         gSystemDefaultCenturyStartYear   = -1;
     143             : static icu::UInitOnce  gSystemDefaultCenturyInit        = U_INITONCE_INITIALIZER;
     144             : 
     145           0 : UBool TaiwanCalendar::haveDefaultCentury() const
     146             : {
     147           0 :     return TRUE;
     148             : }
     149             : 
     150           0 : static void U_CALLCONV initializeSystemDefaultCentury()
     151             : {
     152             :     // initialize systemDefaultCentury and systemDefaultCenturyYear based
     153             :     // on the current time.  They'll be set to 80 years before
     154             :     // the current time.
     155           0 :     UErrorCode status = U_ZERO_ERROR;
     156           0 :     TaiwanCalendar calendar(Locale("@calendar=roc"),status);
     157           0 :     if (U_SUCCESS(status))
     158             :     {
     159           0 :         calendar.setTime(Calendar::getNow(), status);
     160           0 :         calendar.add(UCAL_YEAR, -80, status);
     161             : 
     162           0 :         gSystemDefaultCenturyStart = calendar.getTime(status);
     163           0 :         gSystemDefaultCenturyStartYear = calendar.get(UCAL_YEAR, status);
     164             :     }
     165             :     // We have no recourse upon failure unless we want to propagate the failure
     166             :     // out.
     167           0 : }
     168             : 
     169           0 : UDate TaiwanCalendar::defaultCenturyStart() const {
     170             :     // lazy-evaluate systemDefaultCenturyStart
     171           0 :     umtx_initOnce(gSystemDefaultCenturyInit, &initializeSystemDefaultCentury);
     172           0 :     return gSystemDefaultCenturyStart;
     173             : }
     174             : 
     175           0 : int32_t TaiwanCalendar::defaultCenturyStartYear() const {
     176             :     // lazy-evaluate systemDefaultCenturyStartYear
     177           0 :     umtx_initOnce(gSystemDefaultCenturyInit, &initializeSystemDefaultCentury);
     178           0 :     return gSystemDefaultCenturyStartYear;
     179             : }
     180             : 
     181             : U_NAMESPACE_END
     182             : 
     183             : #endif

Generated by: LCOV version 1.13