]>
git.saurik.com Git - apple/icu.git/blob - icuSources/i18n/nfrule.h
2 *******************************************************************************
3 * Copyright (C) 1997-2008, International Business Machines
4 * Corporation and others. All Rights Reserved.
5 *******************************************************************************
11 #include "unicode/rbnf.h"
15 #include "unicode/utypes.h"
16 #include "unicode/uobject.h"
17 #include "unicode/unistr.h"
28 class RuleBasedNumberFormat
;
31 class NFRule
: public UMemory
{
36 kNegativeNumberRule
= -1,
37 kImproperFractionRule
= -2,
38 kProperFractionRule
= -3,
43 static void makeRules(UnicodeString
& definition
,
44 const NFRuleSet
* ruleSet
,
45 const NFRule
* predecessor
,
46 const RuleBasedNumberFormat
* rbnf
,
50 NFRule(const RuleBasedNumberFormat
* rbnf
);
53 UBool
operator==(const NFRule
& rhs
) const;
54 UBool
operator!=(const NFRule
& rhs
) const { return !operator==(rhs
); }
56 ERuleType
getType() const { return (ERuleType
)(baseValue
<= kNoBase
? (ERuleType
)baseValue
: kOtherRule
); }
57 void setType(ERuleType ruleType
) { baseValue
= (int32_t)ruleType
; }
59 int64_t getBaseValue() const { return baseValue
; }
60 void setBaseValue(int64_t value
, UErrorCode
& status
);
62 double getDivisor() const { return uprv_pow(radix
, exponent
); }
64 void doFormat(int64_t number
, UnicodeString
& toAppendTo
, int32_t pos
) const;
65 void doFormat(double number
, UnicodeString
& toAppendTo
, int32_t pos
) const;
67 UBool
doParse(const UnicodeString
& text
,
71 Formattable
& result
) const;
73 UBool
shouldRollBack(double number
) const;
75 void _appendRuleText(UnicodeString
& result
) const;
78 void parseRuleDescriptor(UnicodeString
& descriptor
, UErrorCode
& status
);
79 void extractSubstitutions(const NFRuleSet
* ruleSet
, const NFRule
* predecessor
, const RuleBasedNumberFormat
* rbnf
, UErrorCode
& status
);
80 NFSubstitution
* extractSubstitution(const NFRuleSet
* ruleSet
, const NFRule
* predecessor
, const RuleBasedNumberFormat
* rbnf
, UErrorCode
& status
);
82 int16_t expectedExponent() const;
83 int32_t indexOfAny(const UChar
* const strings
[]) const;
84 double matchToDelimiter(const UnicodeString
& text
, int32_t startPos
, double baseValue
,
85 const UnicodeString
& delimiter
, ParsePosition
& pp
, const NFSubstitution
* sub
,
86 double upperBound
) const;
87 void stripPrefix(UnicodeString
& text
, const UnicodeString
& prefix
, ParsePosition
& pp
) const;
89 int32_t prefixLength(const UnicodeString
& str
, const UnicodeString
& prefix
, UErrorCode
& status
) const;
90 UBool
allIgnorable(const UnicodeString
& str
, UErrorCode
& status
) const;
91 int32_t findText(const UnicodeString
& str
, const UnicodeString
& key
,
92 int32_t startingAt
, int32_t* resultCount
) const;
98 UnicodeString ruleText
;
100 NFSubstitution
* sub2
;
101 const RuleBasedNumberFormat
* formatter
;
103 NFRule(const NFRule
&other
); // forbid copying of this class
104 NFRule
&operator=(const NFRule
&other
); // forbid copying of this class