Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

fmtable.h

Go to the documentation of this file.
00001 /*
00002 ********************************************************************************
00003 *   Copyright (C) 1997-1999, International Business Machines
00004 *   Corporation and others.  All Rights Reserved.
00005 ********************************************************************************
00006 *
00007 * File FMTABLE.H
00008 *
00009 * Modification History:
00010 *
00011 *   Date        Name        Description
00012 *   02/29/97    aliu        Creation.
00013 ********************************************************************************
00014 */
00015 #ifndef FMTABLE_H
00016 #define FMTABLE_H
00017 
00018 
00019 #include "unicode/utypes.h"
00020 #include "unicode/unistr.h"
00021 
00038 class U_I18N_API Formattable {
00039 public:
00048                     enum ISDATE { kIsDate };
00049 
00050                     Formattable(); // Type kLong, value 0
00057                     Formattable(UDate d, ISDATE);
00063                     Formattable(double d);
00069                     Formattable(int32_t l);
00076                     Formattable(const char* strToCopy);
00082                     Formattable(const UnicodeString& stringToCopy);
00088                     Formattable(UnicodeString* stringToAdopt);
00095                     Formattable(const Formattable* arrayToCopy, int32_t count);
00096 
00101                     Formattable(const Formattable&);
00106     Formattable&    operator=(const Formattable&);
00111     UBool          operator==(const Formattable&) const;
00112     UBool          operator!=(const Formattable& other) const
00113       { return !operator==(other); }
00114 
00119     virtual         ~Formattable();
00120 
00124     enum Type {
00125         kDate,      // Date
00126         kDouble,    // double
00127         kLong,      // long
00128         kString,    // UnicodeString
00129         kArray      // Formattable[]
00130     };
00131 
00136     Type            getType(void) const;
00137     
00142     double          getDouble(void) const { return fValue.fDouble; }
00147     int32_t            getLong(void) const { return fValue.fLong; }
00152     UDate            getDate(void) const { return fValue.fDate; }
00153 
00158     UnicodeString&  getString(UnicodeString& result) const
00159       { result=*fValue.fString; return result; }
00160 
00165     inline const UnicodeString& getString(void) const;
00166 
00171     inline UnicodeString& getString(void);
00172 
00177     const Formattable* getArray(int32_t& count) const
00178       { count=fValue.fArrayAndCount.fCount; return fValue.fArrayAndCount.fArray; }
00179 
00186     Formattable&    operator[](int32_t index) { return fValue.fArrayAndCount.fArray[index]; }
00187 
00192     void            setDouble(double d);
00197     void            setLong(int32_t l);
00202     void            setDate(UDate d);
00207     void            setString(const UnicodeString& stringToCopy);
00212     void            setArray(const Formattable* array, int32_t count);
00217     void            adoptString(UnicodeString* stringToAdopt);
00222     void            adoptArray(Formattable* array, int32_t count);
00223         
00224 private:
00229     void            dispose(void);
00230 
00238     static Formattable* createArrayCopy(const Formattable* array, int32_t count);
00239 
00240     // Note: For now, we do not handle unsigned long and unsigned
00241     // double types.  Smaller unsigned types, such as unsigned
00242     // short, can fit within a long.
00243     union {
00244         UnicodeString*  fString;
00245         double          fDouble;
00246         int32_t            fLong;
00247         UDate            fDate;
00248         struct
00249         {
00250           Formattable*  fArray;
00251           int32_t          fCount;
00252         }               fArrayAndCount;
00253     }                   fValue;
00254 
00255     Type                fType;
00256 };
00257 
00258 inline Formattable*
00259 Formattable::createArrayCopy(const Formattable* array, int32_t count)
00260 {
00261     Formattable *result = new Formattable[count];
00262     for (int32_t i=0; i<count; ++i) result[i] = array[i]; // Don't memcpy!
00263     return result;
00264 }
00265 
00266 inline const UnicodeString& Formattable::getString(void) const {
00267     return *fValue.fString;
00268 }
00269 
00270 inline UnicodeString& Formattable::getString(void) {
00271     return *fValue.fString;
00272 }
00273 
00274 #endif //_FMTABLE
00275 //eof
00276      

Generated at Thu Mar 22 16:12:35 2001 for ICU 1.8 by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000