2 ******************************************************************************
3 * Copyright (C) 1997-2012, International Business Machines
4 * Corporation and others. All Rights Reserved.
5 ******************************************************************************
8 * tab size: 8 (not used)
11 * Modification history
13 * 10/11/2001 Doug Ported from ICU4J
19 #include "unicode/uobject.h"
20 #include "unicode/rbnf.h"
24 #include "unicode/utypes.h"
25 #include "unicode/umisc.h"
31 class NFRuleSet
: public UMemory
{
33 NFRuleSet(UnicodeString
* descriptions
, int32_t index
, UErrorCode
& status
);
34 void parseRules(UnicodeString
& rules
, const RuleBasedNumberFormat
* owner
, UErrorCode
& status
);
35 void makeIntoFractionRuleSet() { fIsFractionRuleSet
= TRUE
; }
39 UBool
operator==(const NFRuleSet
& rhs
) const;
40 UBool
operator!=(const NFRuleSet
& rhs
) const { return !operator==(rhs
); }
42 UBool
isPublic() const { return fIsPublic
; }
44 UBool
isParseable() const { return fIsParseable
; }
46 UBool
isDecimalFormatRuleParseable() const {
47 UnicodeString numberingYear
= UNICODE_STRING_SIMPLE("spellout-numbering-year");
48 UnicodeString ordinal
= UNICODE_STRING_SIMPLE("spellout-ordinal");
50 return ( name
.indexOf(numberingYear
) == -1 && name
.indexOf(ordinal
) == -1 );
53 UBool
isFractionRuleSet() const { return fIsFractionRuleSet
; }
55 void getName(UnicodeString
& result
) const { result
.setTo(name
); }
56 UBool
isNamed(const UnicodeString
& _name
) const { return this->name
== _name
; }
58 void format(int64_t number
, UnicodeString
& toAppendTo
, int32_t pos
) const;
59 void format(double number
, UnicodeString
& toAppendTo
, int32_t pos
) const;
61 UBool
parse(const UnicodeString
& text
, ParsePosition
& pos
, double upperBound
, Formattable
& result
, UBool lenient
=FALSE
) const;
63 void appendRules(UnicodeString
& result
) const; // toString
66 NFRule
* findNormalRule(int64_t number
) const;
67 NFRule
* findDoubleRule(double number
) const;
68 NFRule
* findFractionRuleSetRule(double number
) const;
73 NFRule
*negativeNumberRule
;
74 NFRule
*fractionRules
[3];
75 UBool fIsFractionRuleSet
;
78 int32_t fRecursionCount
;
80 NFRuleSet(const NFRuleSet
&other
); // forbid copying of this class
81 NFRuleSet
&operator=(const NFRuleSet
&other
); // forbid copying of this class
84 // utilities from old llong.h
85 // convert mantissa portion of double to int64
86 int64_t util64_fromDouble(double d
);
88 // raise radix to the power exponent, only non-negative exponents
89 int64_t util64_pow(int32_t radix
, uint32_t exponent
);
91 // convert n to digit string in buffer, return length of string
92 uint32_t util64_tou(int64_t n
, UChar
* buffer
, uint32_t buflen
, uint32_t radix
= 10, UBool raw
= FALSE
);
95 int64_t util64_utoi(const UChar
* str
, uint32_t radix
= 10);
96 uint32_t util64_toa(int64_t n
, char* buffer
, uint32_t buflen
, uint32_t radix
= 10, UBool raw
= FALSE
);
97 int64_t util64_atoi(const char* str
, uint32_t radix
);