Index: icu46/source/i18n/nfrule.h |
=================================================================== |
--- icu46/source/i18n/nfrule.h (revision 0) |
+++ icu46/source/i18n/nfrule.h (revision 0) |
@@ -0,0 +1,114 @@ |
+/* |
+******************************************************************************* |
+* Copyright (C) 1997-2008, International Business Machines |
+* Corporation and others. All Rights Reserved. |
+******************************************************************************* |
+*/ |
+ |
+#ifndef NFRULE_H |
+#define NFRULE_H |
+ |
+#include "unicode/rbnf.h" |
+ |
+#if U_HAVE_RBNF |
+ |
+#include "unicode/utypes.h" |
+#include "unicode/uobject.h" |
+#include "unicode/unistr.h" |
+#include "putilimp.h" |
+ |
+U_NAMESPACE_BEGIN |
+ |
+class FieldPosition; |
+class Formattable; |
+class NFRuleList; |
+class NFRuleSet; |
+class NFSubstitution; |
+class ParsePosition; |
+class RuleBasedNumberFormat; |
+class UnicodeString; |
+ |
+class NFRule : public UMemory { |
+public: |
+ |
+ enum ERuleType { |
+ kNoBase = 0, |
+ kNegativeNumberRule = -1, |
+ kImproperFractionRule = -2, |
+ kProperFractionRule = -3, |
+ kMasterRule = -4, |
+ kOtherRule = -5 |
+ }; |
+ |
+ static void makeRules(UnicodeString& definition, |
+ const NFRuleSet* ruleSet, |
+ const NFRule* predecessor, |
+ const RuleBasedNumberFormat* rbnf, |
+ NFRuleList& ruleList, |
+ UErrorCode& status); |
+ |
+ NFRule(const RuleBasedNumberFormat* rbnf); |
+ ~NFRule(); |
+ |
+ UBool operator==(const NFRule& rhs) const; |
+ UBool operator!=(const NFRule& rhs) const { return !operator==(rhs); } |
+ |
+ ERuleType getType() const { return (ERuleType)(baseValue <= kNoBase ? (ERuleType)baseValue : kOtherRule); } |
+ void setType(ERuleType ruleType) { baseValue = (int32_t)ruleType; } |
+ |
+ int64_t getBaseValue() const { return baseValue; } |
+ void setBaseValue(int64_t value, UErrorCode& status); |
+ |
+ double getDivisor() const { return uprv_pow(radix, exponent); } |
+ |
+ void doFormat(int64_t number, UnicodeString& toAppendTo, int32_t pos) const; |
+ void doFormat(double number, UnicodeString& toAppendTo, int32_t pos) const; |
+ |
+ UBool doParse(const UnicodeString& text, |
+ ParsePosition& pos, |
+ UBool isFractional, |
+ double upperBound, |
+ Formattable& result) const; |
+ |
+ UBool shouldRollBack(double number) const; |
+ |
+ void _appendRuleText(UnicodeString& result) const; |
+ |
+private: |
+ void parseRuleDescriptor(UnicodeString& descriptor, UErrorCode& status); |
+ void extractSubstitutions(const NFRuleSet* ruleSet, const NFRule* predecessor, const RuleBasedNumberFormat* rbnf, UErrorCode& status); |
+ NFSubstitution* extractSubstitution(const NFRuleSet* ruleSet, const NFRule* predecessor, const RuleBasedNumberFormat* rbnf, UErrorCode& status); |
+ |
+ int16_t expectedExponent() const; |
+ int32_t indexOfAny(const UChar* const strings[]) const; |
+ double matchToDelimiter(const UnicodeString& text, int32_t startPos, double baseValue, |
+ const UnicodeString& delimiter, ParsePosition& pp, const NFSubstitution* sub, |
+ double upperBound) const; |
+ void stripPrefix(UnicodeString& text, const UnicodeString& prefix, ParsePosition& pp) const; |
+ |
+ int32_t prefixLength(const UnicodeString& str, const UnicodeString& prefix, UErrorCode& status) const; |
+ UBool allIgnorable(const UnicodeString& str, UErrorCode& status) const; |
+ int32_t findText(const UnicodeString& str, const UnicodeString& key, |
+ int32_t startingAt, int32_t* resultCount) const; |
+ |
+private: |
+ int64_t baseValue; |
+ int32_t radix; |
+ int16_t exponent; |
+ UnicodeString ruleText; |
+ NFSubstitution* sub1; |
+ NFSubstitution* sub2; |
+ const RuleBasedNumberFormat* formatter; |
+ |
+ NFRule(const NFRule &other); // forbid copying of this class |
+ NFRule &operator=(const NFRule &other); // forbid copying of this class |
+}; |
+ |
+U_NAMESPACE_END |
+ |
+/* U_HAVE_RBNF */ |
+#endif |
+ |
+// NFRULE_H |
+#endif |
+ |
Property changes on: icu46/source/i18n/nfrule.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |