16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org****************************************************************************** 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 1997-2012, International Business Machines 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org****************************************************************************** 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* file name: nfrs.h 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* encoding: US-ASCII 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* tab size: 8 (not used) 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* indentation:4 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification history 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Date Name Comments 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 10/11/2001 Doug Ported from ICU4J 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef NFRS_H 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define NFRS_H 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uobject.h" 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/rbnf.h" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_HAVE_RBNF 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/umisc.h" 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "nfrlist.h" 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass NFRuleSet : public UMemory { 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org public: 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NFRuleSet(UnicodeString* descriptions, int32_t index, UErrorCode& status); 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void parseRules(UnicodeString& rules, const RuleBasedNumberFormat* owner, UErrorCode& status); 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void makeIntoFractionRuleSet() { fIsFractionRuleSet = TRUE; } 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ~NFRuleSet(); 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool operator==(const NFRuleSet& rhs) const; 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool operator!=(const NFRuleSet& rhs) const { return !operator==(rhs); } 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool isPublic() const { return fIsPublic; } 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool isParseable() const { return fIsParseable; } 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool isFractionRuleSet() const { return fIsFractionRuleSet; } 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void getName(UnicodeString& result) const { result.setTo(name); } 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool isNamed(const UnicodeString& _name) const { return this->name == _name; } 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void format(int64_t number, UnicodeString& toAppendTo, int32_t pos) const; 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void format(double number, UnicodeString& toAppendTo, int32_t pos) const; 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool parse(const UnicodeString& text, ParsePosition& pos, double upperBound, Formattable& result) const; 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void appendRules(UnicodeString& result) const; // toString 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org private: 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NFRule * findNormalRule(int64_t number) const; 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NFRule * findDoubleRule(double number) const; 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NFRule * findFractionRuleSetRule(double number) const; 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org private: 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString name; 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NFRuleList rules; 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NFRule *negativeNumberRule; 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NFRule *fractionRules[3]; 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool fIsFractionRuleSet; 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool fIsPublic; 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool fIsParseable; 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t fRecursionCount; 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NFRuleSet(const NFRuleSet &other); // forbid copying of this class 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NFRuleSet &operator=(const NFRuleSet &other); // forbid copying of this class 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// utilities from old llong.h 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// convert mantissa portion of double to int64 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint64_t util64_fromDouble(double d); 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// raise radix to the power exponent, only non-negative exponents 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint64_t util64_pow(int32_t radix, uint32_t exponent); 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// convert n to digit string in buffer, return length of string 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orguint32_t util64_tou(int64_t n, UChar* buffer, uint32_t buflen, uint32_t radix = 10, UBool raw = FALSE); 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef RBNF_DEBUG 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint64_t util64_utoi(const UChar* str, uint32_t radix = 10); 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orguint32_t util64_toa(int64_t n, char* buffer, uint32_t buflen, uint32_t radix = 10, UBool raw = FALSE); 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint64_t util64_atoi(const char* str, uint32_t radix); 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* U_HAVE_RBNF */ 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// NFRS_H 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 102