ICU 57.1  57.1
numfmt.h
Go to the documentation of this file.
1 /*
2 ********************************************************************************
3 * Copyright (C) 1997-2016, International Business Machines Corporation and others.
4 * All Rights Reserved.
5 ********************************************************************************
6 *
7 * File NUMFMT.H
8 *
9 * Modification History:
10 *
11 * Date Name Description
12 * 02/19/97 aliu Converted from java.
13 * 03/18/97 clhuang Updated per C++ implementation.
14 * 04/17/97 aliu Changed DigitCount to int per code review.
15 * 07/20/98 stephen JDK 1.2 sync up. Added scientific support.
16 * Changed naming conventions to match C++ guidelines
17 * Derecated Java style constants (eg, INTEGER_FIELD)
18 ********************************************************************************
19 */
20 
21 #ifndef NUMFMT_H
22 #define NUMFMT_H
23 
24 
25 #include "unicode/utypes.h"
26 
32 #if !UCONFIG_NO_FORMATTING
33 
34 #include "unicode/unistr.h"
35 #include "unicode/format.h"
36 #include "unicode/unum.h" // UNumberFormatStyle
37 #include "unicode/locid.h"
38 #include "unicode/stringpiece.h"
39 #include "unicode/curramt.h"
41 
42 class NumberFormatTest;
43 
45 
46 class SharedNumberFormat;
47 
48 #if !UCONFIG_NO_SERVICE
49 class NumberFormatFactory;
50 class StringEnumeration;
51 #endif
52 
168 public:
186  kIntegerField = UNUM_INTEGER_FIELD,
188  kFractionField = UNUM_FRACTION_FIELD,
190  kDecimalSeparatorField = UNUM_DECIMAL_SEPARATOR_FIELD,
192  kExponentSymbolField = UNUM_EXPONENT_SYMBOL_FIELD,
194  kExponentSignField = UNUM_EXPONENT_SIGN_FIELD,
196  kExponentField = UNUM_EXPONENT_FIELD,
198  kGroupingSeparatorField = UNUM_GROUPING_SEPARATOR_FIELD,
200  kCurrencyField = UNUM_CURRENCY_FIELD,
202  kPercentField = UNUM_PERCENT_FIELD,
204  kPermillField = UNUM_PERMILL_FIELD,
206  kSignField = UNUM_SIGN_FIELD,
207 
213  INTEGER_FIELD = UNUM_INTEGER_FIELD,
215  FRACTION_FIELD = UNUM_FRACTION_FIELD
216  };
217 
222  virtual ~NumberFormat();
223 
230  virtual UBool operator==(const Format& other) const;
231 
232 
233  using Format::format;
234 
250  virtual UnicodeString& format(const Formattable& obj,
251  UnicodeString& appendTo,
252  FieldPosition& pos,
253  UErrorCode& status) const;
254 
271  virtual UnicodeString& format(const Formattable& obj,
272  UnicodeString& appendTo,
273  FieldPositionIterator* posIter,
274  UErrorCode& status) const;
275 
304  virtual void parseObject(const UnicodeString& source,
305  Formattable& result,
306  ParsePosition& parse_pos) const;
307 
318  UnicodeString& format( double number,
319  UnicodeString& appendTo) const;
320 
331  UnicodeString& format( int32_t number,
332  UnicodeString& appendTo) const;
333 
344  UnicodeString& format( int64_t number,
345  UnicodeString& appendTo) const;
346 
359  virtual UnicodeString& format(double number,
360  UnicodeString& appendTo,
361  FieldPosition& pos) const = 0;
376  virtual UnicodeString& format(double number,
377  UnicodeString& appendTo,
378  FieldPosition& pos,
379  UErrorCode &status) const;
394  virtual UnicodeString& format(double number,
395  UnicodeString& appendTo,
396  FieldPositionIterator* posIter,
397  UErrorCode& status) const;
410  virtual UnicodeString& format(int32_t number,
411  UnicodeString& appendTo,
412  FieldPosition& pos) const = 0;
413 
427  virtual UnicodeString& format(int32_t number,
428  UnicodeString& appendTo,
429  FieldPosition& pos,
430  UErrorCode &status) const;
431 
446  virtual UnicodeString& format(int32_t number,
447  UnicodeString& appendTo,
448  FieldPositionIterator* posIter,
449  UErrorCode& status) const;
463  virtual UnicodeString& format(int64_t number,
464  UnicodeString& appendTo,
465  FieldPosition& pos) const;
466 
481  virtual UnicodeString& format(int64_t number,
482  UnicodeString& appendTo,
483  FieldPosition& pos,
484  UErrorCode& status) const;
499  virtual UnicodeString& format(int64_t number,
500  UnicodeString& appendTo,
501  FieldPositionIterator* posIter,
502  UErrorCode& status) const;
503 
520  virtual UnicodeString& format(const StringPiece &number,
521  UnicodeString& appendTo,
522  FieldPositionIterator* posIter,
523  UErrorCode& status) const;
524 public:
542  virtual UnicodeString& format(const DigitList &number,
543  UnicodeString& appendTo,
544  FieldPositionIterator* posIter,
545  UErrorCode& status) const;
546 
564  virtual UnicodeString& format(const DigitList &number,
565  UnicodeString& appendTo,
566  FieldPosition& pos,
567  UErrorCode& status) const;
568 
569 public:
570 
590  virtual void parse(const UnicodeString& text,
591  Formattable& result,
592  ParsePosition& parsePosition) const = 0;
593 
607  virtual void parse(const UnicodeString& text,
608  Formattable& result,
609  UErrorCode& status) const;
610 
630  virtual CurrencyAmount* parseCurrency(const UnicodeString& text,
631  ParsePosition& pos) const;
632 
644  UBool isParseIntegerOnly(void) const;
645 
653  virtual void setParseIntegerOnly(UBool value);
654 
662  virtual void setLenient(UBool enable);
663 
672  virtual UBool isLenient(void) const;
673 
679  static NumberFormat* U_EXPORT2 createInstance(UErrorCode&);
680 
687  static NumberFormat* U_EXPORT2 createInstance(const Locale& inLocale,
688  UErrorCode&);
689 
698  static NumberFormat* U_EXPORT2 createInstance(const Locale& desiredLocale,
699  UNumberFormatStyle style,
700  UErrorCode& errorCode);
701 
702 #ifndef U_HIDE_INTERNAL_API
703 
709  static NumberFormat* internalCreateInstance(
710  const Locale& desiredLocale,
711  UNumberFormatStyle style,
712  UErrorCode& errorCode);
713 
721  static const SharedNumberFormat* U_EXPORT2 createSharedInstance(
722  const Locale& inLocale, UNumberFormatStyle style, UErrorCode& status);
723 
724 #endif /* U_HIDE_INTERNAL_API */
725 
730  static NumberFormat* U_EXPORT2 createCurrencyInstance(UErrorCode&);
731 
737  static NumberFormat* U_EXPORT2 createCurrencyInstance(const Locale& inLocale,
738  UErrorCode&);
739 
744  static NumberFormat* U_EXPORT2 createPercentInstance(UErrorCode&);
745 
751  static NumberFormat* U_EXPORT2 createPercentInstance(const Locale& inLocale,
752  UErrorCode&);
753 
758  static NumberFormat* U_EXPORT2 createScientificInstance(UErrorCode&);
759 
765  static NumberFormat* U_EXPORT2 createScientificInstance(const Locale& inLocale,
766  UErrorCode&);
767 
773  static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
774 
775 #if !UCONFIG_NO_SERVICE
776 
786  static URegistryKey U_EXPORT2 registerFactory(NumberFormatFactory* toAdopt, UErrorCode& status);
787 
800  static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
801 
808  static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
809 #endif /* UCONFIG_NO_SERVICE */
810 
820  UBool isGroupingUsed(void) const;
821 
828  virtual void setGroupingUsed(UBool newValue);
829 
838  int32_t getMaximumIntegerDigits(void) const;
839 
852  virtual void setMaximumIntegerDigits(int32_t newValue);
853 
862  int32_t getMinimumIntegerDigits(void) const;
863 
874  virtual void setMinimumIntegerDigits(int32_t newValue);
875 
884  int32_t getMaximumFractionDigits(void) const;
885 
896  virtual void setMaximumFractionDigits(int32_t newValue);
897 
906  int32_t getMinimumFractionDigits(void) const;
907 
918  virtual void setMinimumFractionDigits(int32_t newValue);
919 
932  virtual void setCurrency(const UChar* theCurrency, UErrorCode& ec);
933 
941  const UChar* getCurrency() const;
942 
952  virtual void setContext(UDisplayContext value, UErrorCode& status);
953 
964  virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const;
965 
966 public:
967 
976  static UClassID U_EXPORT2 getStaticClassID(void);
977 
989  virtual UClassID getDynamicClassID(void) const = 0;
990 
991 protected:
992 
997  NumberFormat();
998 
1003  NumberFormat(const NumberFormat&);
1004 
1010 
1019  virtual void getEffectiveCurrency(UChar* result, UErrorCode& ec) const;
1020 
1021 #ifndef U_HIDE_INTERNAL_API
1022 
1028  static NumberFormat* makeInstance(const Locale& desiredLocale,
1029  UNumberFormatStyle style,
1030  UBool mustBeDecimalFormat,
1031  UErrorCode& errorCode);
1032 #endif /* U_HIDE_INTERNAL_API */
1033 
1034 private:
1035 
1036  static UBool isStyleSupported(UNumberFormatStyle style);
1037 
1045  static NumberFormat* makeInstance(const Locale& desiredLocale,
1046  UNumberFormatStyle style,
1047  UErrorCode& errorCode);
1048 
1049  UBool fGroupingUsed;
1050  int32_t fMaxIntegerDigits;
1051  int32_t fMinIntegerDigits;
1052  int32_t fMaxFractionDigits;
1053  int32_t fMinFractionDigits;
1054 
1055  protected:
1057  static const int32_t gDefaultMaxIntegerDigits;
1059  static const int32_t gDefaultMinIntegerDigits;
1060 
1061  private:
1062  UBool fParseIntegerOnly;
1063  UBool fLenient; // TRUE => lenient parse is enabled
1064 
1065  // ISO currency code
1066  UChar fCurrency[4];
1067 
1068  UDisplayContext fCapitalizationContext;
1069 
1070  friend class ICUNumberFormatFactory; // access to makeInstance
1071  friend class ICUNumberFormatService;
1072  friend class ::NumberFormatTest; // access to isStyleSupported()
1073 };
1074 
1075 #if !UCONFIG_NO_SERVICE
1076 
1085 public:
1086 
1091  virtual ~NumberFormatFactory();
1092 
1099  virtual UBool visible(void) const = 0;
1100 
1106  virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const = 0;
1107 
1115  virtual NumberFormat* createFormat(const Locale& loc, UNumberFormatStyle formatType) = 0;
1116 };
1117 
1123 protected:
1129 
1135 
1136 public:
1140  SimpleNumberFormatFactory(const Locale& locale, UBool visible = TRUE);
1141 
1145  virtual ~SimpleNumberFormatFactory();
1146 
1150  virtual UBool visible(void) const;
1151 
1155  virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const;
1156 };
1157 #endif /* #if !UCONFIG_NO_SERVICE */
1158 
1159 // -------------------------------------
1160 
1161 inline UBool
1163 {
1164  return fParseIntegerOnly;
1165 }
1166 
1167 inline UBool
1169 {
1170  return fLenient;
1171 }
1172 
1174 
1175 #endif /* #if !UCONFIG_NO_FORMATTING */
1176 
1177 #endif // _NUMFMT
1178 //eof
Base class for all formats.
Definition: format.h:94
UnicodeString _id
The locale supported by this factory, as a UnicodeString.
Definition: numfmt.h:1134
const UBool _visible
True if the locale supported by this factory is visible.
Definition: numfmt.h:1128
EAlignmentFields
Alignment Field constants used to construct a FieldPosition object.
Definition: numfmt.h:184
UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, UErrorCode &status) const
Formats an object to produce a string.
static const int32_t gDefaultMinIntegerDigits
Definition: numfmt.h:1059
Abstract base class for all number formats.
Definition: numfmt.h:167
virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode &status) const =0
Return the locale names directly supported by this factory.
UDisplayContext
Display context settings.
C++ API: Unicode String.
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:91
Base class for 'pure' C++ implementations of uenum api.
Definition: strenum.h:55
C API: Display context types (enum values)
C++ API: Base class for all formats.
virtual UBool visible(void) const =0
Return true if this factory will be visible.
UBool isParseIntegerOnly(void) const
Return true if this format will parse numbers as integers only.
Definition: numfmt.h:1162
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:358
C++ API: StringPiece: Read-only byte string wrapper class.
C++ API: Currency Amount Object.
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:129
A NumberFormatFactory that supports a single locale.
Definition: numfmt.h:1122
UNumberFormatStyle
The possible number format styles.
Definition: unum.h:139
A NumberFormatFactory is used to register new number formats.
Definition: numfmt.h:1084
FieldPositionIterator returns the field ids and their start/limit positions generated by a call to Fo...
Definition: fpositer.h:53
static const int32_t gDefaultMaxIntegerDigits
Definition: numfmt.h:1057
virtual UClassID getDynamicClassID() const
ICU4C "poor man's RTTI", returns a UClassID for the actual ICU class.
#define TRUE
The TRUE value of a UBool.
Definition: umachine.h:238
const void * URegistryKey
Opaque type returned by registerInstance, registerFactory and unregister for service registration...
Definition: umisc.h:55
uint16_t UChar
Define UChar to be UCHAR_TYPE, if that is #defined (for example, to char16_t), or wchar_t if that is ...
Definition: umachine.h:312
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:130
UDisplayContextType
Display context types, for getting values of a particular setting.
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers...
Definition: utypes.h:476
FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted out...
Definition: fieldpos.h:106
ParsePosition is a simple class used by Format and its subclasses to keep track of the current positi...
Definition: parsepos.h:47
C++ API: Locale ID object.
virtual UBool operator==(const Format &other) const =0
Return true if the given Format objects are semantically equal.
virtual void parseObject(const UnicodeString &source, Formattable &result, ParsePosition &parse_pos) const =0
Parse a string to produce an object.
Basic definitions for ICU, for both C and C++ APIs.
Format & operator=(const Format &)
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:293
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition: fmtable.h:66
A string-like object that points to a sized piece of memory.
Definition: stringpiece.h:52
UObject is the common ICU "boilerplate" class.
Definition: uobject.h:221
virtual UBool isLenient(void) const
Returns whether lenient parsing is enabled (it is off by default).
Definition: numfmt.h:1168
A currency together with a numeric amount, such as 200 USD.
Definition: curramt.h:35
int8_t UBool
The ICU boolean type.
Definition: umachine.h:234
C API: NumberFormat.
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:185