LCOV - code coverage report
Current view: top level - intl/icu/source/i18n - udateintervalformat.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 41 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) 2010-2011, International Business Machines
       6             : * Corporation and others. All Rights Reserved.
       7             : *****************************************************************************************
       8             : */
       9             : 
      10             : #include "unicode/utypes.h"
      11             : 
      12             : #if !UCONFIG_NO_FORMATTING
      13             : 
      14             : #include "unicode/udateintervalformat.h"
      15             : #include "unicode/dtitvfmt.h"
      16             : #include "unicode/dtintrv.h"
      17             : #include "unicode/localpointer.h"
      18             : #include "unicode/timezone.h"
      19             : #include "unicode/locid.h"
      20             : #include "unicode/unistr.h"
      21             : 
      22             : U_NAMESPACE_USE
      23             : 
      24             : 
      25             : U_CAPI UDateIntervalFormat* U_EXPORT2
      26           0 : udtitvfmt_open(const char*  locale,
      27             :                const UChar* skeleton,
      28             :                int32_t      skeletonLength,
      29             :                const UChar* tzID,
      30             :                int32_t      tzIDLength,
      31             :                UErrorCode*  status)
      32             : {
      33           0 :     if (U_FAILURE(*status)) {
      34           0 :         return NULL;
      35             :     }
      36           0 :     if ((skeleton == NULL ? skeletonLength != 0 : skeletonLength < -1) ||
      37           0 :         (tzID == NULL ? tzIDLength != 0 : tzIDLength < -1)
      38             :     ) {
      39           0 :         *status = U_ILLEGAL_ARGUMENT_ERROR;
      40           0 :         return NULL;
      41             :     }
      42           0 :     UnicodeString skel((UBool)(skeletonLength == -1), skeleton, skeletonLength);
      43             :     LocalPointer<DateIntervalFormat> formatter(
      44           0 :             DateIntervalFormat::createInstance(skel, Locale(locale), *status));
      45           0 :     if (U_FAILURE(*status)) {
      46           0 :         return NULL;
      47             :     }
      48           0 :     if(tzID != 0) {
      49           0 :         TimeZone *zone = TimeZone::createTimeZone(UnicodeString((UBool)(tzIDLength == -1), tzID, tzIDLength));
      50           0 :         if(zone == NULL) {
      51           0 :             *status = U_MEMORY_ALLOCATION_ERROR;
      52           0 :             return NULL;
      53             :         }
      54           0 :         formatter->adoptTimeZone(zone);
      55             :     }
      56           0 :     return (UDateIntervalFormat*)formatter.orphan();
      57             : }
      58             : 
      59             : 
      60             : U_CAPI void U_EXPORT2
      61           0 : udtitvfmt_close(UDateIntervalFormat *formatter)
      62             : {
      63           0 :     delete (DateIntervalFormat*)formatter;
      64           0 : }
      65             : 
      66             : 
      67             : U_CAPI int32_t U_EXPORT2
      68           0 : udtitvfmt_format(const UDateIntervalFormat* formatter,
      69             :                  UDate           fromDate,
      70             :                  UDate           toDate,
      71             :                  UChar*          result,
      72             :                  int32_t         resultCapacity,
      73             :                  UFieldPosition* position,
      74             :                  UErrorCode*     status)
      75             : {
      76           0 :     if (U_FAILURE(*status)) {
      77           0 :         return -1;
      78             :     }
      79           0 :     if (result == NULL ? resultCapacity != 0 : resultCapacity < 0) {
      80           0 :         *status = U_ILLEGAL_ARGUMENT_ERROR;
      81           0 :         return 0;
      82             :     }
      83           0 :     UnicodeString res;
      84           0 :     if (result != NULL) {
      85             :         // NULL destination for pure preflighting: empty dummy string
      86             :         // otherwise, alias the destination buffer (copied from udat_format)
      87           0 :         res.setTo(result, 0, resultCapacity);
      88             :     }
      89           0 :     FieldPosition fp;
      90           0 :     if (position != 0) {
      91           0 :         fp.setField(position->field);
      92             :     }
      93             : 
      94           0 :     DateInterval interval = DateInterval(fromDate,toDate);
      95           0 :     ((const DateIntervalFormat*)formatter)->format( &interval, res, fp, *status );
      96           0 :     if (U_FAILURE(*status)) {
      97           0 :         return -1;
      98             :     }
      99           0 :     if (position != 0) {
     100           0 :         position->beginIndex = fp.getBeginIndex();
     101           0 :         position->endIndex = fp.getEndIndex();
     102             :     }
     103             : 
     104           0 :     return res.extract(result, resultCapacity, *status);
     105             : }
     106             : 
     107             : 
     108             : #endif /* #if !UCONFIG_NO_FORMATTING */

Generated by: LCOV version 1.13