LCOV - code coverage report
Current view: top level - intl/icu/source/i18n - utmscale.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 36 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 3 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) 2004-2012, International Business Machines Corporation and
       6             : * others. All Rights Reserved.
       7             : *******************************************************************************
       8             : */
       9             : 
      10             : #include "unicode/utypes.h"
      11             : 
      12             : #if !UCONFIG_NO_FORMATTING
      13             : 
      14             : #include "unicode/utmscale.h"
      15             : 
      16             : #define ticks        INT64_C(1)
      17             : #define microseconds (ticks * 10)
      18             : #define milliseconds (microseconds * 1000)
      19             : #define seconds      (milliseconds * 1000)
      20             : #define minutes      (seconds * 60)
      21             : #define hours        (minutes * 60)
      22             : #define days         (hours * 24)
      23             : 
      24             : /* Constants generated by ICU4J com.ibm.icu.dev.tool.timescale.GenerateCTimeScaleData. */
      25             : static const int64_t timeScaleTable[UDTS_MAX_SCALE][UTSV_MAX_SCALE_VALUE] = {
      26             :   /*    units             epochOffset                     fromMin                        fromMax                            toMin                        toMax                    epochOffsetP1                epochOffsetM1              unitsRound                    minRound                     maxRound          */
      27             :     {milliseconds, INT64_C(62135596800000),     INT64_C(-984472800485477),     INT64_C(860201606885477),     INT64_C(-9223372036854774999), INT64_C(9223372036854774999), INT64_C(62135596800001),     INT64_C(62135596799999),     INT64_C(5000),         INT64_C(-9223372036854770808), INT64_C(9223372036854770807)},
      28             :     {seconds,      INT64_C(62135596800),        INT64_C(-984472800485),        INT64_C(860201606885),        U_INT64_MIN,                   U_INT64_MAX,                  INT64_C(62135596801),        INT64_C(62135596799),        INT64_C(5000000),      INT64_C(-9223372036849775808), INT64_C(9223372036849775807)},
      29             :     {milliseconds, INT64_C(62135596800000),     INT64_C(-984472800485477),     INT64_C(860201606885477),     INT64_C(-9223372036854774999), INT64_C(9223372036854774999), INT64_C(62135596800001),     INT64_C(62135596799999),     INT64_C(5000),         INT64_C(-9223372036854770808), INT64_C(9223372036854770807)},
      30             :     {ticks,        INT64_C(504911232000000000), U_INT64_MIN,                   INT64_C(8718460804854775807), INT64_C(-8718460804854775808), U_INT64_MAX,                  INT64_C(504911232000000000), INT64_C(504911232000000000), INT64_C(0),            U_INT64_MIN,                   U_INT64_MAX},
      31             :     {ticks,        INT64_C(0),                  U_INT64_MIN,                   U_INT64_MAX,                  U_INT64_MIN,                   U_INT64_MAX,                  INT64_C(0),                  INT64_C(0),                  INT64_C(0),            U_INT64_MIN,                   U_INT64_MAX},
      32             :     {seconds,      INT64_C(60052752000),        INT64_C(-982389955685),        INT64_C(862284451685),        U_INT64_MIN,                   U_INT64_MAX,                  INT64_C(60052752001),        INT64_C(60052751999),        INT64_C(5000000),      INT64_C(-9223372036849775808), INT64_C(9223372036849775807)},
      33             :     {seconds,      INT64_C(63113904000),        INT64_C(-985451107685),        INT64_C(859223299685),        U_INT64_MIN,                   U_INT64_MAX,                  INT64_C(63113904001),        INT64_C(63113903999),        INT64_C(5000000),      INT64_C(-9223372036849775808), INT64_C(9223372036849775807)},
      34             :     {days,         INT64_C(693594),             INT64_C(-11368793),            INT64_C(9981605),             U_INT64_MIN,                   U_INT64_MAX,                  INT64_C(693595),             INT64_C(693593),             INT64_C(432000000000), INT64_C(-9223371604854775808), INT64_C(9223371604854775807)},
      35             :     {days,         INT64_C(693594),             INT64_C(-11368793),            INT64_C(9981605),             U_INT64_MIN,                   U_INT64_MAX,                  INT64_C(693595),             INT64_C(693593),             INT64_C(432000000000), INT64_C(-9223371604854775808), INT64_C(9223371604854775807)},
      36             :     {microseconds, INT64_C(62135596800000000),  INT64_C(-984472800485477580),  INT64_C(860201606885477580),  INT64_C(-9223372036854775804), INT64_C(9223372036854775804), INT64_C(62135596800000001),  INT64_C(62135596799999999),  INT64_C(5),            INT64_C(-9223372036854775803), INT64_C(9223372036854775802)},
      37             : };
      38             : 
      39             : U_CAPI int64_t U_EXPORT2
      40           0 : utmscale_getTimeScaleValue(UDateTimeScale timeScale, UTimeScaleValue value, UErrorCode *status)
      41             : {
      42           0 :     if (status == NULL || U_FAILURE(*status)) {
      43           0 :         return 0;
      44             :     }
      45             : 
      46           0 :     if (timeScale < UDTS_JAVA_TIME || UDTS_MAX_SCALE <= timeScale
      47           0 :         || value < UTSV_UNITS_VALUE || UTSV_MAX_SCALE_VALUE <= value)
      48             :     {
      49           0 :         *status = U_ILLEGAL_ARGUMENT_ERROR;
      50           0 :         return 0;
      51             :     }
      52             : 
      53           0 :     return timeScaleTable[timeScale][value];
      54             : }
      55             : 
      56             : U_CAPI int64_t U_EXPORT2
      57           0 : utmscale_fromInt64(int64_t otherTime, UDateTimeScale timeScale, UErrorCode *status)
      58             : {
      59             :     const int64_t *data;
      60             :     
      61           0 :     if (status == NULL || U_FAILURE(*status)) {
      62           0 :         return 0;
      63             :     }
      64             : 
      65           0 :     if ((int32_t)timeScale < 0 || timeScale >= UDTS_MAX_SCALE) {
      66           0 :         *status = U_ILLEGAL_ARGUMENT_ERROR;
      67           0 :         return 0;
      68             :     }
      69             : 
      70           0 :     data = (const int64_t *)(&timeScaleTable[timeScale]);
      71             : 
      72           0 :     if (otherTime < data[UTSV_FROM_MIN_VALUE] || otherTime > data[UTSV_FROM_MAX_VALUE]) {
      73           0 :         *status = U_ILLEGAL_ARGUMENT_ERROR;
      74           0 :         return 0;
      75             :     }
      76             :     
      77           0 :     return (otherTime + data[UTSV_EPOCH_OFFSET_VALUE]) * data[UTSV_UNITS_VALUE];
      78             : }
      79             : 
      80             : U_CAPI int64_t U_EXPORT2
      81           0 : utmscale_toInt64(int64_t universalTime, UDateTimeScale timeScale, UErrorCode *status)
      82             : {
      83             :     const int64_t *data;
      84             :     
      85           0 :     if (status == NULL || U_FAILURE(*status)) {
      86           0 :         return 0;
      87             :     }
      88             : 
      89           0 :     if ((int32_t)timeScale < 0 || timeScale >= UDTS_MAX_SCALE) {
      90           0 :         *status = U_ILLEGAL_ARGUMENT_ERROR;
      91           0 :         return 0;
      92             :     }
      93             : 
      94           0 :     data = (const int64_t *)(&timeScaleTable[timeScale]);
      95             : 
      96           0 :     if (universalTime < data[UTSV_TO_MIN_VALUE] || universalTime > data[UTSV_TO_MAX_VALUE]) {
      97           0 :         *status = U_ILLEGAL_ARGUMENT_ERROR;
      98           0 :         return 0;
      99             :     }
     100             :     
     101           0 :     if (universalTime < 0) {
     102           0 :         if (universalTime < data[UTSV_MIN_ROUND_VALUE]) {
     103           0 :             return (universalTime + data[UTSV_UNITS_ROUND_VALUE]) / data[UTSV_UNITS_VALUE] - data[UTSV_EPOCH_OFFSET_PLUS_1_VALUE];
     104             :         }
     105             :         
     106           0 :         return (universalTime - data[UTSV_UNITS_ROUND_VALUE]) / data[UTSV_UNITS_VALUE] - data[UTSV_EPOCH_OFFSET_VALUE];
     107             :     }
     108             :     
     109           0 :     if (universalTime > data[UTSV_MAX_ROUND_VALUE]) {
     110           0 :         return (universalTime - data[UTSV_UNITS_ROUND_VALUE]) / data[UTSV_UNITS_VALUE] - data[UTSV_EPOCH_OFFSET_MINUS_1_VALUE];
     111             :     }
     112             :     
     113           0 :     return (universalTime + data[UTSV_UNITS_ROUND_VALUE]) / data[UTSV_UNITS_VALUE] - data[UTSV_EPOCH_OFFSET_VALUE];
     114             : }
     115             : 
     116             : #endif /* #if !UCONFIG_NO_FORMATTING */

Generated by: LCOV version 1.13