ICU 4.8.1.1
4.8.1.1
|
00001 /* 00002 ******************************************************************************* 00003 * Copyright (C) 2008-2011, 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 00311 UnicodeString getKeywordOther() const; 00312 00321 virtual UBool operator==(const PluralRules& other) const; 00322 00331 UBool operator!=(const PluralRules& other) const {return !operator==(other);} 00332 00333 00340 static UClassID U_EXPORT2 getStaticClassID(void); 00341 00347 virtual UClassID getDynamicClassID() const; 00348 00349 00350 private: 00351 RuleChain *mRules; 00352 RuleParser *mParser; 00353 double *mSamples; 00354 int32_t *mSampleInfo; 00355 int32_t mSampleInfoCount; 00356 00357 PluralRules(); // default constructor not implemented 00358 int32_t getRepeatLimit() const; 00359 void parseDescription(UnicodeString& ruleData, RuleChain& rules, UErrorCode &status); 00360 void getNextLocale(const UnicodeString& localeData, int32_t* curIndex, UnicodeString& localeName); 00361 void addRules(RuleChain& rules); 00362 int32_t getNumberValue(const UnicodeString& token) const; 00363 UnicodeString getRuleFromResource(const Locale& locale, UErrorCode& status); 00364 00365 static const int32_t MAX_SAMPLES = 3; 00366 00367 int32_t getSamplesInternal(const UnicodeString &keyword, double *dest, 00368 int32_t destCapacity, UBool includeUnlimited, 00369 UErrorCode& status); 00370 int32_t getKeywordIndex(const UnicodeString& keyword, 00371 UErrorCode& status) const; 00372 void initSamples(UErrorCode& status); 00373 00374 }; 00375 00376 U_NAMESPACE_END 00377 00378 #endif /* #if !UCONFIG_NO_FORMATTING */ 00379 00380 #endif // _PLURRULE 00381 //eof