2
*******************************************************************************
3
* Copyright (C) 1997-2001, International Business Machines Corporation and others. All Rights Reserved.
4
*******************************************************************************
10
#include "unicode/rbnf.h"
14
#include "unicode/utypes.h"
15
#include "unicode/unistr.h"
25
class RuleBasedNumberFormat;
33
kNegativeNumberRule = -1,
34
kImproperFractionRule = -2,
35
kProperFractionRule = -3,
40
static void makeRules(UnicodeString& definition,
41
const NFRuleSet* ruleSet,
42
const NFRule* predecessor,
43
const RuleBasedNumberFormat* rbnf,
47
NFRule(const RuleBasedNumberFormat* rbnf);
50
UBool operator==(const NFRule& rhs) const;
51
UBool operator!=(const NFRule& rhs) const { return !operator==(rhs); }
53
ERuleType getType() const { return (ERuleType)(baseValue <= kNoBase ? (ERuleType)baseValue : kOtherRule); }
54
void setType(ERuleType ruleType) { baseValue = (int32_t)ruleType; }
56
int64_t getBaseValue() const { return baseValue; }
57
void setBaseValue(int64_t value);
59
double getDivisor() const { return uprv_pow(radix, exponent); }
61
void doFormat(int64_t number, UnicodeString& toAppendTo, int32_t pos) const;
62
void doFormat(double number, UnicodeString& toAppendTo, int32_t pos) const;
64
UBool doParse(const UnicodeString& text,
68
Formattable& result) const;
70
UBool shouldRollBack(double number) const;
72
void appendRuleText(UnicodeString& result) const;
75
void parseRuleDescriptor(UnicodeString& descriptor, UErrorCode& status);
76
void extractSubstitutions(const NFRuleSet* ruleSet, const NFRule* predecessor, const RuleBasedNumberFormat* rbnf, UErrorCode& status);
77
NFSubstitution* extractSubstitution(const NFRuleSet* ruleSet, const NFRule* predecessor, const RuleBasedNumberFormat* rbnf, UErrorCode& status);
79
int16_t expectedExponent() const;
80
int32_t indexOfAny(const UChar* const strings[]) const;
81
double matchToDelimiter(const UnicodeString& text, int32_t startPos, double baseValue,
82
const UnicodeString& delimiter, ParsePosition& pp, const NFSubstitution* sub,
83
double upperBound) const;
84
void stripPrefix(UnicodeString& text, const UnicodeString& prefix, ParsePosition& pp) const;
86
int32_t prefixLength(const UnicodeString& str, const UnicodeString& prefix) const;
87
UBool allIgnorable(const UnicodeString& str) const;
88
int32_t findText(const UnicodeString& str, const UnicodeString& key,
89
int32_t startingAt, int32_t* resultCount) const;
95
UnicodeString ruleText;
98
const RuleBasedNumberFormat* formatter;