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 }
00063 }
00064
00206 class U_I18N_API PluralRules : public UObject {
00207 public:
00208
00216 PluralRules(UErrorCode& status);
00217
00222 PluralRules(const PluralRules& other);
00223
00228 virtual ~PluralRules();
00229
00234 PluralRules* clone() const;
00235
00240 PluralRules& operator=(const PluralRules&);
00241
00252 static PluralRules* U_EXPORT2 createRules(const UnicodeString& description,
00253 UErrorCode& status);
00254
00263 static PluralRules* U_EXPORT2 createDefaultRules(UErrorCode& status);
00264
00281 static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UErrorCode& status);
00282
00299 static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UPluralType type, UErrorCode& status);
00300
00301 #ifndef U_HIDE_INTERNAL_API
00302
00307 static StringEnumeration* U_EXPORT2 getAvailableLocales(UErrorCode &status);
00308
00315 static UBool hasOverride(const Locale &locale);
00316
00322 static PluralRules* U_EXPORT2 internalForLocale(const Locale& locale, UPluralType type, UErrorCode& status);
00323
00331 static const SharedPluralRules* U_EXPORT2 createSharedInstance(
00332 const Locale& locale, UPluralType type, UErrorCode& status);
00333
00334
00335 #endif
00336
00346 UnicodeString select(int32_t number) const;
00347
00357 UnicodeString select(double number) const;
00358
00374 UnicodeString select(const number::FormattedNumber& number, UErrorCode& status) const;
00375
00392 UnicodeString select(const number::FormattedNumberRange& range, UErrorCode& status) const;
00393
00394 #ifndef U_HIDE_INTERNAL_API
00395
00398 UnicodeString select(const IFixedDecimal &number) const;
00402 UnicodeString select(const number::impl::UFormattedNumberRangeData* urange, UErrorCode& status) const;
00403 #endif
00404
00415 StringEnumeration* getKeywords(UErrorCode& status) const;
00416
00417 #ifndef U_HIDE_DEPRECATED_API
00418
00428 double getUniqueKeywordValue(const UnicodeString& keyword);
00429
00450 int32_t getAllKeywordValues(const UnicodeString &keyword,
00451 double *dest, int32_t destCapacity,
00452 UErrorCode& status);
00453 #endif
00454
00473 int32_t getSamples(const UnicodeString &keyword,
00474 double *dest, int32_t destCapacity,
00475 UErrorCode& status);
00476
00477 #ifndef U_HIDE_INTERNAL_API
00478
00498 int32_t getSamples(const UnicodeString &keyword,
00499 FixedDecimal *dest, int32_t destCapacity,
00500 UErrorCode& status);
00501 #endif
00502
00512 UBool isKeyword(const UnicodeString& keyword) const;
00513
00514
00521 UnicodeString getKeywordOther() const;
00522
00523 #ifndef U_HIDE_INTERNAL_API
00524
00528 UnicodeString getRules() const;
00529 #endif
00530
00539 virtual bool operator==(const PluralRules& other) const;
00540
00549 bool operator!=(const PluralRules& other) const {return !operator==(other);}
00550
00551
00558 static UClassID U_EXPORT2 getStaticClassID(void);
00559
00565 virtual UClassID getDynamicClassID() const override;
00566
00567
00568 private:
00569 RuleChain *mRules;
00570 StandardPluralRanges *mStandardPluralRanges;
00571
00572 PluralRules();
00573 void parseDescription(const UnicodeString& ruleData, UErrorCode &status);
00574 int32_t getNumberValue(const UnicodeString& token) const;
00575 UnicodeString getRuleFromResource(const Locale& locale, UPluralType type, UErrorCode& status);
00576 RuleChain *rulesForKeyword(const UnicodeString &keyword) const;
00577 PluralRules *clone(UErrorCode& status) const;
00578
00583 UErrorCode mInternalStatus;
00584
00585 friend class PluralRuleParser;
00586 };
00587
00588 U_NAMESPACE_END
00589
00590 #endif
00591
00592 #endif
00593
00594 #endif // _PLURRULE
00595