ICU 4.8.1.1  4.8.1.1
plurrule.h
Go to the documentation of this file.
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
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Defines