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