ICU 50.2 50.2
plurrule.h
Go to the documentation of this file.
1/*
2*******************************************************************************
3* Copyright (C) 2008-2012, International Business Machines Corporation and
4* others. All Rights Reserved.
5*******************************************************************************
6*
7*
8* File PLURRULE.H
9*
10* Modification History:*
11* Date Name Description
12*
13********************************************************************************
14*/
15
16#ifndef PLURRULE
17#define PLURRULE
18
19#include "unicode/utypes.h"
20
25
26#if !UCONFIG_NO_FORMATTING
27
28#include "unicode/format.h"
30
36#define UPLRULES_NO_UNIQUE_VALUE ((double)-0.00123456777)
37
39
40class Hashtable;
41class RuleChain;
42class RuleParser;
43class PluralKeywordEnumeration;
44
128public:
129
138
144
149 virtual ~PluralRules();
150
156
162
173 static PluralRules* U_EXPORT2 createRules(const UnicodeString& description,
174 UErrorCode& status);
175
184 static PluralRules* U_EXPORT2 createDefaultRules(UErrorCode& status);
185
202 static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UErrorCode& status);
203
220 static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UPluralType type, UErrorCode& status);
221
231 UnicodeString select(int32_t number) const;
232
242 UnicodeString select(double number) const;
243
255
266 double getUniqueKeywordValue(const UnicodeString& keyword);
267
286 int32_t getAllKeywordValues(const UnicodeString &keyword,
287 double *dest, int32_t destCapacity,
288 UErrorCode& status);
289
308 int32_t getSamples(const UnicodeString &keyword,
309 double *dest, int32_t destCapacity,
310 UErrorCode& status);
311
321 UBool isKeyword(const UnicodeString& keyword) const;
322
323
331
340 virtual UBool operator==(const PluralRules& other) const;
341
350 UBool operator!=(const PluralRules& other) const {return !operator==(other);}
351
352
359 static UClassID U_EXPORT2 getStaticClassID(void);
360
367
368
369private:
370 RuleChain *mRules;
371 RuleParser *mParser;
372 double *mSamples;
373 int32_t *mSampleInfo;
374 int32_t mSampleInfoCount;
375
376 PluralRules(); // default constructor not implemented
377 int32_t getRepeatLimit() const;
378 void parseDescription(UnicodeString& ruleData, RuleChain& rules, UErrorCode &status);
379 void getNextLocale(const UnicodeString& localeData, int32_t* curIndex, UnicodeString& localeName);
380 void addRules(RuleChain& rules);
381 int32_t getNumberValue(const UnicodeString& token) const;
382 UnicodeString getRuleFromResource(const Locale& locale, UPluralType type, UErrorCode& status);
383
384 static const int32_t MAX_SAMPLES = 3;
385
386 int32_t getSamplesInternal(const UnicodeString &keyword, double *dest,
387 int32_t destCapacity, UBool includeUnlimited,
388 UErrorCode& status);
389 int32_t getKeywordIndex(const UnicodeString& keyword,
390 UErrorCode& status) const;
391 void initSamples(UErrorCode& status);
392
393};
394
396
397#endif /* #if !UCONFIG_NO_FORMATTING */
398
399#endif // _PLURRULE
400//eof
A Locale object represents a specific geographical, political, or cultural region.
Definition locid.h:182
UBool operator!=(const PluralRules &other) const
Compares the inequality of two PluralRules objects.
Definition plurrule.h:350
virtual UBool operator==(const PluralRules &other) const
Compares the equality of two PluralRules objects.
UnicodeString getKeywordOther() const
Returns keyword for default plural form.
double getUniqueKeywordValue(const UnicodeString &keyword)
Returns a unique value for this keyword if it exists, else the constant UPLRULES_NO_UNIQUE_VALUE.
virtual UClassID getDynamicClassID() const
ICU "poor man's RTTI", returns a UClassID for the actual class.
PluralRules * clone() const
Clone.
int32_t getAllKeywordValues(const UnicodeString &keyword, double *dest, int32_t destCapacity, UErrorCode &status)
Returns all the values for which select() would return the keyword.
PluralRules(UErrorCode &status)
Constructor.
UnicodeString select(int32_t number) const
Given a number, returns the keyword of the first rule that applies to the number.
static PluralRules * forLocale(const Locale &locale, UPluralType type, UErrorCode &status)
Provides access to the predefined PluralRules for a given locale and the plural type.
virtual ~PluralRules()
Destructor.
static PluralRules * forLocale(const Locale &locale, UErrorCode &status)
Provides access to the predefined cardinal-number PluralRules for a given locale.
UnicodeString select(double number) const
Given a number, returns the keyword of the first rule that applies to the number.
static UClassID getStaticClassID(void)
ICU "poor man's RTTI", returns a UClassID for this class.
static PluralRules * createRules(const UnicodeString &description, UErrorCode &status)
Creates a PluralRules from a description if it is parsable, otherwise returns NULL.
StringEnumeration * getKeywords(UErrorCode &status) const
Returns a list of all rule keywords used in this PluralRules object.
UBool isKeyword(const UnicodeString &keyword) const
Returns TRUE if the given keyword is defined in this PluralRules object.
PluralRules(const PluralRules &other)
Copy constructor.
int32_t getSamples(const UnicodeString &keyword, double *dest, int32_t destCapacity, UErrorCode &status)
Returns sample values for which select() would return the keyword.
PluralRules & operator=(const PluralRules &)
Assignment operator.
static PluralRules * createDefaultRules(UErrorCode &status)
The default rules that accept any number.
Base class for 'pure' C++ implementations of uenum api.
Definition strenum.h:55
UObject is the common ICU "boilerplate" class.
Definition uobject.h:229
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition unistr.h:247
C++ API: Base class for all formats.
U_EXPORT UBool operator==(const StringPiece &x, const StringPiece &y)
Global operator == for StringPiece.
int8_t UBool
The ICU boolean type.
Definition umachine.h:200
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition uobject.h:96
C API: Plural rules, select plural keywords for numeric values.
UPluralType
Type of plurals and PluralRules.
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers,...
Definition utypes.h:476
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition utypes.h:358
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition uversion.h:130
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition uversion.h:129