]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/i18n/nfsubs.h
ICU-511.25.tar.gz
[apple/icu.git] / icuSources / i18n / nfsubs.h
index 14c60e78825aea1dc78d25d0a6261b5ec2c93a94..098ccb4134b37a2aa377f9ba7df768d561055b47 100644 (file)
@@ -1,6 +1,6 @@
 /*
 ******************************************************************************
-*   Copyright (C) 1997-2006, International Business Machines
+*   Copyright (C) 1997-2007, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 ******************************************************************************
 *   file name:  nfsubs.h
@@ -248,305 +248,22 @@ public:
      */
     virtual UBool isModulusSubstitution() const;
     
-private:
-    NFSubstitution(const NFSubstitution &other); // forbid copying of this class
-    NFSubstitution &operator=(const NFSubstitution &other); // forbid copying of this class
-
-    static const char fgClassID;
-
-public:
-    static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
-    virtual UClassID getDynamicClassID(void) const;
-};
-
-class SameValueSubstitution : public NFSubstitution {
-public:
-    SameValueSubstitution(int32_t pos,
-        const NFRuleSet* ruleset,
-        const RuleBasedNumberFormat* formatter,
-        const UnicodeString& description,
-        UErrorCode& status);
-    
-    virtual int64_t transformNumber(int64_t number) const { return number; }
-    virtual double transformNumber(double number) const { return number; }
-    virtual double composeRuleValue(double newRuleValue, double /*oldRuleValue*/) const { return newRuleValue; }
-    virtual double calcUpperBound(double oldUpperBound) const { return oldUpperBound; }
-    virtual UChar tokenChar() const { return (UChar)0x003d; } // '='
-private:
-    static const char fgClassID;
-    
-public:
-    static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
-    virtual UClassID getDynamicClassID(void) const;
-};
-
-class MultiplierSubstitution : public NFSubstitution {
-    double divisor;
-    int64_t ldivisor;
-    
-public:
-    MultiplierSubstitution(int32_t _pos,
-        double _divisor,
-        const NFRuleSet* _ruleSet,
-        const RuleBasedNumberFormat* formatter,
-        const UnicodeString& description,
-        UErrorCode& status)
-        : NFSubstitution(_pos, _ruleSet, formatter, description, status), divisor(_divisor)
-    {
-        ldivisor = util64_fromDouble(divisor);
-        if (divisor == 0) {
-            status = U_PARSE_ERROR;
-        }
-    }
-    
-    virtual void setDivisor(int32_t radix, int32_t exponent, UErrorCode& status) { 
-        divisor = uprv_pow(radix, exponent);
-        ldivisor = util64_fromDouble(divisor);
-
-        if(divisor == 0) {
-            status = U_PARSE_ERROR;
-        }
-    }
-    
-    virtual UBool operator==(const NFSubstitution& rhs) const;
-    
-    virtual int64_t transformNumber(int64_t number) const {
-        return number / ldivisor;
-    }
-    
-    virtual double transformNumber(double number) const {
-        return uprv_floor(number / divisor);
-    }
-    
-    virtual double composeRuleValue(double newRuleValue, double /*oldRuleValue*/) const {
-        return newRuleValue * divisor;
-    }
-    
-    virtual double calcUpperBound(double /*oldUpperBound*/) const { return divisor; }
-    
-    virtual UChar tokenChar() const { return (UChar)0x003c; } // '<'
-private:
-    static const char fgClassID;
-    
-public:
-    static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
-    virtual UClassID getDynamicClassID(void) const;
-};
-
-class ModulusSubstitution : public NFSubstitution {
-    double divisor;
-    int64_t  ldivisor;
-    const NFRule* ruleToUse;
-public:
-    ModulusSubstitution(int32_t pos,
-        double _divisor,
-        const NFRule* rulePredecessor,
-        const NFRuleSet* ruleSet,
-        const RuleBasedNumberFormat* formatter,
-        const UnicodeString& description,
-        UErrorCode& status);
-    
-    virtual void setDivisor(int32_t radix, int32_t exponent, UErrorCode& status) { 
-        divisor = uprv_pow(radix, exponent);
-        ldivisor = util64_fromDouble(divisor);
-
-        if (divisor == 0) {
-            status = U_PARSE_ERROR;
-        }
-    }
-    
-    virtual UBool operator==(const NFSubstitution& rhs) const;
-    
-    virtual void doSubstitution(int64_t number, UnicodeString& toInsertInto, int32_t pos) const;
-    virtual void doSubstitution(double number, UnicodeString& toInsertInto, int32_t pos) const;
-    
-    virtual int64_t transformNumber(int64_t number) const { return number % ldivisor; }
-    virtual double transformNumber(double number) const { return uprv_fmod(number, divisor); }
-    
-    virtual UBool doParse(const UnicodeString& text, 
-        ParsePosition& parsePosition,
-        double baseValue,
-        double upperBound,
-        UBool lenientParse,
-        Formattable& result) const;
-    
-    virtual double composeRuleValue(double newRuleValue, double oldRuleValue) const {
-        return oldRuleValue - uprv_fmod(oldRuleValue, divisor) + newRuleValue;
-    }
-    
-    virtual double calcUpperBound(double /*oldUpperBound*/) const { return divisor; }
-    
-    virtual UBool isModulusSubstitution() const { return TRUE; }
-    
-    virtual UChar tokenChar() const { return (UChar)0x003e; } // '>'
-private:
-    static const char fgClassID;
-    
-public:
-    static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
-    virtual UClassID getDynamicClassID(void) const;
-};
-
-class IntegralPartSubstitution : public NFSubstitution {
-public:
-    IntegralPartSubstitution(int32_t _pos,
-        const NFRuleSet* _ruleSet,
-        const RuleBasedNumberFormat* formatter,
-        const UnicodeString& description,
-        UErrorCode& status)
-        : NFSubstitution(_pos, _ruleSet, formatter, description, status) {}
-    
-    virtual int64_t transformNumber(int64_t number) const { return number; }
-    virtual double transformNumber(double number) const { return uprv_floor(number); }
-    virtual double composeRuleValue(double newRuleValue, double oldRuleValue) const { return newRuleValue + oldRuleValue; }
-    virtual double calcUpperBound(double /*oldUpperBound*/) const { return DBL_MAX; }
-    virtual UChar tokenChar() const { return (UChar)0x003c; } // '<'
-private:
-    static const char fgClassID;
-    
-public:
-    static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
-    virtual UClassID getDynamicClassID(void) const;
-};
-
-class FractionalPartSubstitution : public NFSubstitution {
-    UBool byDigits;
-    UBool useSpaces;
-    enum { kMaxDecimalDigits = 8 };
-public:
-    FractionalPartSubstitution(int32_t pos,
-        const NFRuleSet* ruleSet,
-        const RuleBasedNumberFormat* formatter,
-        const UnicodeString& description,
-        UErrorCode& status);
-    
-    virtual UBool operator==(const NFSubstitution& rhs) const;
-    
-    virtual void doSubstitution(double number, UnicodeString& toInsertInto, int32_t pos) const;
-    virtual void doSubstitution(int64_t /*number*/, UnicodeString& /*toInsertInto*/, int32_t /*_pos*/) const {}
-    virtual int64_t transformNumber(int64_t /*number*/) const { return 0; }
-    virtual double transformNumber(double number) const { return number - uprv_floor(number); }
-    
-    virtual UBool doParse(const UnicodeString& text,
-        ParsePosition& parsePosition,
-        double baseValue,
-        double upperBound,
-        UBool lenientParse,
-        Formattable& result) const;
-    
-    virtual double composeRuleValue(double newRuleValue, double oldRuleValue) const { return newRuleValue + oldRuleValue; }
-    virtual double calcUpperBound(double /*oldUpperBound*/) const { return 0.0; }
-    virtual UChar tokenChar() const { return (UChar)0x003e; } // '>'
-private:
-    static const char fgClassID;
-    
-public:
-    static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
-    virtual UClassID getDynamicClassID(void) const;
-};
-
-class AbsoluteValueSubstitution : public NFSubstitution {
-public:
-    AbsoluteValueSubstitution(int32_t _pos,
-        const NFRuleSet* _ruleSet,
-        const RuleBasedNumberFormat* formatter,
-        const UnicodeString& description,
-        UErrorCode& status)
-        : NFSubstitution(_pos, _ruleSet, formatter, description, status) {}
-    
-    virtual int64_t transformNumber(int64_t number) const { return number >= 0 ? number : -number; }
-    virtual double transformNumber(double number) const { return uprv_fabs(number); }
-    virtual double composeRuleValue(double newRuleValue, double /*oldRuleValue*/) const { return -newRuleValue; }
-    virtual double calcUpperBound(double /*oldUpperBound*/) const { return DBL_MAX; }
-    virtual UChar tokenChar() const { return (UChar)0x003e; } // '>'
-private:
-    static const char fgClassID;
-    
-public:
-    static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
-    virtual UClassID getDynamicClassID(void) const;
-};
+    /**
+     * @return true if this is a decimal format-only substitution
+     */
+    virtual UBool isDecimalFormatSubstitutionOnly() const;
 
-class NumeratorSubstitution : public NFSubstitution {
-    double denominator;
-    int64_t ldenominator;
-    UBool withZeros;
-public:
-    static inline UnicodeString fixdesc(const UnicodeString& desc) {
-      if (desc.endsWith(LTLT, 2)) {
-        UnicodeString result(desc, 0, desc.length()-1);
-        return result;
-      }
-      return desc;
-    }
-    NumeratorSubstitution(int32_t _pos,
-        double _denominator,
-        const NFRuleSet* _ruleSet,
-        const RuleBasedNumberFormat* formatter,
-        const UnicodeString& description,
-        UErrorCode& status)
-        : NFSubstitution(_pos, _ruleSet, formatter, fixdesc(description), status), denominator(_denominator) 
-    {
-        ldenominator = util64_fromDouble(denominator);
-        withZeros = description.endsWith(LTLT, 2);
-    }
-    
-    virtual UBool operator==(const NFSubstitution& rhs) const;
-    
-    virtual int64_t transformNumber(int64_t number) const { return number * ldenominator; }
-    virtual double transformNumber(double number) const { return uprv_round(number * denominator); }
+    /**
+     * @return true if this substitution only points to another ruleSet (no numberFormat)
+     */
+    virtual UBool isRuleSetSubstitutionOnly() const;
     
-    virtual void doSubstitution(int64_t /*number*/, UnicodeString& /*toInsertInto*/, int32_t /*_pos*/) const {}
-    virtual void doSubstitution(double number, UnicodeString& toInsertInto, int32_t pos) const;
-    virtual UBool doParse(const UnicodeString& text, 
-        ParsePosition& parsePosition,
-        double baseValue,
-        double upperBound,
-        UBool /*lenientParse*/,
-        Formattable& result) const;
-
-    virtual double composeRuleValue(double newRuleValue, double oldRuleValue) const { return newRuleValue / oldRuleValue; }
-    virtual double calcUpperBound(double /*oldUpperBound*/) const { return denominator; }
-    virtual UChar tokenChar() const { return (UChar)0x003c; } // '<'
 private:
-    static const char fgClassID;
-    static const UChar LTLT[2];
-
-public:
-    static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
-    virtual UClassID getDynamicClassID(void) const;
-};
+    NFSubstitution(const NFSubstitution &other); // forbid copying of this class
+    NFSubstitution &operator=(const NFSubstitution &other); // forbid copying of this class
 
-class NullSubstitution : public NFSubstitution {
-public:
-    NullSubstitution(int32_t _pos,
-        const NFRuleSet* _ruleSet,
-        const RuleBasedNumberFormat* formatter,
-        const UnicodeString& description,
-        UErrorCode& status)
-        : NFSubstitution(_pos, _ruleSet, formatter, description, status) {}
-    
-    virtual void toString(UnicodeString& /*result*/) const {}
-    virtual void doSubstitution(double /*number*/, UnicodeString& /*toInsertInto*/, int32_t /*_pos*/) const {}
-    virtual void doSubstitution(int64_t /*number*/, UnicodeString& /*toInsertInto*/, int32_t /*_pos*/) const {}
-    virtual int64_t transformNumber(int64_t /*number*/) const { return 0; }
-    virtual double transformNumber(double /*number*/) const { return 0; }
-    virtual UBool doParse(const UnicodeString& /*text*/,
-                ParsePosition& /*parsePosition*/, 
-                double baseValue,
-                double /*upperBound*/,
-                UBool /*lenientParse*/,
-                Formattable& result) const
-            { result.setDouble(baseValue); return TRUE; }
-    virtual double composeRuleValue(double /*newRuleValue*/, double /*oldRuleValue*/) const { return 0.0; } // never called
-    virtual double calcUpperBound(double /*oldUpperBound*/) const { return 0; } // never called
-    virtual UBool isNullSubstitution() const { return TRUE; }
-    virtual UChar tokenChar() const { return (UChar)0x0020; } // ' ' never called
-private:
-    static const char fgClassID;
-    
 public:
-    static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
+    static UClassID getStaticClassID(void);
     virtual UClassID getDynamicClassID(void) const;
 };