00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
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
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
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
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
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
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
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
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;
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
00587
00588 #endif
00589
00590 #endif // _PLURRULE
00591