#include <choicfmt.h>
Class diagram for ChoiceFormat:
Public Members | |||
![]() | ![]() | ChoiceFormat (const UnicodeString& newPattern, UErrorCode& status) | |
![]() | ![]() | Construct a new ChoiceFormat with the limits and the corresponding formats based on the pattern. More... | |
![]() | ![]() | ChoiceFormat (const double* limits, const UnicodeString* formats, int32_t count ) | |
![]() | ![]() | Construct a new ChoiceFormat with the given limits and formats. More... | |
![]() | ![]() | ChoiceFormat (const ChoiceFormat&) | |
![]() | ![]() | Copy constructor. More... | |
![]() | ![]() | const ChoiceFormat& | operator= (const ChoiceFormat&) |
![]() | ![]() | Assignment operator. More... | |
![]() | ![]() | virtual | ~ChoiceFormat () |
![]() | ![]() | Destructor. More... | |
![]() | ![]() | virtual Format* | clone (void) const |
![]() | ![]() | Clone this Format object polymorphically. More... | |
![]() | ![]() | virtual bool_t | operator== (const Format& other) const |
![]() | ![]() | Return true if the given Format objects are semantically equal. More... | |
![]() | ![]() | virtual void | applyPattern (const UnicodeString& pattern, UErrorCode& status) |
![]() | ![]() | Sets the pattern. More... | |
![]() | ![]() | virtual UnicodeString& | toPattern (UnicodeString &pattern) const |
![]() | ![]() | Gets the pattern. More... | |
![]() | ![]() | virtual void | adoptChoices (double* limitsToAdopt, UnicodeString* formatsToAdopt, int32_t count ) |
![]() | ![]() | Set the choices to be used in formatting. More... | |
![]() | ![]() | virtual void | setChoices (const double* limitsToCopy, const UnicodeString* formatsToCopy, int32_t count ) |
![]() | ![]() | Set the choices to be used in formatting. More... | |
![]() | ![]() | virtual const double* | getLimits (int32_t& count) const |
![]() | ![]() | Get the limits passed in the constructor. More... | |
![]() | ![]() | virtual const UnicodeString* | getFormats (int32_t& count) const |
![]() | ![]() | Get the formats passed in the constructor. More... | |
![]() | ![]() | virtual UnicodeString& | format (double number, UnicodeString& toAppendTo, FieldPosition& pos) const |
![]() | ![]() | Format a double or long number using this object's choices. More... | |
![]() | ![]() | virtual UnicodeString& | format (int32_t number, UnicodeString& toAppendTo, FieldPosition& pos) const |
![]() | ![]() | Format a int_32t number using this object's choices. More... | |
![]() | ![]() | virtual UnicodeString& | format (const Formattable* objs, int32_t cnt, UnicodeString& toAppendTo, FieldPosition& pos, UErrorCode& success) const |
![]() | ![]() | Format an array of objects using this object's choices. More... | |
![]() | ![]() | virtual UnicodeString& | format (const Formattable& obj, UnicodeString& toAppendTo, FieldPosition& pos, UErrorCode& status) const |
![]() | ![]() | Format an object using this object's choices. More... | |
![]() | ![]() | UnicodeString& | format (const Formattable& obj, UnicodeString& result, UErrorCode& status) const |
![]() | ![]() | Redeclared NumberFormat method. More... | |
![]() | ![]() | UnicodeString& | format ( double number, UnicodeString& output) const |
![]() | ![]() | Redeclared NumberFormat method. More... | |
![]() | ![]() | UnicodeString& | format ( int32_t number, UnicodeString& output) const |
![]() | ![]() | Redeclared NumberFormat method. More... | |
![]() | ![]() | virtual void | parse (const UnicodeString& text, Formattable& result, ParsePosition& parsePosition) const |
![]() | ![]() | Return a long if possible (e.g. More... | |
![]() | ![]() | virtual void | parse (const UnicodeString& text, Formattable& result, UErrorCode& status) const |
![]() | ![]() | Parse a string as a numeric value, and return a Formattable numeric object. More... | |
![]() | ![]() | virtual UClassID | getDynamicClassID (void) const |
![]() | ![]() | Returns a unique class ID POLYMORPHICALLY. More... | |
Static Public Members | |||
![]() | ![]() | UClassID | getStaticClassID (void) |
![]() | ![]() | Return the class ID for this class. More... | |
![]() | ![]() | double | nextDouble (double d, bool_t positive) |
![]() | ![]() | double | nextDouble (double d ) |
![]() | ![]() | Finds the least double greater than d. More... | |
![]() | ![]() | double | previousDouble (double d ) |
![]() | ![]() | Finds the greatest double less than d. More... |
It is generally used in a MessageFormat for doing things like plurals. The choice is specified with an ascending list of doubles, where each item specifies a half-open interval up to the next item:
. X matches j if and only if limit[j] <= X < limit[j+1]
. {1,2,3,4,5,6,7}, . {"Sun","Mon","Tue","Wed","Thur","Fri","Sat"} . {0, 1, ChoiceFormat::nextDouble(1)}, . {"no files", "one file", "many files"}
Here is a simple example that shows formatting and parsing:
. void SimpleChoiceExample( void ) . { . double limits[] = {1,2,3,4,5,6,7}; . UnicodeString monthNames[] = {"Sun","Mon","Tue","Wed","Thur","Fri","Sat"}; . ChoiceFormat* form = new ChoiceFormat(limits, monthNames, 7 ); . ParsePosition* status = new ParsePosition(0); . UnicodeString str; . FieldPosition f1(0), f2(0); . for (double i = 0.0; i <= 8.0; ++i) { . status->setIndex(0); . Formattable parseResult; . str.remove(); . cout << i << " -> " << form->format(i,str, f1) . << " -> " << parseResult << endl; . } . delete form; . delete status; . cout << endl; . }
. void ComplexChoiceExample( void ) . { . double filelimits[] = {0,1,2}; . UnicodeString filepart[] = {"are no files","is one file","are {2} files"}; . ChoiceFormat* fileform = new ChoiceFormat(filelimits, filepart, 3 ); . UErrorCode success = U_ZERO_ERROR; . const Format* testFormats[] = { fileform, NULL, NumberFormat::createInstance(success) }; . MessageFormat* pattform = new MessageFormat("There {0} on {1}", success ); . pattform->setFormats( testFormats, 3 ); . Formattable testArgs[] = {0L, "Disk_A", 0L}; . FieldPosition fp(0); . UnicodeString str; . for (int32_t i = 0; i < 4; ++i) { . Formattable fInt(i); . testArgs[0] = fInt; . testArgs[2] = testArgs[0]; . str.remove(); . pattform->format(testArgs, 3, str, fp, success ); . cout << "Output for i=" << i << " : " << str << endl; . } . delete pattform; . cout << endl; . }
You can either do this programmatically, as in the above example, or by using a pattern (see ChoiceFormat for more information) as in:
. "0#are no files|1#is one file|1<are many files"
. <number> "#" Specifies a limit value. . <number> "<" Specifies a limit of nextDouble(<number>). . <number> ">" Specifies a limit of previousDouble(<number>).
ChoiceFormat::ChoiceFormat (const UnicodeString & newPattern, UErrorCode & status) |
Construct a new ChoiceFormat with the limits and the corresponding formats based on the pattern.
pattern | Pattern used to construct object. |
status | Output param to receive success code. If the pattern cannot be parsed, set to failure code. |
ChoiceFormat::ChoiceFormat (const double * limits, const UnicodeString * formats, int32_t count) |
Construct a new ChoiceFormat with the given limits and formats.
Copy the limits and formats instead of adopting them.
limits | Array of limit values. |
formats | Array of formats. |
count | Size of 'limits' and 'formats' arrays. |
ChoiceFormat::ChoiceFormat (const ChoiceFormat &) |
Copy constructor.
const ChoiceFormat & ChoiceFormat::operator= (const ChoiceFormat &) |
Assignment operator.
virtual ChoiceFormat::~ChoiceFormat () [virtual]
|
Destructor.
virtual Format * ChoiceFormat::clone (void) const [virtual]
|
Clone this Format object polymorphically.
The caller owns the result and should delete it when done.
Reimplemented from Format.
virtual bool_t ChoiceFormat::operator== (const Format & other) const [virtual]
|
Return true if the given Format objects are semantically equal.
Objects of different subclasses are considered unequal.
Reimplemented from Format.
virtual void ChoiceFormat::applyPattern (const UnicodeString & pattern, UErrorCode & status) [virtual]
|
Sets the pattern.
pattern | The pattern to be applied. |
status | Output param set to success/failure code on exit. If the pattern is invalid, this will be set to a failure result. |
virtual UnicodeString & ChoiceFormat::toPattern (UnicodeString & pattern) const [virtual]
|
Gets the pattern.
virtual void ChoiceFormat::adoptChoices (double * limitsToAdopt, UnicodeString * formatsToAdopt, int32_t count) [virtual]
|
Set the choices to be used in formatting.
The arrays are adopted and should not be deleted by the caller.
limitsToAdopt | Contains the top value that you want parsed with that format,and should be in ascending sorted order. When formatting X, the choice will be the i, where limit[i] <= X < limit[i+1]. |
formatsToAdopt | The format strings you want to use for each limit. |
count | The size of the above arrays. |
virtual void ChoiceFormat::setChoices (const double * limitsToCopy, const UnicodeString * formatsToCopy, int32_t count) [virtual]
|
Set the choices to be used in formatting.
limitsToCopy | Contains the top value that you want parsed with that format,and should be in ascending sorted order. When formatting X, the choice will be the i, where limit[i] <= X < limit[i+1]. |
formatsToCopy | The format strings you want to use for each limit. |
count | The size of the above arrays. |
virtual const double * ChoiceFormat::getLimits (int32_t & count) const [virtual]
|
Get the limits passed in the constructor.
virtual const UnicodeString * ChoiceFormat::getFormats (int32_t & count) const [virtual]
|
Get the formats passed in the constructor.
virtual UnicodeString & ChoiceFormat::format (double number, UnicodeString & toAppendTo, FieldPosition & pos) const [virtual]
|
Format a double or long number using this object's choices.
number | The value to be formatted. |
toAppendTo | The string to append the formatted string to. This is an output parameter. |
pos | On input: an alignment field, if desired. On output: the offsets of the alignment field. |
Reimplemented from NumberFormat.
virtual UnicodeString & ChoiceFormat::format (int32_t number, UnicodeString & toAppendTo, FieldPosition & pos) const [virtual]
|
virtual UnicodeString & ChoiceFormat::format (const Formattable * objs, int32_t cnt, UnicodeString & toAppendTo, FieldPosition & pos, UErrorCode & success) const [virtual]
|
virtual UnicodeString & ChoiceFormat::format (const Formattable & obj, UnicodeString & toAppendTo, FieldPosition & pos, UErrorCode & status) const [virtual]
|
UnicodeString & ChoiceFormat::format (const Formattable & obj, UnicodeString & result, UErrorCode & status) const [inline]
|
UnicodeString & ChoiceFormat::format (double number, UnicodeString & output) const [inline]
|
UnicodeString & ChoiceFormat::format (int32_t number, UnicodeString & output) const [inline]
|
virtual void ChoiceFormat::parse (const UnicodeString & text, Formattable & result, ParsePosition & parsePosition) const [virtual]
|
Return a long if possible (e.g.
within range LONG_MAX, LONG_MAX], and with no decimals), otherwise a double. If IntegerOnly is set, will stop at a decimal point (or equivalent; e.g. for rational numbers "1 2/3", will stop after the 1).
If no object can be parsed, parsePosition is unchanged, and NULL is returned.
text | The text to be parsed. |
result | Formattable to be set to the parse result. If parse fails, return contents are undefined. |
parsePosition | The position to start parsing at on input. On output, moved to after the last successfully parse character. On parse failure, does not change. |
Reimplemented from NumberFormat.
virtual void ChoiceFormat::parse (const UnicodeString & text, Formattable & result, UErrorCode & status) const [virtual]
|
Parse a string as a numeric value, and return a Formattable numeric object.
This method parses integers only if IntegerOnly is set.
text | The text to be parsed. |
result | Formattable to be set to the parse result. If parse fails, return contents are undefined. |
status | Success or failure output parameter. |
Reimplemented from NumberFormat.
UClassID ChoiceFormat::getDynamicClassID (void) const [inline, virtual]
|
Returns a unique class ID POLYMORPHICALLY.
Pure virtual override. This method is to implement a simple version of RTTI, since not all C++ compilers support genuine RTTI. Polymorphic operator==() and clone() methods call this method.
Reimplemented from Format.
UClassID ChoiceFormat::getStaticClassID (void) [inline, static]
|
Return the class ID for this class.
This is useful only for comparing to a return value from getDynamicClassID(). For example:
. Base* polymorphic_pointer = createPolymorphicObject(); . if (polymorphic_pointer->getDynamicClassID() == . Derived::getStaticClassID()) ...
Reimplemented from NumberFormat.
double ChoiceFormat::nextDouble (double d, bool_t positive) [static]
|
double ChoiceFormat::nextDouble (double d) [inline, static]
|
Finds the least double greater than d.
If NaN, returns same value. Used to make half-open intervals.
double ChoiceFormat::previousDouble (double d) [inline, static]
|
Finds the greatest double less than d.
If NaN, returns same value.