| Index: icu46/source/i18n/nfsubs.h
|
| ===================================================================
|
| --- icu46/source/i18n/nfsubs.h (revision 0)
|
| +++ icu46/source/i18n/nfsubs.h (revision 0)
|
| @@ -0,0 +1,266 @@
|
| +/*
|
| +******************************************************************************
|
| +* Copyright (C) 1997-2007, International Business Machines
|
| +* Corporation and others. All Rights Reserved.
|
| +******************************************************************************
|
| +* file name: nfsubs.h
|
| +* encoding: US-ASCII
|
| +* tab size: 8 (not used)
|
| +* indentation:4
|
| +*
|
| +* Modification history
|
| +* Date Name Comments
|
| +* 10/11/2001 Doug Ported from ICU4J
|
| +*/
|
| +
|
| +#ifndef NFSUBS_H
|
| +#define NFSUBS_H
|
| +
|
| +#include "unicode/utypes.h"
|
| +#include "unicode/uobject.h"
|
| +#include "nfrule.h"
|
| +
|
| +#if U_HAVE_RBNF
|
| +
|
| +#include "unicode/utypes.h"
|
| +#include "unicode/decimfmt.h"
|
| +#include "nfrs.h"
|
| +#include <float.h>
|
| +
|
| +U_NAMESPACE_BEGIN
|
| +
|
| +class NFSubstitution : public UObject {
|
| + int32_t pos;
|
| + const NFRuleSet* ruleSet;
|
| + const DecimalFormat* numberFormat;
|
| +
|
| +protected:
|
| + NFSubstitution(int32_t pos,
|
| + const NFRuleSet* ruleSet,
|
| + const RuleBasedNumberFormat* rbnf,
|
| + const UnicodeString& description,
|
| + UErrorCode& status);
|
| +
|
| + /**
|
| + * Get the Ruleset of the object.
|
| + * @return the Ruleset of the object.
|
| + */
|
| + const NFRuleSet* getRuleSet() const { return ruleSet; }
|
| +
|
| + /**
|
| + * get the NumberFormat of this object.
|
| + * @return the numberformat of this object.
|
| + */
|
| + const DecimalFormat* getNumberFormat() const { return numberFormat; }
|
| +
|
| +public:
|
| + static NFSubstitution* makeSubstitution(int32_t pos,
|
| + const NFRule* rule,
|
| + const NFRule* predecessor,
|
| + const NFRuleSet* ruleSet,
|
| + const RuleBasedNumberFormat* rbnf,
|
| + const UnicodeString& description,
|
| + UErrorCode& status);
|
| +
|
| + /**
|
| + * Destructor.
|
| + */
|
| + virtual ~NFSubstitution();
|
| +
|
| + /**
|
| + * Return true if the given Format objects are semantically equal.
|
| + * Objects of different subclasses are considered unequal.
|
| + * @param rhs the object to be compared with.
|
| + * @return true if the given Format objects are semantically equal.
|
| + */
|
| + virtual UBool operator==(const NFSubstitution& rhs) const;
|
| +
|
| + /**
|
| + * Return true if the given Format objects are semantically unequal.
|
| + * Objects of different subclasses are considered unequal.
|
| + * @param rhs the object to be compared with.
|
| + * @return true if the given Format objects are semantically unequal.
|
| + */
|
| + UBool operator!=(const NFSubstitution& rhs) const { return !operator==(rhs); }
|
| +
|
| + /**
|
| + * Sets the substitution's divisor. Used by NFRule.setBaseValue().
|
| + * A no-op for all substitutions except multiplier and modulus
|
| + * substitutions.
|
| + * @param radix The radix of the divisor
|
| + * @param exponent The exponent of the divisor
|
| + */
|
| + virtual void setDivisor(int32_t radix, int32_t exponent, UErrorCode& status);
|
| +
|
| + /**
|
| + * Replaces result with the string describing the substitution.
|
| + * @param result Output param which will receive the string.
|
| + */
|
| + virtual void toString(UnicodeString& result) const;
|
| +
|
| + //-----------------------------------------------------------------------
|
| + // formatting
|
| + //-----------------------------------------------------------------------
|
| +
|
| + /**
|
| + * Performs a mathematical operation on the number, formats it using
|
| + * either ruleSet or decimalFormat, and inserts the result into
|
| + * toInsertInto.
|
| + * @param number The number being formatted.
|
| + * @param toInsertInto The string we insert the result into
|
| + * @param pos The position in toInsertInto where the owning rule's
|
| + * rule text begins (this value is added to this substitution's
|
| + * position to determine exactly where to insert the new text)
|
| + */
|
| + virtual void doSubstitution(int64_t number, UnicodeString& toInsertInto, int32_t pos) const;
|
| +
|
| + /**
|
| + * Performs a mathematical operation on the number, formats it using
|
| + * either ruleSet or decimalFormat, and inserts the result into
|
| + * toInsertInto.
|
| + * @param number The number being formatted.
|
| + * @param toInsertInto The string we insert the result into
|
| + * @param pos The position in toInsertInto where the owning rule's
|
| + * rule text begins (this value is added to this substitution's
|
| + * position to determine exactly where to insert the new text)
|
| + */
|
| + virtual void doSubstitution(double number, UnicodeString& toInsertInto, int32_t pos) const;
|
| +
|
| +protected:
|
| + /**
|
| + * Subclasses override this function to perform some kind of
|
| + * mathematical operation on the number. The result of this operation
|
| + * is formatted using the rule set or DecimalFormat that this
|
| + * substitution refers to, and the result is inserted into the result
|
| + * string.
|
| + * @param The number being formatted
|
| + * @return The result of performing the opreration on the number
|
| + */
|
| + virtual int64_t transformNumber(int64_t number) const = 0;
|
| +
|
| + /**
|
| + * Subclasses override this function to perform some kind of
|
| + * mathematical operation on the number. The result of this operation
|
| + * is formatted using the rule set or DecimalFormat that this
|
| + * substitution refers to, and the result is inserted into the result
|
| + * string.
|
| + * @param The number being formatted
|
| + * @return The result of performing the opreration on the number
|
| + */
|
| + virtual double transformNumber(double number) const = 0;
|
| +
|
| +public:
|
| + //-----------------------------------------------------------------------
|
| + // parsing
|
| + //-----------------------------------------------------------------------
|
| +
|
| + /**
|
| + * Parses a string using the rule set or DecimalFormat belonging
|
| + * to this substitution. If there's a match, a mathematical
|
| + * operation (the inverse of the one used in formatting) is
|
| + * performed on the result of the parse and the value passed in
|
| + * and returned as the result. The parse position is updated to
|
| + * point to the first unmatched character in the string.
|
| + * @param text The string to parse
|
| + * @param parsePosition On entry, ignored, but assumed to be 0.
|
| + * On exit, this is updated to point to the first unmatched
|
| + * character (or 0 if the substitution didn't match)
|
| + * @param baseValue A partial parse result that should be
|
| + * combined with the result of this parse
|
| + * @param upperBound When searching the rule set for a rule
|
| + * matching the string passed in, only rules with base values
|
| + * lower than this are considered
|
| + * @param lenientParse If true and matching against rules fails,
|
| + * the substitution will also try matching the text against
|
| + * numerals using a default-costructed NumberFormat. If false,
|
| + * no extra work is done. (This value is false whenever the
|
| + * formatter isn't in lenient-parse mode, but is also false
|
| + * under some conditions even when the formatter _is_ in
|
| + * lenient-parse mode.)
|
| + * @return If there's a match, this is the result of composing
|
| + * baseValue with whatever was returned from matching the
|
| + * characters. This will be either a Long or a Double. If there's
|
| + * no match this is new Long(0) (not null), and parsePosition
|
| + * is left unchanged.
|
| + */
|
| + virtual UBool doParse(const UnicodeString& text,
|
| + ParsePosition& parsePosition,
|
| + double baseValue,
|
| + double upperBound,
|
| + UBool lenientParse,
|
| + Formattable& result) const;
|
| +
|
| + /**
|
| + * Derives a new value from the two values passed in. The two values
|
| + * are typically either the base values of two rules (the one containing
|
| + * the substitution and the one matching the substitution) or partial
|
| + * parse results derived in some other way. The operation is generally
|
| + * the inverse of the operation performed by transformNumber().
|
| + * @param newRuleValue The value produced by matching this substitution
|
| + * @param oldRuleValue The value that was passed to the substitution
|
| + * by the rule that owns it
|
| + * @return A third value derived from the other two, representing a
|
| + * partial parse result
|
| + */
|
| + virtual double composeRuleValue(double newRuleValue, double oldRuleValue) const = 0;
|
| +
|
| + /**
|
| + * Calculates an upper bound when searching for a rule that matches
|
| + * this substitution. Rules with base values greater than or equal
|
| + * to upperBound are not considered.
|
| + * @param oldUpperBound The current upper-bound setting. The new
|
| + * upper bound can't be any higher.
|
| + * @return the upper bound when searching for a rule that matches
|
| + * this substitution.
|
| + */
|
| + virtual double calcUpperBound(double oldUpperBound) const = 0;
|
| +
|
| + //-----------------------------------------------------------------------
|
| + // simple accessors
|
| + //-----------------------------------------------------------------------
|
| +
|
| + /**
|
| + * Returns the substitution's position in the rule that owns it.
|
| + * @return The substitution's position in the rule that owns it.
|
| + */
|
| + int32_t getPos() const { return pos; }
|
| +
|
| + /**
|
| + * Returns the character used in the textual representation of
|
| + * substitutions of this type. Used by toString().
|
| + * @return This substitution's token character.
|
| + */
|
| + virtual UChar tokenChar() const = 0;
|
| +
|
| + /**
|
| + * Returns true if this is a null substitution. (We didn't do this
|
| + * with instanceof partially because it causes source files to
|
| + * proliferate and partially because we have to port this to C++.)
|
| + * @return true if this object is an instance of NullSubstitution
|
| + */
|
| + virtual UBool isNullSubstitution() const;
|
| +
|
| + /**
|
| + * Returns true if this is a modulus substitution. (We didn't do this
|
| + * with instanceof partially because it causes source files to
|
| + * proliferate and partially because we have to port this to C++.)
|
| + * @return true if this object is an instance of ModulusSubstitution
|
| + */
|
| + virtual UBool isModulusSubstitution() const;
|
| +
|
| +private:
|
| + NFSubstitution(const NFSubstitution &other); // forbid copying of this class
|
| + NFSubstitution &operator=(const NFSubstitution &other); // forbid copying of this class
|
| +
|
| +public:
|
| + static UClassID getStaticClassID(void);
|
| + virtual UClassID getDynamicClassID(void) const;
|
| +};
|
| +
|
| +U_NAMESPACE_END
|
| +
|
| +/* U_HAVE_RBNF */
|
| +#endif
|
| +
|
| +// NFSUBS_H
|
| +#endif
|
|
|
| Property changes on: icu46/source/i18n/nfsubs.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|