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 #include "unicode/upluralrules.h"
00030 
00036 #define UPLRULES_NO_UNIQUE_VALUE ((double)-0.00123456777)
00037 
00038 U_NAMESPACE_BEGIN
00039 
00040 class Hashtable;
00041 class RuleChain;
00042 class RuleParser;
00043 class PluralKeywordEnumeration;
00044 
00127 class U_I18N_API PluralRules : public UObject {
00128 public:
00129 
00137     PluralRules(UErrorCode& status);
00138 
00143     PluralRules(const PluralRules& other);
00144 
00149     virtual ~PluralRules();
00150 
00155     PluralRules* clone() const;
00156 
00161     PluralRules& operator=(const PluralRules&);
00162 
00173     static PluralRules* U_EXPORT2 createRules(const UnicodeString& description,
00174                                               UErrorCode& status);
00175 
00184     static PluralRules* U_EXPORT2 createDefaultRules(UErrorCode& status);
00185 
00202     static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UErrorCode& status);
00203 
00220     static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UPluralType type, UErrorCode& status);
00221 
00231     UnicodeString select(int32_t number) const;
00232 
00242     UnicodeString select(double number) const;
00243 
00254     StringEnumeration* getKeywords(UErrorCode& status) const;
00255 
00266     double getUniqueKeywordValue(const UnicodeString& keyword);
00267 
00286     int32_t getAllKeywordValues(const UnicodeString &keyword,
00287                                 double *dest, int32_t destCapacity,
00288                                 UErrorCode& status);
00289 
00308     int32_t getSamples(const UnicodeString &keyword,
00309                        double *dest, int32_t destCapacity,
00310                        UErrorCode& status);
00311 
00321     UBool isKeyword(const UnicodeString& keyword) const;
00322 
00323 
00330     UnicodeString getKeywordOther() const;
00331 
00340     virtual UBool operator==(const PluralRules& other) const;
00341 
00350     UBool operator!=(const PluralRules& other) const  {return !operator==(other);}
00351 
00352 
00359     static UClassID U_EXPORT2 getStaticClassID(void);
00360 
00366     virtual UClassID getDynamicClassID() const;
00367 
00368 
00369 private:
00370     RuleChain  *mRules;
00371     RuleParser *mParser;
00372     double     *mSamples;
00373     int32_t    *mSampleInfo;
00374     int32_t    mSampleInfoCount;
00375 
00376     PluralRules();   // default constructor not implemented
00377     int32_t getRepeatLimit() const;
00378     void parseDescription(UnicodeString& ruleData, RuleChain& rules, UErrorCode &status);
00379     void getNextLocale(const UnicodeString& localeData, int32_t* curIndex, UnicodeString& localeName);
00380     void addRules(RuleChain& rules);
00381     int32_t getNumberValue(const UnicodeString& token) const;
00382     UnicodeString getRuleFromResource(const Locale& locale, UPluralType type, UErrorCode& status);
00383 
00384     static const int32_t MAX_SAMPLES = 3;
00385 
00386     int32_t getSamplesInternal(const UnicodeString &keyword, double *dest,
00387                                int32_t destCapacity, UBool includeUnlimited,
00388                                UErrorCode& status);
00389     int32_t getKeywordIndex(const UnicodeString& keyword,
00390                             UErrorCode& status) const;
00391     void initSamples(UErrorCode& status);
00392 
00393 };
00394 
00395 U_NAMESPACE_END
00396 
00397 #endif /* #if !UCONFIG_NO_FORMATTING */
00398 
00399 #endif // _PLURRULE
00400 //eof

Generated on 25 Nov 2014 for ICU 50.1.2 by  doxygen 1.4.7