2 ******************************************************************************
3 * Copyright (C) 1997-2009, 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 {
45 UnicodeString prefixpart
= UNICODE_STRING_SIMPLE("-prefixpart");
46 UnicodeString postfix
= UNICODE_STRING_SIMPLE("-postfix");
47 UnicodeString postfx
= UNICODE_STRING_SIMPLE("-postfx");
49 return ( name
.indexOf(prefixpart
) == -1 && name
.indexOf(postfix
) == -1 && name
.indexOf(postfx
) == -1 );
52 UBool
isDecimalFormatRuleParseable() const {
53 UnicodeString numberingYear
= UNICODE_STRING_SIMPLE("spellout-numbering-year");
54 UnicodeString ordinal
= UNICODE_STRING_SIMPLE("spellout-ordinal");
56 return ( name
.indexOf(numberingYear
) == -1 && name
.indexOf(ordinal
) == -1 );
59 UBool
isFractionRuleSet() const { return fIsFractionRuleSet
; }
61 void getName(UnicodeString
& result
) const { result
.setTo(name
); }
62 UBool
isNamed(const UnicodeString
& _name
) const { return this->name
== _name
; }
64 void format(int64_t number
, UnicodeString
& toAppendTo
, int32_t pos
) const;
65 void format(double number
, UnicodeString
& toAppendTo
, int32_t pos
) const;
67 UBool
parse(const UnicodeString
& text
, ParsePosition
& pos
, double upperBound
, Formattable
& result
, UBool lenient
=FALSE
) const;
69 void appendRules(UnicodeString
& result
) const; // toString
72 NFRule
* findNormalRule(int64_t number
) const;
73 NFRule
* findDoubleRule(double number
) const;
74 NFRule
* findFractionRuleSetRule(double number
) const;
79 NFRule
*negativeNumberRule
;
80 NFRule
*fractionRules
[3];
81 UBool fIsFractionRuleSet
;
83 int32_t fRecursionCount
;
85 NFRuleSet(const NFRuleSet
&other
); // forbid copying of this class
86 NFRuleSet
&operator=(const NFRuleSet
&other
); // forbid copying of this class
89 // utilities from old llong.h
90 // convert mantissa portion of double to int64
91 int64_t util64_fromDouble(double d
);
93 // raise radix to the power exponent, only non-negative exponents
94 int64_t util64_pow(int32_t radix
, uint32_t exponent
);
96 // convert n to digit string in buffer, return length of string
97 uint32_t util64_tou(int64_t n
, UChar
* buffer
, uint32_t buflen
, uint32_t radix
= 10, UBool raw
= FALSE
);
100 int64_t util64_utoi(const UChar
* str
, uint32_t radix
= 10);
101 uint32_t util64_toa(int64_t n
, char* buffer
, uint32_t buflen
, uint32_t radix
= 10, UBool raw
= FALSE
);
102 int64_t util64_atoi(const char* str
, uint32_t radix
);