ICU 51.2  51.2
numfmt.h
Go to the documentation of this file.
1 /*
2 ********************************************************************************
3 * Copyright (C) 1997-2013, 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"
40 
41 class NumberFormatTest;
42 
44 
45 #if !UCONFIG_NO_SERVICE
46 class NumberFormatFactory;
47 class StringEnumeration;
48 #endif
49 
170 public:
188  kIntegerField = UNUM_INTEGER_FIELD,
190  kFractionField = UNUM_FRACTION_FIELD,
192  kDecimalSeparatorField = UNUM_DECIMAL_SEPARATOR_FIELD,
194  kExponentSymbolField = UNUM_EXPONENT_SYMBOL_FIELD,
196  kExponentSignField = UNUM_EXPONENT_SIGN_FIELD,
198  kExponentField = UNUM_EXPONENT_FIELD,
200  kGroupingSeparatorField = UNUM_GROUPING_SEPARATOR_FIELD,
202  kCurrencyField = UNUM_CURRENCY_FIELD,
204  kPercentField = UNUM_PERCENT_FIELD,
206  kPermillField = UNUM_PERMILL_FIELD,
208  kSignField = UNUM_SIGN_FIELD,
209 
215  INTEGER_FIELD = UNUM_INTEGER_FIELD,
217  FRACTION_FIELD = UNUM_FRACTION_FIELD
218  };
219 
224  virtual ~NumberFormat();
225 
232  virtual UBool operator==(const Format& other) const;
233 
234 
235  using Format::format;
236 
252  virtual UnicodeString& format(const Formattable& obj,
253  UnicodeString& appendTo,
254  FieldPosition& pos,
255  UErrorCode& status) const;
256 
273  virtual UnicodeString& format(const Formattable& obj,
274  UnicodeString& appendTo,
275  FieldPositionIterator* posIter,
276  UErrorCode& status) const;
277 
306  virtual void parseObject(const UnicodeString& source,
307  Formattable& result,
308  ParsePosition& parse_pos) const;
309 
320  UnicodeString& format( double number,
321  UnicodeString& appendTo) const;
322 
333  UnicodeString& format( int32_t number,
334  UnicodeString& appendTo) const;
335 
346  UnicodeString& format( int64_t number,
347  UnicodeString& appendTo) const;
348 
361  virtual UnicodeString& format(double number,
362  UnicodeString& appendTo,
363  FieldPosition& pos) const = 0;
378  virtual UnicodeString& format(double number,
379  UnicodeString& appendTo,
380  FieldPosition& pos,
381  UErrorCode &status) const;
396  virtual UnicodeString& format(double number,
397  UnicodeString& appendTo,
398  FieldPositionIterator* posIter,
399  UErrorCode& status) const;
412  virtual UnicodeString& format(int32_t number,
413  UnicodeString& appendTo,
414  FieldPosition& pos) const = 0;
415 
429  virtual UnicodeString& format(int32_t number,
430  UnicodeString& appendTo,
431  FieldPosition& pos,
432  UErrorCode &status) const;
433 
448  virtual UnicodeString& format(int32_t number,
449  UnicodeString& appendTo,
450  FieldPositionIterator* posIter,
451  UErrorCode& status) const;
465  virtual UnicodeString& format(int64_t number,
466  UnicodeString& appendTo,
467  FieldPosition& pos) const;
468 
482  virtual UnicodeString& format(int64_t number,
483  UnicodeString& appendTo,
484  FieldPosition& pos,
485  UErrorCode& status) const;
500  virtual UnicodeString& format(int64_t number,
501  UnicodeString& appendTo,
502  FieldPositionIterator* posIter,
503  UErrorCode& status) const;
504 
521  virtual UnicodeString& format(const StringPiece &number,
522  UnicodeString& appendTo,
523  FieldPositionIterator* posIter,
524  UErrorCode& status) const;
525 public:
543  virtual UnicodeString& format(const DigitList &number,
544  UnicodeString& appendTo,
545  FieldPositionIterator* posIter,
546  UErrorCode& status) const;
547 
565  virtual UnicodeString& format(const DigitList &number,
566  UnicodeString& appendTo,
567  FieldPosition& pos,
568  UErrorCode& status) const;
569 
570 public:
571 
582  UnicodeString& format(const Formattable& obj,
583  UnicodeString& appendTo,
584  UErrorCode& status) const;
585 
605  virtual void parse(const UnicodeString& text,
606  Formattable& result,
607  ParsePosition& parsePosition) const = 0;
608 
622  virtual void parse(const UnicodeString& text,
623  Formattable& result,
624  UErrorCode& status) const;
625 
645  virtual CurrencyAmount* parseCurrency(const UnicodeString& text,
646  ParsePosition& pos) const;
647 
659  UBool isParseIntegerOnly(void) const;
660 
668  virtual void setParseIntegerOnly(UBool value);
669 
677  virtual void setLenient(UBool enable);
678 
687  virtual UBool isLenient(void) const;
688 
697  static NumberFormat* U_EXPORT2 createInstance(UErrorCode&);
698 
707  static NumberFormat* U_EXPORT2 createInstance(const Locale& inLocale,
708  UErrorCode&);
709 
718  static NumberFormat* U_EXPORT2 createInstance(const Locale& desiredLocale,
719  UNumberFormatStyle style,
720  UErrorCode& errorCode);
721 
726  static NumberFormat* U_EXPORT2 createCurrencyInstance(UErrorCode&);
727 
733  static NumberFormat* U_EXPORT2 createCurrencyInstance(const Locale& inLocale,
734  UErrorCode&);
735 
740  static NumberFormat* U_EXPORT2 createPercentInstance(UErrorCode&);
741 
747  static NumberFormat* U_EXPORT2 createPercentInstance(const Locale& inLocale,
748  UErrorCode&);
749 
754  static NumberFormat* U_EXPORT2 createScientificInstance(UErrorCode&);
755 
761  static NumberFormat* U_EXPORT2 createScientificInstance(const Locale& inLocale,
762  UErrorCode&);
763 
769  static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
770 
771 #if !UCONFIG_NO_SERVICE
772 
779  static URegistryKey U_EXPORT2 registerFactory(NumberFormatFactory* toAdopt, UErrorCode& status);
780 
790  static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
791 
798  static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
799 #endif /* UCONFIG_NO_SERVICE */
800 
810  UBool isGroupingUsed(void) const;
811 
818  virtual void setGroupingUsed(UBool newValue);
819 
828  int32_t getMaximumIntegerDigits(void) const;
829 
842  virtual void setMaximumIntegerDigits(int32_t newValue);
843 
852  int32_t getMinimumIntegerDigits(void) const;
853 
864  virtual void setMinimumIntegerDigits(int32_t newValue);
865 
874  int32_t getMaximumFractionDigits(void) const;
875 
886  virtual void setMaximumFractionDigits(int32_t newValue);
887 
896  int32_t getMinimumFractionDigits(void) const;
897 
908  virtual void setMinimumFractionDigits(int32_t newValue);
909 
922  virtual void setCurrency(const UChar* theCurrency, UErrorCode& ec);
923 
931  const UChar* getCurrency() const;
932 
933 public:
934 
943  static UClassID U_EXPORT2 getStaticClassID(void);
944 
956  virtual UClassID getDynamicClassID(void) const = 0;
957 
958 protected:
959 
964  NumberFormat();
965 
970  NumberFormat(const NumberFormat&);
971 
977 
986  virtual void getEffectiveCurrency(UChar* result, UErrorCode& ec) const;
987 
988 #ifndef U_HIDE_INTERNAL_API
989 
995  static NumberFormat* makeInstance(const Locale& desiredLocale,
996  UNumberFormatStyle style,
997  UBool mustBeDecimalFormat,
998  UErrorCode& errorCode);
999 #endif /* U_HIDE_INTERNAL_API */
1000 
1001 private:
1002 
1003  static UBool isStyleSupported(UNumberFormatStyle style);
1004 
1012  static NumberFormat* makeInstance(const Locale& desiredLocale,
1013  UNumberFormatStyle style,
1014  UErrorCode& errorCode);
1015 
1016  UBool fGroupingUsed;
1017  int32_t fMaxIntegerDigits;
1018  int32_t fMinIntegerDigits;
1019  int32_t fMaxFractionDigits;
1020  int32_t fMinFractionDigits;
1021  UBool fParseIntegerOnly;
1022  UBool fLenient; // TRUE => lenient parse is enabled
1023 
1024  // ISO currency code
1025  UChar fCurrency[4];
1026 
1027  friend class ICUNumberFormatFactory; // access to makeInstance
1028  friend class ICUNumberFormatService;
1029  friend class ::NumberFormatTest; // access to isStyleSupported()
1030 };
1031 
1032 #if !UCONFIG_NO_SERVICE
1033 
1042 public:
1043 
1048  virtual ~NumberFormatFactory();
1049 
1056  virtual UBool visible(void) const = 0;
1057 
1063  virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const = 0;
1064 
1072  virtual NumberFormat* createFormat(const Locale& loc, UNumberFormatStyle formatType) = 0;
1073 };
1074 
1080 protected:
1086 
1092 
1093 public:
1097  SimpleNumberFormatFactory(const Locale& locale, UBool visible = TRUE);
1098 
1102  virtual ~SimpleNumberFormatFactory();
1103 
1107  virtual UBool visible(void) const;
1108 
1112  virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const;
1113 };
1114 #endif /* #if !UCONFIG_NO_SERVICE */
1115 
1116 // -------------------------------------
1117 
1118 inline UBool
1119 NumberFormat::isParseIntegerOnly() const
1120 {
1121  return fParseIntegerOnly;
1122 }
1123 
1124 inline UBool
1125 NumberFormat::isLenient() const
1126 {
1127  return fLenient;
1128 }
1129 
1130 inline UnicodeString&
1131 NumberFormat::format(const Formattable& obj,
1132  UnicodeString& appendTo,
1133  UErrorCode& status) const {
1134  return Format::format(obj, appendTo, status);
1135 }
1136 
1138 
1139 #endif /* #if !UCONFIG_NO_FORMATTING */
1140 
1141 #endif // _NUMFMT
1142 //eof