ICU 49.1.1  49.1.1
plurrule.h
Go to the documentation of this file.
00001 /*
00002 *******************************************************************************
00003 * Copyright (C) 2008-2012, International Business Machines Corporation and
00004 * others. All Rights Reserved.
00005 *******************************************************************************
00006 *
00007 *
00008 * File PLURRULE.H
00009 *
00010 * Modification History:*
00011 *   Date        Name        Description
00012 *
00013 ********************************************************************************
00014 */
00015 
00016 #ifndef PLURRULE
00017 #define PLURRULE
00018 
00019 #include "unicode/utypes.h"
00020 
00026 #if !UCONFIG_NO_FORMATTING
00027 
00028 #include "unicode/format.h"
00029 
00035 #define UPLRULES_NO_UNIQUE_VALUE ((double)-0.00123456777)
00036 
00037 U_NAMESPACE_BEGIN
00038 
00039 class Hashtable;
00040 class RuleChain;
00041 class RuleParser;
00042 class PluralKeywordEnumeration;
00043 
00126 class U_I18N_API PluralRules : public UObject {
00127 public:
00128 
00136     PluralRules(UErrorCode& status);
00137 
00142     PluralRules(const PluralRules& other);
00143 
00148     virtual ~PluralRules();
00149 
00154     PluralRules* clone() const;
00155 
00160     PluralRules& operator=(const PluralRules&);
00161 
00172     static PluralRules* U_EXPORT2 createRules(const UnicodeString& description,
00173                                               UErrorCode& status);
00174 
00183     static PluralRules* U_EXPORT2 createDefaultRules(UErrorCode& status);
00184 
00200     static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UErrorCode& status);
00201 
00211     UnicodeString select(int32_t number) const;
00212 
00222     UnicodeString select(double number) const;
00223 
00234     StringEnumeration* getKeywords(UErrorCode& status) const;
00235 
00246     double getUniqueKeywordValue(const UnicodeString& keyword);
00247 
00266     int32_t getAllKeywordValues(const UnicodeString &keyword,
00267                                 double *dest, int32_t destCapacity,
00268                                 UErrorCode& status);
00269 
00288     int32_t getSamples(const UnicodeString &keyword,
00289                        double *dest, int32_t destCapacity,
00290                        UErrorCode& status);
00291 
00301     UBool isKeyword(const UnicodeString& keyword) const;
00302 
00303 
00310     UnicodeString getKeywordOther() const;
00311 
00320     virtual UBool operator==(const PluralRules& other) const;
00321 
00330     UBool operator!=(const PluralRules& other) const  {return !operator==(other);}
00331 
00332 
00339     static UClassID U_EXPORT2 getStaticClassID(void);
00340 
00346     virtual UClassID getDynamicClassID() const;
00347 
00348 
00349 private:
00350     RuleChain  *mRules;
00351     RuleParser *mParser;
00352     double     *mSamples;
00353     int32_t    *mSampleInfo;
00354     int32_t    mSampleInfoCount;
00355 
00356     PluralRules();   // default constructor not implemented
00357     int32_t getRepeatLimit() const;
00358     void parseDescription(UnicodeString& ruleData, RuleChain& rules, UErrorCode &status);
00359     void getNextLocale(const UnicodeString& localeData, int32_t* curIndex, UnicodeString& localeName);
00360     void addRules(RuleChain& rules);
00361     int32_t getNumberValue(const UnicodeString& token) const;
00362     UnicodeString getRuleFromResource(const Locale& locale, UErrorCode& status);
00363 
00364     static const int32_t MAX_SAMPLES = 3;
00365 
00366     int32_t getSamplesInternal(const UnicodeString &keyword, double *dest,
00367                                int32_t destCapacity, UBool includeUnlimited,
00368                                UErrorCode& status);
00369     int32_t getKeywordIndex(const UnicodeString& keyword,
00370                             UErrorCode& status) const;
00371     void initSamples(UErrorCode& status);
00372 
00373 };
00374 
00375 U_NAMESPACE_END
00376 
00377 #endif /* #if !UCONFIG_NO_FORMATTING */
00378 
00379 #endif // _PLURRULE
00380 //eof