ICU 4.8.1.1  4.8.1.1
plurfmt.h
Go to the documentation of this file.
00001 /*
00002 *******************************************************************************
00003 * Copyright (C) 2007-2011, International Business Machines Corporation and
00004 * others. All Rights Reserved.
00005 *******************************************************************************
00006 *
00007 
00008 * File PLURFMT.H
00009 *
00010 * Modification History:*
00011 *   Date        Name        Description
00012 *
00013 ********************************************************************************
00014 */
00015 
00016 #ifndef PLURFMT
00017 #define PLURFMT
00018 
00019 #include "unicode/utypes.h"
00020 
00026 #if !UCONFIG_NO_FORMATTING
00027 
00028 #include "unicode/messagepattern.h"
00029 #include "unicode/numfmt.h"
00030 #include "unicode/plurrule.h"
00031 
00032 U_NAMESPACE_BEGIN
00033 
00034 class Hashtable;
00035 
00147 class U_I18N_API PluralFormat : public Format {
00148 public:
00149 
00158     PluralFormat(UErrorCode& status);
00159 
00169     PluralFormat(const Locale& locale, UErrorCode& status);
00170 
00180     PluralFormat(const PluralRules& rules, UErrorCode& status);
00181 
00193     PluralFormat(const Locale& locale, const PluralRules& rules, UErrorCode& status);
00194 
00205     PluralFormat(const UnicodeString& pattern, UErrorCode& status);
00206 
00221     PluralFormat(const Locale& locale, const UnicodeString& pattern, UErrorCode& status);
00222 
00234     PluralFormat(const PluralRules& rules,
00235                  const UnicodeString& pattern,
00236                  UErrorCode& status);
00237 
00252     PluralFormat(const Locale& locale,
00253                  const PluralRules& rules,
00254                  const UnicodeString& pattern,
00255                  UErrorCode& status);
00256 
00261     PluralFormat(const PluralFormat& other);
00262 
00267     virtual ~PluralFormat();
00268 
00281     void applyPattern(const UnicodeString& pattern, UErrorCode& status);
00282 
00283 
00284     using Format::format;
00285 
00298     UnicodeString format(int32_t number, UErrorCode& status) const;
00299 
00312     UnicodeString format(double number, UErrorCode& status) const;
00313 
00330     UnicodeString& format(int32_t number,
00331                           UnicodeString& appendTo,
00332                           FieldPosition& pos,
00333                           UErrorCode& status) const;
00334 
00351     UnicodeString& format(double number,
00352                           UnicodeString& appendTo,
00353                           FieldPosition& pos,
00354                           UErrorCode& status) const;
00355 
00368     void setLocale(const Locale& locale, UErrorCode& status);
00369 
00379     void setNumberFormat(const NumberFormat* format, UErrorCode& status);
00380 
00387     PluralFormat& operator=(const PluralFormat& other);
00388 
00396     virtual UBool operator==(const Format& other) const;
00397 
00405     virtual UBool operator!=(const Format& other) const;
00406 
00412     virtual Format* clone(void) const;
00413 
00426    UnicodeString& format(const Formattable& obj,
00427                          UnicodeString& appendTo,
00428                          FieldPosition& pos,
00429                          UErrorCode& status) const;
00430 
00439    UnicodeString& toPattern(UnicodeString& appendTo);
00440 
00463    virtual void parseObject(const UnicodeString& source,
00464                             Formattable& result,
00465                             ParsePosition& parse_pos) const;
00466 
00473     static UClassID U_EXPORT2 getStaticClassID(void);
00474 
00480      virtual UClassID getDynamicClassID() const;
00481 
00482   private:
00483 
00487     class U_I18N_API PluralSelector : public UMemory {
00488       public:
00496         virtual UnicodeString select(double number, UErrorCode& ec) const = 0;
00497     };
00498 
00502     class U_I18N_API PluralSelectorAdapter : public PluralSelector {
00503       public:
00504         PluralSelectorAdapter() : pluralRules(NULL) {
00505         }
00506 
00507         virtual ~PluralSelectorAdapter();
00508 
00509         virtual UnicodeString select(double number, UErrorCode& /*ec*/) const;
00510 
00511         void reset();
00512 
00513         PluralRules* pluralRules;
00514     };
00515 
00516     Locale  locale;
00517     MessagePattern msgPattern;
00518     NumberFormat*  numberFormat;
00519     double offset;
00520     PluralSelectorAdapter pluralRulesWrapper;
00521 
00522     PluralFormat();   // default constructor not implemented
00523     void init(const PluralRules* rules, UErrorCode& status);
00528     void copyObjects(const PluralFormat& other);
00529 
00540     static int32_t findSubMessage(
00541          const MessagePattern& pattern, int32_t partIndex,
00542          const PluralSelector& selector, double number, UErrorCode& ec);
00543 
00544     friend class MessageFormat;
00545 };
00546 
00547 U_NAMESPACE_END
00548 
00549 #endif /* #if !UCONFIG_NO_FORMATTING */
00550 
00551 #endif // _PLURFMT
00552 //eof
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Defines