|
ICU 73.2
73.2
|
00001 // © 2016 and later: Unicode, Inc. and others. 00002 // License & terms of use: http://www.unicode.org/copyright.html 00003 /* 00004 ******************************************************************************* 00005 * Copyright (C) 2008-2015, International Business Machines Corporation and 00006 * others. All Rights Reserved. 00007 ******************************************************************************* 00008 * 00009 * 00010 * File PLURRULE.H 00011 * 00012 * Modification History:* 00013 * Date Name Description 00014 * 00015 ******************************************************************************** 00016 */ 00017 00018 #ifndef PLURRULE 00019 #define PLURRULE 00020 00021 #include "unicode/utypes.h" 00022 00023 #if U_SHOW_CPLUSPLUS_API 00024 00030 #if !UCONFIG_NO_FORMATTING 00031 00032 #include "unicode/format.h" 00033 #include "unicode/upluralrules.h" 00034 #ifndef U_HIDE_INTERNAL_API 00035 #include "unicode/numfmt.h" 00036 #endif /* U_HIDE_INTERNAL_API */ 00037 00043 #define UPLRULES_NO_UNIQUE_VALUE ((double)-0.00123456777) 00044 00045 U_NAMESPACE_BEGIN 00046 00047 class Hashtable; 00048 class IFixedDecimal; 00049 class FixedDecimal; 00050 class RuleChain; 00051 class PluralRuleParser; 00052 class PluralKeywordEnumeration; 00053 class AndConstraint; 00054 class SharedPluralRules; 00055 class StandardPluralRanges; 00056 00057 namespace number { 00058 class FormattedNumber; 00059 class FormattedNumberRange; 00060 namespace impl { 00061 class UFormattedNumberRangeData; 00062 class DecimalQuantity; 00063 class DecNum; 00064 } 00065 } 00066 00067 #ifndef U_HIDE_INTERNAL_API 00068 using icu::number::impl::DecimalQuantity; 00069 #endif /* U_HIDE_INTERNAL_API */ 00070 00212 class U_I18N_API PluralRules : public UObject { 00213 public: 00214 00222 PluralRules(UErrorCode& status); 00223 00228 PluralRules(const PluralRules& other); 00229 00234 virtual ~PluralRules(); 00235 00240 PluralRules* clone() const; 00241 00246 PluralRules& operator=(const PluralRules&); 00247 00258 static PluralRules* U_EXPORT2 createRules(const UnicodeString& description, 00259 UErrorCode& status); 00260 00269 static PluralRules* U_EXPORT2 createDefaultRules(UErrorCode& status); 00270 00287 static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UErrorCode& status); 00288 00305 static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UPluralType type, UErrorCode& status); 00306 00307 #ifndef U_HIDE_INTERNAL_API 00308 00313 static StringEnumeration* U_EXPORT2 getAvailableLocales(UErrorCode &status); 00314 00320 static PluralRules* U_EXPORT2 internalForLocale(const Locale& locale, UPluralType type, UErrorCode& status); 00321 00329 static const SharedPluralRules* U_EXPORT2 createSharedInstance( 00330 const Locale& locale, UPluralType type, UErrorCode& status); 00331 00332 00333 #endif /* U_HIDE_INTERNAL_API */ 00334 00344 UnicodeString select(int32_t number) const; 00345 00355 UnicodeString select(double number) const; 00356 00372 UnicodeString select(const number::FormattedNumber& number, UErrorCode& status) const; 00373 00390 UnicodeString select(const number::FormattedNumberRange& range, UErrorCode& status) const; 00391 00392 #ifndef U_HIDE_INTERNAL_API 00393 00396 UnicodeString select(const IFixedDecimal &number) const; 00400 UnicodeString select(const number::impl::UFormattedNumberRangeData* urange, UErrorCode& status) const; 00401 #endif /* U_HIDE_INTERNAL_API */ 00402 00413 StringEnumeration* getKeywords(UErrorCode& status) const; 00414 00415 #ifndef U_HIDE_DEPRECATED_API 00416 00426 double getUniqueKeywordValue(const UnicodeString& keyword); 00427 00448 int32_t getAllKeywordValues(const UnicodeString &keyword, 00449 double *dest, int32_t destCapacity, 00450 UErrorCode& status); 00451 #endif /* U_HIDE_DEPRECATED_API */ 00452 00471 int32_t getSamples(const UnicodeString &keyword, 00472 double *dest, int32_t destCapacity, 00473 UErrorCode& status); 00474 00475 #ifndef U_HIDE_INTERNAL_API 00476 00496 int32_t getSamples(const UnicodeString &keyword, 00497 DecimalQuantity *dest, int32_t destCapacity, 00498 UErrorCode& status); 00499 #endif /* U_HIDE_INTERNAL_API */ 00500 00510 UBool isKeyword(const UnicodeString& keyword) const; 00511 00512 00519 UnicodeString getKeywordOther() const; 00520 00521 #ifndef U_HIDE_INTERNAL_API 00522 00526 UnicodeString getRules() const; 00527 #endif /* U_HIDE_INTERNAL_API */ 00528 00537 virtual bool operator==(const PluralRules& other) const; 00538 00547 bool operator!=(const PluralRules& other) const {return !operator==(other);} 00548 00549 00556 static UClassID U_EXPORT2 getStaticClassID(void); 00557 00563 virtual UClassID getDynamicClassID() const override; 00564 00565 00566 private: 00567 RuleChain *mRules; 00568 StandardPluralRanges *mStandardPluralRanges; 00569 00570 PluralRules() = delete; // default constructor not implemented 00571 UnicodeString getRuleFromResource(const Locale& locale, UPluralType type, UErrorCode& status); 00572 RuleChain *rulesForKeyword(const UnicodeString &keyword) const; 00573 PluralRules *clone(UErrorCode& status) const; 00574 00579 UErrorCode mInternalStatus; 00580 00581 friend class PluralRuleParser; 00582 }; 00583 00584 U_NAMESPACE_END 00585 00586 #endif /* #if !UCONFIG_NO_FORMATTING */ 00587 00588 #endif /* U_SHOW_CPLUSPLUS_API */ 00589 00590 #endif // _PLURRULE 00591 //eof
1.7.6.1