Home | History | Annotate | Download | only in i18n
      1 /*
      2 ********************************************************************************
      3 *   Copyright (C) 2005-2015, International Business Machines
      4 *   Corporation and others.  All Rights Reserved.
      5 ********************************************************************************
      6 *
      7 * File WINNMFMT.H
      8 *
      9 ********************************************************************************
     10 */
     11 
     12 #ifndef __WINNMFMT
     13 #define __WINNMFMT
     14 
     15 #include "unicode/utypes.h"
     16 
     17 #if U_PLATFORM_USES_ONLY_WIN32_API
     18 
     19 #include "unicode/format.h"
     20 #include "unicode/datefmt.h"
     21 #include "unicode/calendar.h"
     22 #include "unicode/ustring.h"
     23 #include "unicode/locid.h"
     24 
     25 #if !UCONFIG_NO_FORMATTING
     26 
     27 /**
     28  * \file
     29  * \brief C++ API: Format numbers using Windows API.
     30  */
     31 
     32 U_NAMESPACE_BEGIN
     33 
     34 union FormatInfo;
     35 
     36 class Win32NumberFormat : public NumberFormat
     37 {
     38 public:
     39     Win32NumberFormat(const Locale &locale, UBool currency, UErrorCode &status);
     40 
     41     Win32NumberFormat(const Win32NumberFormat &other);
     42 
     43     virtual ~Win32NumberFormat();
     44 
     45     virtual Format *clone(void) const;
     46 
     47     Win32NumberFormat &operator=(const Win32NumberFormat &other);
     48 
     49     /**
     50      * Format a double number. Concrete subclasses must implement
     51      * these pure virtual methods.
     52      *
     53      * @param number    The value to be formatted.
     54      * @param appendTo  Output parameter to receive result.
     55      *                  Result is appended to existing contents.
     56      * @param pos       On input: an alignment field, if desired.
     57      *                  On output: the offsets of the alignment field.
     58      * @return          Reference to 'appendTo' parameter.
     59      */
     60     virtual UnicodeString& format(double number,
     61                                   UnicodeString& appendTo,
     62                                   FieldPosition& pos) const;
     63     /**
     64      * Format a long number. Concrete subclasses must implement
     65      * these pure virtual methods.
     66      *
     67      * @param number    The value to be formatted.
     68      * @param appendTo  Output parameter to receive result.
     69      *                  Result is appended to existing contents.
     70      * @param pos       On input: an alignment field, if desired.
     71      *                  On output: the offsets of the alignment field.
     72      * @return          Reference to 'appendTo' parameter.
     73     */
     74     virtual UnicodeString& format(int32_t number,
     75                                   UnicodeString& appendTo,
     76                                   FieldPosition& pos) const;
     77 
     78     /**
     79      * Format an int64 number.
     80      *
     81      * @param number    The value to be formatted.
     82      * @param appendTo  Output parameter to receive result.
     83      *                  Result is appended to existing contents.
     84      * @param pos       On input: an alignment field, if desired.
     85      *                  On output: the offsets of the alignment field.
     86      * @return          Reference to 'appendTo' parameter.
     87     */
     88     virtual UnicodeString& format(int64_t number,
     89                                   UnicodeString& appendTo,
     90                                   FieldPosition& pos) const;
     91 
     92     using NumberFormat::format;
     93 
     94 // Use the default behavior for the following.
     95 //    virtual UnicodeString &format(double number, UnicodeString &appendTo) const;
     96 //    virtual UnicodeString &format(int32_t number, UnicodeString &appendTo) const;
     97 //    virtual UnicodeString &format(int64_t number, UnicodeString &appendTo) const;
     98 
     99     virtual void parse(const UnicodeString& text, Formattable& result, ParsePosition& parsePosition) const;
    100 
    101     /**
    102      * Sets the maximum number of digits allowed in the fraction portion of a
    103      * number. maximumFractionDigits must be >= minimumFractionDigits.  If the
    104      * new value for maximumFractionDigits is less than the current value
    105      * of minimumFractionDigits, then minimumFractionDigits will also be set to
    106      * the new value.
    107      * @param newValue    the new value to be set.
    108      * @see getMaximumFractionDigits
    109      */
    110     virtual void setMaximumFractionDigits(int32_t newValue);
    111 
    112     /**
    113      * Sets the minimum number of digits allowed in the fraction portion of a
    114      * number. minimumFractionDigits must be <= maximumFractionDigits.   If the
    115      * new value for minimumFractionDigits exceeds the current value
    116      * of maximumFractionDigits, then maximumIntegerDigits will also be set to
    117      * the new value
    118      * @param newValue    the new value to be set.
    119      * @see getMinimumFractionDigits
    120      */
    121     virtual void setMinimumFractionDigits(int32_t newValue);
    122 
    123     /**
    124      * Return the class ID for this class. This is useful only for comparing to
    125      * a return value from getDynamicClassID(). For example:
    126      * <pre>
    127      * .   Base* polymorphic_pointer = createPolymorphicObject();
    128      * .   if (polymorphic_pointer->getDynamicClassID() ==
    129      * .       erived::getStaticClassID()) ...
    130      * </pre>
    131      * @return          The class ID for all objects of this class.
    132      */
    133     U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void);
    134 
    135     /**
    136      * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This
    137      * method is to implement a simple version of RTTI, since not all C++
    138      * compilers support genuine RTTI. Polymorphic operator==() and clone()
    139      * methods call this method.
    140      *
    141      * @return          The class ID for this object. All objects of a
    142      *                  given class have the same class ID.  Objects of
    143      *                  other classes have different class IDs.
    144      */
    145     virtual UClassID getDynamicClassID(void) const;
    146 
    147 private:
    148     UnicodeString &format(int32_t numDigits, UnicodeString &appendTo, const wchar_t *format, ...) const;
    149 
    150     UBool fCurrency;
    151     Locale fLocale;
    152     int32_t fLCID;
    153     FormatInfo *fFormatInfo;
    154     UBool fFractionDigitsSet;
    155 
    156 };
    157 
    158 U_NAMESPACE_END
    159 
    160 #endif /* #if !UCONFIG_NO_FORMATTING */
    161 
    162 #endif // U_PLATFORM_USES_ONLY_WIN32_API
    163 
    164 #endif // __WINNMFMT
    165