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

fmtable.h

This is the verbatim text of the fmtable.h include file.
/*
********************************************************************************
*   Copyright (C) 1997-1999, International Business Machines
*   Corporation and others.  All Rights Reserved.
********************************************************************************
*
* File FMTABLE.H
*
* Modification History:
*
*   Date        Name        Description
*   02/29/97    aliu        Creation.
********************************************************************************
*/
#ifndef FMTABLE_H
#define FMTABLE_H


#include "unicode/utypes.h"
#include "unicode/unistr.h"

class U_I18N_API Formattable {
public:
                    enum ISDATE { kIsDate };

                    Formattable(); // Type kLong, value 0
                    Formattable(UDate d, ISDATE);
                    Formattable(double d);
                    Formattable(int32_t l);
                    Formattable(const char* strToCopy);
                    Formattable(const UnicodeString& stringToCopy);
                    Formattable(UnicodeString* stringToAdopt);
                    Formattable(const Formattable* arrayToCopy, int32_t count);

                    Formattable(const Formattable&);
    Formattable&    operator=(const Formattable&);
    bool_t          operator==(const Formattable&) const;
    bool_t          operator!=(const Formattable& other) const
      { return !operator==(other); }

    virtual         ~Formattable();

    enum Type {
        kDate,      // Date
        kDouble,    // double
        kLong,      // long
        kString,    // UnicodeString
        kArray      // Formattable[]
    };

    Type            getType(void) const;
     
    double          getDouble(void) const { return fValue.fDouble; } 
    int32_t            getLong(void) const { return fValue.fLong; } 
    UDate            getDate(void) const { return fValue.fDate; }
 
    UnicodeString&  getString(UnicodeString& result) const
      { result=*fValue.fString; return result; }
 
    const Formattable* getArray(int32_t& count) const
      { count=fValue.fArrayAndCount.fCount; return fValue.fArrayAndCount.fArray; }

    Formattable&    operator[](int32_t index) { return fValue.fArrayAndCount.fArray[index]; }
 
    void            setDouble(double d); 
    void            setLong(int32_t l); 
    void            setDate(UDate d); 
    void            setString(const UnicodeString& stringToCopy); 
    void            setArray(const Formattable* array, int32_t count); 
    void            adoptString(UnicodeString* stringToAdopt); 
    void            adoptArray(Formattable* array, int32_t count);
        
private:
    void            dispose(void);

    static Formattable* createArrayCopy(const Formattable* array, int32_t count);

    // Note: For now, we do not handle unsigned long and unsigned
    // double types.  Smaller unsigned types, such as unsigned
    // short, can fit within a long.
    union {
        UnicodeString*  fString;
        double          fDouble;
        int32_t            fLong;
        UDate            fDate;
        struct
        {
          Formattable*  fArray;
          int32_t          fCount;
        }               fArrayAndCount;
    }                   fValue;

    Type                fType;
};

inline Formattable*
Formattable::createArrayCopy(const Formattable* array, int32_t count)
{
    Formattable *result = new Formattable[count];
    for (int32_t i=0; i<count; ++i) result[i] = array[i]; // Don't memcpy!
    return result;
}

#endif //_FMTABLE
//eof
     

Generated at Thu Feb 10 15:30:40 2000 for icu by doxygen 1.0.0 written by Dimitri van Heesch, © 1997-1999