ICU 73.2  73.2
plurrule.h
Go to the documentation of this file.
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