1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others. 2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html 3*0e209d39SAndroid Build Coastguard Worker /* 4*0e209d39SAndroid Build Coastguard Worker ****************************************************************************** 5*0e209d39SAndroid Build Coastguard Worker * Copyright (C) 1997-2015, International Business Machines 6*0e209d39SAndroid Build Coastguard Worker * Corporation and others. All Rights Reserved. 7*0e209d39SAndroid Build Coastguard Worker ****************************************************************************** 8*0e209d39SAndroid Build Coastguard Worker * file name: nfrs.h 9*0e209d39SAndroid Build Coastguard Worker * encoding: UTF-8 10*0e209d39SAndroid Build Coastguard Worker * tab size: 8 (not used) 11*0e209d39SAndroid Build Coastguard Worker * indentation:4 12*0e209d39SAndroid Build Coastguard Worker * 13*0e209d39SAndroid Build Coastguard Worker * Modification history 14*0e209d39SAndroid Build Coastguard Worker * Date Name Comments 15*0e209d39SAndroid Build Coastguard Worker * 10/11/2001 Doug Ported from ICU4J 16*0e209d39SAndroid Build Coastguard Worker */ 17*0e209d39SAndroid Build Coastguard Worker 18*0e209d39SAndroid Build Coastguard Worker #ifndef NFRS_H 19*0e209d39SAndroid Build Coastguard Worker #define NFRS_H 20*0e209d39SAndroid Build Coastguard Worker 21*0e209d39SAndroid Build Coastguard Worker #include "unicode/uobject.h" 22*0e209d39SAndroid Build Coastguard Worker #include "unicode/rbnf.h" 23*0e209d39SAndroid Build Coastguard Worker 24*0e209d39SAndroid Build Coastguard Worker #if U_HAVE_RBNF 25*0e209d39SAndroid Build Coastguard Worker 26*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h" 27*0e209d39SAndroid Build Coastguard Worker #include "unicode/umisc.h" 28*0e209d39SAndroid Build Coastguard Worker 29*0e209d39SAndroid Build Coastguard Worker #include "nfrlist.h" 30*0e209d39SAndroid Build Coastguard Worker 31*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN 32*0e209d39SAndroid Build Coastguard Worker 33*0e209d39SAndroid Build Coastguard Worker class NFRuleSet : public UMemory { 34*0e209d39SAndroid Build Coastguard Worker public: 35*0e209d39SAndroid Build Coastguard Worker NFRuleSet(RuleBasedNumberFormat *owner, UnicodeString* descriptions, int32_t index, UErrorCode& status); 36*0e209d39SAndroid Build Coastguard Worker void parseRules(UnicodeString& rules, UErrorCode& status); 37*0e209d39SAndroid Build Coastguard Worker void setNonNumericalRule(NFRule *rule); 38*0e209d39SAndroid Build Coastguard Worker void setBestFractionRule(int32_t originalIndex, NFRule *newRule, UBool rememberRule); makeIntoFractionRuleSet()39*0e209d39SAndroid Build Coastguard Worker void makeIntoFractionRuleSet() { fIsFractionRuleSet = true; } 40*0e209d39SAndroid Build Coastguard Worker 41*0e209d39SAndroid Build Coastguard Worker ~NFRuleSet(); 42*0e209d39SAndroid Build Coastguard Worker 43*0e209d39SAndroid Build Coastguard Worker bool operator==(const NFRuleSet& rhs) const; 44*0e209d39SAndroid Build Coastguard Worker bool operator!=(const NFRuleSet& rhs) const { return !operator==(rhs); } 45*0e209d39SAndroid Build Coastguard Worker isPublic()46*0e209d39SAndroid Build Coastguard Worker UBool isPublic() const { return fIsPublic; } 47*0e209d39SAndroid Build Coastguard Worker isParseable()48*0e209d39SAndroid Build Coastguard Worker UBool isParseable() const { return fIsParseable; } 49*0e209d39SAndroid Build Coastguard Worker isFractionRuleSet()50*0e209d39SAndroid Build Coastguard Worker UBool isFractionRuleSet() const { return fIsFractionRuleSet; } 51*0e209d39SAndroid Build Coastguard Worker getName(UnicodeString & result)52*0e209d39SAndroid Build Coastguard Worker void getName(UnicodeString& result) const { result.setTo(name); } isNamed(const UnicodeString & _name)53*0e209d39SAndroid Build Coastguard Worker UBool isNamed(const UnicodeString& _name) const { return this->name == _name; } 54*0e209d39SAndroid Build Coastguard Worker 55*0e209d39SAndroid Build Coastguard Worker void format(int64_t number, UnicodeString& toAppendTo, int32_t pos, int32_t recursionCount, UErrorCode& status) const; 56*0e209d39SAndroid Build Coastguard Worker void format(double number, UnicodeString& toAppendTo, int32_t pos, int32_t recursionCount, UErrorCode& status) const; 57*0e209d39SAndroid Build Coastguard Worker 58*0e209d39SAndroid Build Coastguard Worker UBool parse(const UnicodeString& text, ParsePosition& pos, double upperBound, uint32_t nonNumericalExecutedRuleMask, Formattable& result) const; 59*0e209d39SAndroid Build Coastguard Worker 60*0e209d39SAndroid Build Coastguard Worker void appendRules(UnicodeString& result) const; // toString 61*0e209d39SAndroid Build Coastguard Worker 62*0e209d39SAndroid Build Coastguard Worker void setDecimalFormatSymbols(const DecimalFormatSymbols &newSymbols, UErrorCode& status); 63*0e209d39SAndroid Build Coastguard Worker getOwner()64*0e209d39SAndroid Build Coastguard Worker const RuleBasedNumberFormat *getOwner() const { return owner; } 65*0e209d39SAndroid Build Coastguard Worker private: 66*0e209d39SAndroid Build Coastguard Worker const NFRule * findNormalRule(int64_t number) const; 67*0e209d39SAndroid Build Coastguard Worker const NFRule * findDoubleRule(double number) const; 68*0e209d39SAndroid Build Coastguard Worker const NFRule * findFractionRuleSetRule(double number) const; 69*0e209d39SAndroid Build Coastguard Worker 70*0e209d39SAndroid Build Coastguard Worker friend class NFSubstitution; 71*0e209d39SAndroid Build Coastguard Worker 72*0e209d39SAndroid Build Coastguard Worker private: 73*0e209d39SAndroid Build Coastguard Worker UnicodeString name; 74*0e209d39SAndroid Build Coastguard Worker NFRuleList rules; 75*0e209d39SAndroid Build Coastguard Worker NFRule *nonNumericalRules[6]; 76*0e209d39SAndroid Build Coastguard Worker RuleBasedNumberFormat *owner; 77*0e209d39SAndroid Build Coastguard Worker NFRuleList fractionRules; 78*0e209d39SAndroid Build Coastguard Worker UBool fIsFractionRuleSet; 79*0e209d39SAndroid Build Coastguard Worker UBool fIsPublic; 80*0e209d39SAndroid Build Coastguard Worker UBool fIsParseable; 81*0e209d39SAndroid Build Coastguard Worker 82*0e209d39SAndroid Build Coastguard Worker NFRuleSet(const NFRuleSet &other); // forbid copying of this class 83*0e209d39SAndroid Build Coastguard Worker NFRuleSet &operator=(const NFRuleSet &other); // forbid copying of this class 84*0e209d39SAndroid Build Coastguard Worker }; 85*0e209d39SAndroid Build Coastguard Worker 86*0e209d39SAndroid Build Coastguard Worker // utilities from old llong.h 87*0e209d39SAndroid Build Coastguard Worker // convert mantissa portion of double to int64 88*0e209d39SAndroid Build Coastguard Worker int64_t util64_fromDouble(double d); 89*0e209d39SAndroid Build Coastguard Worker 90*0e209d39SAndroid Build Coastguard Worker // raise radix to the power exponent, only non-negative exponents 91*0e209d39SAndroid Build Coastguard Worker // Arithmetic is performed in unsigned space since overflow in 92*0e209d39SAndroid Build Coastguard Worker // signed space is undefined behavior. 93*0e209d39SAndroid Build Coastguard Worker uint64_t util64_pow(uint32_t radix, uint16_t exponent); 94*0e209d39SAndroid Build Coastguard Worker 95*0e209d39SAndroid Build Coastguard Worker // convert n to digit string in buffer, return length of string 96*0e209d39SAndroid Build Coastguard Worker uint32_t util64_tou(int64_t n, char16_t* buffer, uint32_t buflen, uint32_t radix = 10, UBool raw = false); 97*0e209d39SAndroid Build Coastguard Worker 98*0e209d39SAndroid Build Coastguard Worker #ifdef RBNF_DEBUG 99*0e209d39SAndroid Build Coastguard Worker int64_t util64_utoi(const char16_t* str, uint32_t radix = 10); 100*0e209d39SAndroid Build Coastguard Worker uint32_t util64_toa(int64_t n, char* buffer, uint32_t buflen, uint32_t radix = 10, UBool raw = false); 101*0e209d39SAndroid Build Coastguard Worker int64_t util64_atoi(const char* str, uint32_t radix); 102*0e209d39SAndroid Build Coastguard Worker #endif 103*0e209d39SAndroid Build Coastguard Worker 104*0e209d39SAndroid Build Coastguard Worker 105*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END 106*0e209d39SAndroid Build Coastguard Worker 107*0e209d39SAndroid Build Coastguard Worker /* U_HAVE_RBNF */ 108*0e209d39SAndroid Build Coastguard Worker #endif 109*0e209d39SAndroid Build Coastguard Worker 110*0e209d39SAndroid Build Coastguard Worker // NFRS_H 111*0e209d39SAndroid Build Coastguard Worker #endif 112