ICU 69.1  69.1
reldatefmt.h
Go to the documentation of this file.
1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4 *****************************************************************************
5 * Copyright (C) 2014-2016, International Business Machines Corporation and
6 * others.
7 * All Rights Reserved.
8 *****************************************************************************
9 *
10 * File RELDATEFMT.H
11 *****************************************************************************
12 */
13 
14 #ifndef __RELDATEFMT_H
15 #define __RELDATEFMT_H
16 
17 #include "unicode/utypes.h"
18 
19 #if U_SHOW_CPLUSPLUS_API
20 
21 #include "unicode/uobject.h"
23 #include "unicode/ureldatefmt.h"
24 #include "unicode/locid.h"
25 #include "unicode/formattedvalue.h"
26 
32 #if !UCONFIG_NO_FORMATTING
33 
39 typedef enum UDateRelativeUnit {
40 
46 
52 
58 
64 
70 
76 
82 
83 #ifndef U_HIDE_DEPRECATED_API
84 
89 #endif // U_HIDE_DEPRECATED_API
91 
96 typedef enum UDateAbsoluteUnit {
97 
98  // Days of week have to remain together and in order from Sunday to
99  // Saturday.
105 
111 
117 
123 
129 
135 
141 
147 
153 
159 
165 
171 
177 
183 
189 
190 #ifndef U_HIDE_DEPRECATED_API
191 
196 #endif // U_HIDE_DEPRECATED_API
198 
204 typedef enum UDateDirection {
205 
211 
217 
223 
229 
235 
241 
242 #ifndef U_HIDE_DEPRECATED_API
243 
248 #endif // U_HIDE_DEPRECATED_API
250 
251 #if !UCONFIG_NO_BREAK_ITERATION
252 
253 U_NAMESPACE_BEGIN
254 
255 class BreakIterator;
256 class RelativeDateTimeCacheData;
257 class SharedNumberFormat;
258 class SharedPluralRules;
259 class SharedBreakIterator;
260 class NumberFormat;
261 class UnicodeString;
262 class FormattedRelativeDateTime;
263 class FormattedRelativeDateTimeData;
264 
275  public:
280  FormattedRelativeDateTime() : fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {}
281 
287 
293 
296 
298  FormattedRelativeDateTime& operator=(const FormattedRelativeDateTime&) = delete;
299 
304  FormattedRelativeDateTime& operator=(FormattedRelativeDateTime&& src) U_NOEXCEPT;
305 
307  UnicodeString toString(UErrorCode& status) const U_OVERRIDE;
308 
310  UnicodeString toTempString(UErrorCode& status) const U_OVERRIDE;
311 
313  Appendable &appendTo(Appendable& appendable, UErrorCode& status) const U_OVERRIDE;
314 
316  UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const U_OVERRIDE;
317 
318  private:
319  FormattedRelativeDateTimeData *fData;
320  UErrorCode fErrorCode;
321  explicit FormattedRelativeDateTime(FormattedRelativeDateTimeData *results)
322  : fData(results), fErrorCode(U_ZERO_ERROR) {}
323  explicit FormattedRelativeDateTime(UErrorCode errorCode)
324  : fData(nullptr), fErrorCode(errorCode) {}
325  friend class RelativeDateTimeFormatter;
326 };
327 
397 public:
398 
404 
409  RelativeDateTimeFormatter(const Locale& locale, UErrorCode& status);
410 
422  const Locale& locale, NumberFormat *nfToAdopt, UErrorCode& status);
423 
440  const Locale& locale,
441  NumberFormat *nfToAdopt,
443  UDisplayContext capitalizationContext,
444  UErrorCode& status);
445 
451 
456  RelativeDateTimeFormatter& operator=(
457  const RelativeDateTimeFormatter& other);
458 
463  virtual ~RelativeDateTimeFormatter();
464 
484  UnicodeString& format(
485  double quantity,
486  UDateDirection direction,
487  UDateRelativeUnit unit,
488  UnicodeString& appendTo,
489  UErrorCode& status) const;
490 
508  FormattedRelativeDateTime formatToValue(
509  double quantity,
510  UDateDirection direction,
511  UDateRelativeUnit unit,
512  UErrorCode& status) const;
513 
530  UnicodeString& format(
531  UDateDirection direction,
532  UDateAbsoluteUnit unit,
533  UnicodeString& appendTo,
534  UErrorCode& status) const;
535 
551  FormattedRelativeDateTime formatToValue(
552  UDateDirection direction,
553  UDateAbsoluteUnit unit,
554  UErrorCode& status) const;
555 
576  UnicodeString& formatNumeric(
577  double offset,
579  UnicodeString& appendTo,
580  UErrorCode& status) const;
581 
600  FormattedRelativeDateTime formatNumericToValue(
601  double offset,
603  UErrorCode& status) const;
604 
625  UnicodeString& format(
626  double offset,
628  UnicodeString& appendTo,
629  UErrorCode& status) const;
630 
649  FormattedRelativeDateTime formatToValue(
650  double offset,
652  UErrorCode& status) const;
653 
666  UnicodeString& combineDateAndTime(
667  const UnicodeString& relativeDateString,
668  const UnicodeString& timeString,
669  UnicodeString& appendTo,
670  UErrorCode& status) const;
671 
677  const NumberFormat& getNumberFormat() const;
678 
684  UDisplayContext getCapitalizationContext() const;
685 
691  UDateRelativeDateTimeFormatterStyle getFormatStyle() const;
692 
693 private:
694  const RelativeDateTimeCacheData* fCache;
695  const SharedNumberFormat *fNumberFormat;
696  const SharedPluralRules *fPluralRules;
698  UDisplayContext fContext;
699  const SharedBreakIterator *fOptBreakIterator;
700  Locale fLocale;
701  void init(
702  NumberFormat *nfToAdopt,
703  BreakIterator *brkIter,
704  UErrorCode &status);
705  UnicodeString& adjustForContext(UnicodeString &) const;
706  UBool checkNoAdjustForContext(UErrorCode& status) const;
707 
708  template<typename F, typename... Args>
709  UnicodeString& doFormat(
710  F callback,
711  UnicodeString& appendTo,
712  UErrorCode& status,
713  Args... args) const;
714 
715  template<typename F, typename... Args>
716  FormattedRelativeDateTime doFormatToValue(
717  F callback,
718  UErrorCode& status,
719  Args... args) const;
720 
721  void formatImpl(
722  double quantity,
723  UDateDirection direction,
724  UDateRelativeUnit unit,
725  FormattedRelativeDateTimeData& output,
726  UErrorCode& status) const;
727  void formatAbsoluteImpl(
728  UDateDirection direction,
729  UDateAbsoluteUnit unit,
730  FormattedRelativeDateTimeData& output,
731  UErrorCode& status) const;
732  void formatNumericImpl(
733  double offset,
735  FormattedRelativeDateTimeData& output,
736  UErrorCode& status) const;
737  void formatRelativeImpl(
738  double offset,
740  FormattedRelativeDateTimeData& output,
741  UErrorCode& status) const;
742 };
743 
744 U_NAMESPACE_END
745 
746 #endif /* !UCONFIG_NO_BREAK_ITERATION */
747 #endif /* !UCONFIG_NO_FORMATTING */
748 
749 #endif /* U_SHOW_CPLUSPLUS_API */
750 
751 #endif /* __RELDATEFMT_H */
C++ API: Abstract operations for localized strings.
An immutable class containing the result of a relative datetime formatting operation.
Definition: reldatefmt.h:274
#define U_OVERRIDE
Defined to the C++11 &quot;override&quot; keyword if available.
Definition: umachine.h:130
One more than the highest normal UDateAbsoluteUnit value.
Definition: reldatefmt.h:195
URelativeDateTimeUnit
Represents the unit for formatting a relative date.
Definition: ureldatefmt.h:81
UDisplayContext
Display context settings.
No error, no warning.
Definition: utypes.h:449
C API: Display context types (enum values)
An abstract formatted value: a string with associated field attributes.
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:301
C API: URelativeDateTimeFormatter, relative date formatting of unit + numeric offset.
The BreakIterator class implements methods for finding the location of boundaries in text...
Definition: brkiter.h:106
FormattedRelativeDateTime()
Default constructor; makes an empty FormattedRelativeDateTime.
Definition: reldatefmt.h:280
UDateRelativeDateTimeFormatterStyle
The formatting style.
Definition: ureldatefmt.h:48
UDateDirection
Represents a direction for an absolute unit e.g &quot;Next Tuesday&quot; or &quot;Last Tuesday&quot;. ...
Definition: reldatefmt.h:204
Plain, which means the absence of a qualifier.
Definition: reldatefmt.h:240
Formats simple relative dates.
Definition: reldatefmt.h:396
C++ API: Common ICU base class UObject.
Represents a span of a string containing a given field.
#define U_NOEXCEPT
&quot;noexcept&quot; if supported, otherwise empty.
Definition: platform.h:529
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:415
One more than the highest normal UDateDirection value.
Definition: reldatefmt.h:247
UDateAbsoluteUnit
Represents an absolute unit.
Definition: reldatefmt.h:96
C++ API: Locale ID object.
Basic definitions for ICU, for both C and C++ APIs.
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:295
One more than the highest normal UDateRelativeUnit value.
Definition: reldatefmt.h:88
UObject is the common ICU &quot;boilerplate&quot; class.
Definition: uobject.h:223
UMemory is the common ICU base class.
Definition: uobject.h:115
Requested operation can not be completed with ICU in its current state.
Definition: utypes.h:478
UDateRelativeUnit
Represents the unit for formatting a relative date.
Definition: reldatefmt.h:39
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition: umachine.h:269
Base class for objects to which Unicode characters and strings can be appended.
Definition: appendable.h:54
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:195