LCOV - code coverage report
Current view: top level - intl/icu/source/i18n - nfsubs.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 3 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 3 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // © 2016 and later: Unicode, Inc. and others.
       2             : // License & terms of use: http://www.unicode.org/copyright.html
       3             : /*
       4             : ******************************************************************************
       5             : *   Copyright (C) 1997-2015, International Business Machines
       6             : *   Corporation and others.  All Rights Reserved.
       7             : ******************************************************************************
       8             : *   file name:  nfsubs.h
       9             : *   encoding:   UTF-8
      10             : *   tab size:   8 (not used)
      11             : *   indentation:4
      12             : *
      13             : * Modification history
      14             : * Date        Name      Comments
      15             : * 10/11/2001  Doug      Ported from ICU4J
      16             : */
      17             : 
      18             : #ifndef NFSUBS_H
      19             : #define NFSUBS_H
      20             : 
      21             : #include "unicode/utypes.h"
      22             : #include "unicode/uobject.h"
      23             : #include "nfrule.h"
      24             : 
      25             : #if U_HAVE_RBNF
      26             : 
      27             : #include "unicode/utypes.h"
      28             : #include "unicode/decimfmt.h"
      29             : #include "nfrs.h"
      30             : #include <float.h>
      31             : 
      32             : U_NAMESPACE_BEGIN
      33             : 
      34             : class NFSubstitution : public UObject {
      35             :     int32_t pos;
      36             :     const NFRuleSet* ruleSet;
      37             :     DecimalFormat* numberFormat;
      38             :     
      39             : protected:
      40             :     NFSubstitution(int32_t pos,
      41             :         const NFRuleSet* ruleSet,
      42             :         const UnicodeString& description,
      43             :         UErrorCode& status);
      44             :     
      45             :     /**
      46             :      * Get the Ruleset of the object.
      47             :      * @return the Ruleset of the object.
      48             :      */
      49           0 :     const NFRuleSet* getRuleSet() const { return ruleSet; }
      50             : 
      51             :     /**
      52             :      * get the NumberFormat of this object.
      53             :      * @return the numberformat of this object.
      54             :      */
      55           0 :     const DecimalFormat* getNumberFormat() const { return numberFormat; }
      56             :     
      57             : public:
      58             :     static NFSubstitution* makeSubstitution(int32_t pos, 
      59             :         const NFRule* rule, 
      60             :         const NFRule* predecessor,
      61             :         const NFRuleSet* ruleSet, 
      62             :         const RuleBasedNumberFormat* rbnf, 
      63             :         const UnicodeString& description,
      64             :         UErrorCode& status);
      65             :     
      66             :     /**
      67             :      * Destructor.
      68             :      */
      69             :     virtual ~NFSubstitution();
      70             :     
      71             :     /**
      72             :      * Return true if the given Format objects are semantically equal.
      73             :      * Objects of different subclasses are considered unequal.
      74             :      * @param rhs    the object to be compared with.
      75             :      * @return       true if the given Format objects are semantically equal.
      76             :      */
      77             :     virtual UBool operator==(const NFSubstitution& rhs) const;
      78             : 
      79             :     /**
      80             :      * Return true if the given Format objects are semantically unequal.
      81             :      * Objects of different subclasses are considered unequal.
      82             :      * @param rhs    the object to be compared with.
      83             :      * @return       true if the given Format objects are semantically unequal.
      84             :      */
      85             :     UBool operator!=(const NFSubstitution& rhs) const { return !operator==(rhs); }
      86             :     
      87             :     /**
      88             :      * Sets the substitution's divisor.  Used by NFRule.setBaseValue().
      89             :      * A no-op for all substitutions except multiplier and modulus
      90             :      * substitutions.
      91             :      * @param radix The radix of the divisor
      92             :      * @param exponent The exponent of the divisor
      93             :      */
      94             :     virtual void setDivisor(int32_t radix, int16_t exponent, UErrorCode& status);
      95             :     
      96             :     /**
      97             :      * Replaces result with the string describing the substitution.
      98             :      * @param result    Output param which will receive the string.
      99             :      */
     100             :     virtual void toString(UnicodeString& result) const;
     101             :     
     102             :     void setDecimalFormatSymbols(const DecimalFormatSymbols &newSymbols, UErrorCode& status);
     103             : 
     104             :     //-----------------------------------------------------------------------
     105             :     // formatting
     106             :     //-----------------------------------------------------------------------
     107             :     
     108             :     /**
     109             :      * Performs a mathematical operation on the number, formats it using
     110             :      * either ruleSet or decimalFormat, and inserts the result into
     111             :      * toInsertInto.
     112             :      * @param number The number being formatted.
     113             :      * @param toInsertInto The string we insert the result into
     114             :      * @param pos The position in toInsertInto where the owning rule's
     115             :      * rule text begins (this value is added to this substitution's
     116             :      * position to determine exactly where to insert the new text)
     117             :      */
     118             :     virtual void doSubstitution(int64_t number, UnicodeString& toInsertInto, int32_t pos, int32_t recursionCount, UErrorCode& status) const;
     119             : 
     120             :     /**
     121             :      * Performs a mathematical operation on the number, formats it using
     122             :      * either ruleSet or decimalFormat, and inserts the result into
     123             :      * toInsertInto.
     124             :      * @param number The number being formatted.
     125             :      * @param toInsertInto The string we insert the result into
     126             :      * @param pos The position in toInsertInto where the owning rule's
     127             :      * rule text begins (this value is added to this substitution's
     128             :      * position to determine exactly where to insert the new text)
     129             :      */
     130             :     virtual void doSubstitution(double number, UnicodeString& toInsertInto, int32_t pos, int32_t recursionCount, UErrorCode& status) const;
     131             :     
     132             : protected:
     133             :     /**
     134             :      * Subclasses override this function to perform some kind of
     135             :      * mathematical operation on the number.  The result of this operation
     136             :      * is formatted using the rule set or DecimalFormat that this
     137             :      * substitution refers to, and the result is inserted into the result
     138             :      * string.
     139             :      * @param The number being formatted
     140             :      * @return The result of performing the opreration on the number
     141             :      */
     142             :     virtual int64_t transformNumber(int64_t number) const = 0;
     143             : 
     144             :     /**
     145             :      * Subclasses override this function to perform some kind of
     146             :      * mathematical operation on the number.  The result of this operation
     147             :      * is formatted using the rule set or DecimalFormat that this
     148             :      * substitution refers to, and the result is inserted into the result
     149             :      * string.
     150             :      * @param The number being formatted
     151             :      * @return The result of performing the opreration on the number
     152             :      */
     153             :     virtual double transformNumber(double number) const = 0;
     154             :     
     155             : public:
     156             :     //-----------------------------------------------------------------------
     157             :     // parsing
     158             :     //-----------------------------------------------------------------------
     159             :     
     160             :     /**
     161             :      * Parses a string using the rule set or DecimalFormat belonging
     162             :      * to this substitution.  If there's a match, a mathematical
     163             :      * operation (the inverse of the one used in formatting) is
     164             :      * performed on the result of the parse and the value passed in
     165             :      * and returned as the result.  The parse position is updated to
     166             :      * point to the first unmatched character in the string.
     167             :      * @param text The string to parse
     168             :      * @param parsePosition On entry, ignored, but assumed to be 0.
     169             :      * On exit, this is updated to point to the first unmatched
     170             :      * character (or 0 if the substitution didn't match)
     171             :      * @param baseValue A partial parse result that should be
     172             :      * combined with the result of this parse
     173             :      * @param upperBound When searching the rule set for a rule
     174             :      * matching the string passed in, only rules with base values
     175             :      * lower than this are considered
     176             :      * @param lenientParse If true and matching against rules fails,
     177             :      * the substitution will also try matching the text against
     178             :      * numerals using a default-costructed NumberFormat.  If false,
     179             :      * no extra work is done.  (This value is false whenever the
     180             :      * formatter isn't in lenient-parse mode, but is also false
     181             :      * under some conditions even when the formatter _is_ in
     182             :      * lenient-parse mode.)
     183             :      * @return If there's a match, this is the result of composing
     184             :      * baseValue with whatever was returned from matching the
     185             :      * characters.  This will be either a Long or a Double.  If there's
     186             :      * no match this is new Long(0) (not null), and parsePosition
     187             :      * is left unchanged.
     188             :      */
     189             :     virtual UBool doParse(const UnicodeString& text, 
     190             :         ParsePosition& parsePosition, 
     191             :         double baseValue,
     192             :         double upperBound, 
     193             :         UBool lenientParse,
     194             :         Formattable& result) const;
     195             :     
     196             :     /**
     197             :      * Derives a new value from the two values passed in.  The two values
     198             :      * are typically either the base values of two rules (the one containing
     199             :      * the substitution and the one matching the substitution) or partial
     200             :      * parse results derived in some other way.  The operation is generally
     201             :      * the inverse of the operation performed by transformNumber().
     202             :      * @param newRuleValue The value produced by matching this substitution
     203             :      * @param oldRuleValue The value that was passed to the substitution
     204             :      * by the rule that owns it
     205             :      * @return A third value derived from the other two, representing a
     206             :      * partial parse result
     207             :      */
     208             :     virtual double composeRuleValue(double newRuleValue, double oldRuleValue) const = 0;
     209             :     
     210             :     /**
     211             :      * Calculates an upper bound when searching for a rule that matches
     212             :      * this substitution.  Rules with base values greater than or equal
     213             :      * to upperBound are not considered.
     214             :      * @param oldUpperBound    The current upper-bound setting.  The new
     215             :      *                         upper bound can't be any higher.
     216             :      * @return                 the upper bound when searching for a rule that matches
     217             :      *                         this substitution.
     218             :      */
     219             :     virtual double calcUpperBound(double oldUpperBound) const = 0;
     220             :     
     221             :     //-----------------------------------------------------------------------
     222             :     // simple accessors
     223             :     //-----------------------------------------------------------------------
     224             :     
     225             :     /**
     226             :      * Returns the substitution's position in the rule that owns it.
     227             :      * @return The substitution's position in the rule that owns it.
     228             :      */
     229           0 :     int32_t getPos() const { return pos; }
     230             :     
     231             :     /**
     232             :      * Returns the character used in the textual representation of
     233             :      * substitutions of this type.  Used by toString().
     234             :      * @return This substitution's token character.
     235             :      */
     236             :     virtual UChar tokenChar() const = 0;
     237             :     
     238             :     /**
     239             :      * Returns true if this is a modulus substitution.  (We didn't do this
     240             :      * with instanceof partially because it causes source files to
     241             :      * proliferate and partially because we have to port this to C++.)
     242             :      * @return true if this object is an instance of ModulusSubstitution
     243             :      */
     244             :     virtual UBool isModulusSubstitution() const;
     245             :     
     246             : private:
     247             :     NFSubstitution(const NFSubstitution &other); // forbid copying of this class
     248             :     NFSubstitution &operator=(const NFSubstitution &other); // forbid copying of this class
     249             : 
     250             : public:
     251             :     static UClassID getStaticClassID(void);
     252             :     virtual UClassID getDynamicClassID(void) const;
     253             : };
     254             : 
     255             : U_NAMESPACE_END
     256             : 
     257             : /* U_HAVE_RBNF */
     258             : #endif
     259             : 
     260             : // NFSUBS_H
     261             : #endif

Generated by: LCOV version 1.13