diff options
Diffstat (limited to 'Build/source/libs/icu/icu-50.1/i18n/udateintervalformat.cpp')
-rw-r--r-- | Build/source/libs/icu/icu-50.1/i18n/udateintervalformat.cpp | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/Build/source/libs/icu/icu-50.1/i18n/udateintervalformat.cpp b/Build/source/libs/icu/icu-50.1/i18n/udateintervalformat.cpp new file mode 100644 index 00000000000..ef6fc197c75 --- /dev/null +++ b/Build/source/libs/icu/icu-50.1/i18n/udateintervalformat.cpp @@ -0,0 +1,106 @@ +/* +***************************************************************************************** +* Copyright (C) 2010-2011, International Business Machines +* Corporation and others. All Rights Reserved. +***************************************************************************************** +*/ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/udateintervalformat.h" +#include "unicode/dtitvfmt.h" +#include "unicode/dtintrv.h" +#include "unicode/localpointer.h" +#include "unicode/timezone.h" +#include "unicode/locid.h" +#include "unicode/unistr.h" + +U_NAMESPACE_USE + + +U_CAPI UDateIntervalFormat* U_EXPORT2 +udtitvfmt_open(const char* locale, + const UChar* skeleton, + int32_t skeletonLength, + const UChar* tzID, + int32_t tzIDLength, + UErrorCode* status) +{ + if (U_FAILURE(*status)) { + return NULL; + } + if ((skeleton == NULL ? skeletonLength != 0 : skeletonLength < -1) || + (tzID == NULL ? tzIDLength != 0 : tzIDLength < -1) + ) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + UnicodeString skel((UBool)(skeletonLength == -1), skeleton, skeletonLength); + LocalPointer<DateIntervalFormat> formatter( + DateIntervalFormat::createInstance(skel, Locale(locale), *status)); + if (U_FAILURE(*status)) { + return NULL; + } + if(tzID != 0) { + TimeZone *zone = TimeZone::createTimeZone(UnicodeString((UBool)(tzIDLength == -1), tzID, tzIDLength)); + if(zone == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + formatter->adoptTimeZone(zone); + } + return (UDateIntervalFormat*)formatter.orphan(); +} + + +U_CAPI void U_EXPORT2 +udtitvfmt_close(UDateIntervalFormat *formatter) +{ + delete (DateIntervalFormat*)formatter; +} + + +U_CAPI int32_t U_EXPORT2 +udtitvfmt_format(const UDateIntervalFormat* formatter, + UDate fromDate, + UDate toDate, + UChar* result, + int32_t resultCapacity, + UFieldPosition* position, + UErrorCode* status) +{ + if (U_FAILURE(*status)) { + return -1; + } + if (result == NULL ? resultCapacity != 0 : resultCapacity < 0) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + UnicodeString res; + if (result != NULL) { + // NULL destination for pure preflighting: empty dummy string + // otherwise, alias the destination buffer (copied from udat_format) + res.setTo(result, 0, resultCapacity); + } + FieldPosition fp; + if (position != 0) { + fp.setField(position->field); + } + + DateInterval interval = DateInterval(fromDate,toDate); + ((const DateIntervalFormat*)formatter)->format( &interval, res, fp, *status ); + if (U_FAILURE(*status)) { + return -1; + } + if (position != 0) { + position->beginIndex = fp.getBeginIndex(); + position->endIndex = fp.getEndIndex(); + } + + return res.extract(result, resultCapacity, *status); +} + + +#endif /* #if !UCONFIG_NO_FORMATTING */ |