intl/icu/source/i18n/udateintervalformat.cpp

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

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

mercurial