]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/i18n/unicode/dtitvfmt.h
ICU-59180.0.1.tar.gz
[apple/icu.git] / icuSources / i18n / unicode / dtitvfmt.h
index 38eff4c29a4d97ed3c919e85a3735f8fc5f46a2f..fe1db7a4a5efe6145e3720c62783755a51c86da7 100644 (file)
@@ -1,5 +1,7 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
 /********************************************************************************
-* Copyright (C) 2008-2013,2015, International Business Machines Corporation and
+* Copyright (C) 2008-2016, International Business Machines Corporation and
 * others. All Rights Reserved.
 *******************************************************************************
 *
@@ -28,6 +30,7 @@
 #include "unicode/dtptngen.h"
 #include "unicode/udateintervalformat.h"
 
+#if U_SHOW_CPLUSPLUS_API
 U_NAMESPACE_BEGIN
 
 
@@ -390,6 +393,9 @@ public:
      *                          Result is appended to existing contents.
      * @param fieldPosition     On input: an alignment field, if desired.
      *                          On output: the offsets of the alignment field.
+     *                          There may be multiple instances of a given field type
+     *                          in an interval format; in this case the fieldPosition
+     *                          offsets refer to the first instance.
      * @param status            Output param filled with success/failure status.
      * @return                  Reference to 'appendTo' parameter.
      * @stable ICU 4.0
@@ -409,6 +415,9 @@ public:
      *                          Result is appended to existing contents.
      * @param fieldPosition     On input: an alignment field, if desired.
      *                          On output: the offsets of the alignment field.
+     *                          There may be multiple instances of a given field type
+     *                          in an interval format; in this case the fieldPosition
+     *                          offsets refer to the first instance.
      * @param status            Output param filled with success/failure status.
      * @return                  Reference to 'appendTo' parameter.
      * @stable ICU 4.0
@@ -433,6 +442,9 @@ public:
      *                          Result is appended to existing contents.
      * @param fieldPosition     On input: an alignment field, if desired.
      *                          On output: the offsets of the alignment field.
+     *                          There may be multiple instances of a given field type
+     *                          in an interval format; in this case the fieldPosition
+     *                          offsets refer to the first instance.
      * @param status            Output param filled with success/failure status.
      *                          Caller needs to make sure it is SUCCESS
      *                          at the function entrance
@@ -496,7 +508,13 @@ public:
 
 
     /**
-     * Gets the date formatter
+     * Gets the date formatter. The DateIntervalFormat instance continues to own
+     * the returned DateFormatter object, and will use and possibly modify it
+     * during format operations. In a multi-threaded environment, the returned
+     * DateFormat can only be used if it is certain that no other threads are
+     * concurrently using this DateIntervalFormatter, even for nominally const
+     * functions.
+     *
      * @return the date formatter associated with this date interval formatter.
      * @stable ICU 4.0
      */
@@ -615,7 +633,7 @@ private:
 
     /**
      * default constructor
-     * @internal ICU 4.0
+     * @internal (private)
      */
     DateIntervalFormat();
 
@@ -658,36 +676,25 @@ private:
                                                 const UnicodeString* skeleton,
                                                 UErrorCode& status);
 
-    /**
-     * Create a simple date/time formatter from skeleton, given locale,
-     * and date time pattern generator.
-     *
-     * @param skeleton  the skeleton on which date format based.
-     * @param locale    the given locale.
-     * @param dtpng     the date time pattern generator.
-     * @param status    Output param to be set to success/failure code.
-     *                  If it is failure, the returned date formatter will
-     *                  be NULL.
-     * @return          a simple date formatter which the caller owns.
-     */
-    static SimpleDateFormat* U_EXPORT2 createSDFPatternInstance(
-                                        const UnicodeString& skeleton,
-                                        const Locale& locale,
-                                        DateTimePatternGenerator* dtpng,
-                                        UErrorCode& status);
-
-
     /**
      *  Below are for generating interval patterns local to the formatter
      */
 
     /**
-     * @param combiningPattern  xxx
-     * @param pat0              xxx
-     * @param pos0              xxx
-     * @param pat1              xxx
-     * @param pos1              xxx
-     * @param posResult         xxx
+     * Provide an updated FieldPosition posResult based on two formats,
+     * the FieldPosition values for each of them, and the pattern used
+     * to combine them. The idea is for posResult to indicate the first
+     * instance (if any) of the specified field in the combined result,
+     * with correct offsets.
+     *
+     * @param combiningPattern  Pattern used to combine pat0 and pat1
+     * @param pat0              Formatted date/time value to replace {0}
+     * @param pos0              FieldPosition within pat0
+     * @param pat1              Formatted date/time value to replace {1}
+     * @param pos1              FieldPosition within pat1
+     * @param posResult         FieldPosition to be set to the correct
+     *                          position of the first field instance when
+     *                          pat0 and pat1 are combined using combiningPattern
      */
     static void
     adjustPosition(UnicodeString& combiningPattern, // has {0} and {1} in it
@@ -696,13 +703,14 @@ private:
                    FieldPosition& posResult);
 
 
-
     /**
      * Format 2 Calendars using fall-back interval pattern
      *
      * The full pattern used in this fall-back format is the
      * full pattern of the date formatter.
      *
+     * gFormatterMutex must already be locked when calling this function.
+     *
      * @param fromCalendar      calendar set to the from date in date interval
      *                          to be formatted into date interval string
      * @param toCalendar        calendar set to the to date in date interval
@@ -715,6 +723,7 @@ private:
      *                          On output: the offsets of the alignment field.
      * @param status            output param set to success/failure code on exit
      * @return                  Reference to 'appendTo' parameter.
+     * @internal (private)
      */
     UnicodeString& fallbackFormat(Calendar& fromCalendar,
                                   Calendar& toCalendar,
@@ -970,9 +979,40 @@ private:
                         const UnicodeString* secondPart,
                         UBool laterDateFirst);
 
+    /**
+     * Format 2 Calendars to produce a string.
+     * Implementation of the similar public format function.
+     * Must be called with gFormatterMutex already locked.
+     *
+     * Note: "fromCalendar" and "toCalendar" are not const,
+     * since calendar is not const in  SimpleDateFormat::format(Calendar&),
+     *
+     * @param fromCalendar      calendar set to the from date in date interval
+     *                          to be formatted into date interval string
+     * @param toCalendar        calendar set to the to date in date interval
+     *                          to be formatted into date interval string
+     * @param appendTo          Output parameter to receive result.
+     *                          Result is appended to existing contents.
+     * @param fieldPosition     On input: an alignment field, if desired.
+     *                          On output: the offsets of the alignment field.
+     *                          There may be multiple instances of a given field type
+     *                          in an interval format; in this case the fieldPosition
+     *                          offsets refer to the first instance.
+     * @param status            Output param filled with success/failure status.
+     *                          Caller needs to make sure it is SUCCESS
+     *                          at the function entrance
+     * @return                  Reference to 'appendTo' parameter.
+     * @internal (private)
+     */
+    UnicodeString& formatImpl(Calendar& fromCalendar,
+                              Calendar& toCalendar,
+                              UnicodeString& appendTo,
+                              FieldPosition& fieldPosition,
+                              UErrorCode& status) const ;
+
 
     // from calendar field to pattern letter
-    static const UChar fgCalendarFieldToPatternLetter[];
+    static const char16_t fgCalendarFieldToPatternLetter[];
 
 
     /**
@@ -993,10 +1033,7 @@ private:
     Calendar* fFromCalendar;
     Calendar* fToCalendar;
 
-    /**
-     * Date time pattern generator
-     */
-    DateTimePatternGenerator* fDtpng;
+    Locale fLocale;
 
     /**
      * Following are interval information relevant (locale) to this formatter.
@@ -1023,6 +1060,7 @@ DateIntervalFormat::operator!=(const Format& other) const  {
 }
 
 U_NAMESPACE_END
+#endif // U_SHOW_CPLUSPLUS_API
 
 #endif /* #if !UCONFIG_NO_FORMATTING */