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

Fl_Variant.h

00001 /*
00002  * $Id: Fl_Variant.h,v 1.17 2003/05/09 00:18:19 parshin Exp $
00003  *
00004  * Extended Fast Light Toolkit (EFLTK)
00005  * Copyright (C) 2002-2003 by EDE-Team
00006  * WWW: http://www.sourceforge.net/projects/ede
00007  *
00008  * Fast Light Toolkit (FLTK)
00009  * Copyright (C) 1998-2003 by Bill Spitzak and others.
00010  * WWW: http://www.fltk.org
00011  *
00012  * This library is distributed under the GNU LIBRARY GENERAL PUBLIC LICENSE
00013  * version 2. See COPYING for details.
00014  *
00015  * Author : Alexey Parshin
00016  * Email  : alexey@fltk.net
00017  *
00018  * Please report all bugs and problems to "efltk-bugs@fltk.net"
00019  *
00020  */
00021 
00022 #ifndef _FL_VARIANT_H_
00023 #define _FL_VARIANT_H_
00024 
00025 #include "Fl_Export.h"
00026 #include "Fl_Date_Time.h"
00027 
00028 class Fl_Image;
00029 
00031 enum FL_VAR_TYPES {
00032     VAR_NONE     = 0,
00033     VAR_INT      = 1,
00034     VAR_FLOAT    = 2,
00035     VAR_STRING   = 4,
00036     VAR_TEXT     = 8,
00037     VAR_BUFFER   = 16,
00038     VAR_DATE     = 32,
00039     VAR_DATETIME = 64,
00040     VAR_IMAGEPTR = 128
00041 };
00042 
00043 typedef FL_VAR_TYPES Fl_Variant_Type;
00044 
00046 class FL_API Fl_Variant {
00047 public:
00048     static Fl_Variant null_object;
00049 
00050     Fl_Variant() { m_type = VAR_NONE; }
00051     Fl_Variant(int v);
00052     Fl_Variant(float v);
00053     Fl_Variant(const char* v);
00054     Fl_Variant(const Fl_String& v);
00055     Fl_Variant(const void *v,int sz);
00056     Fl_Variant(Fl_Date_Time value);
00057 
00058     ~Fl_Variant() { free_buffers(); }
00059 
00060     bool null() { return (m_type==VAR_NONE); }
00061 
00062     void set_int(int value);
00063     void set_float(double value);
00064     void set_string(const char * value,int maxlen=0);
00065     void set_text(const char * value);
00066     void set_buffer(const void * value,int sz);
00067     void set_image_ptr(const Fl_Image * value);
00068     void set_date(Fl_Date_Time value);
00069     void set_datetime(Fl_Date_Time value);
00070 
00071     void resize_buffer(int sz);
00072 
00073     // Convert functions
00074     int as_int() const;
00075     double as_float() const;
00076     Fl_String as_string() const;
00077     bool as_bool() const;
00078     Fl_Date_Time as_date() const;
00079     Fl_Date_Time as_datetime() const;
00080     const Fl_Image *as_image() const;
00081 
00085     int    get_int() const              { return m_data.intData; }
00086     double get_float() const            { return m_data.floatData; }
00087     const char *get_string() const      { return m_data.stringData; }
00088     const void *get_buffer() const      { return m_data.blobData; }
00089     const Fl_Image *get_image_ptr() const { return m_data.imagePtr; }
00090     Fl_Date_Time get_date() const       { return int(m_data.floatData); }
00091     Fl_Date_Time get_datetime() const   { return m_data.floatData; }
00092 
00093     // Convert operators
00094     operator int () const;
00095     operator double () const;
00096     operator const char * () const;
00097     operator const Fl_Image * () const;
00098     operator Fl_Date_Time () const;
00099 
00100     Fl_Variant_Type type() const { return m_type; }
00101     int size() const { return m_size; }
00102     void *data() const { return (void *)(variantData *)&m_data; }
00103 
00104     // ASSIGNMENT OPERATORS
00105     Fl_Variant& operator =(const Fl_Variant &C) {
00106         if (this == &C) return *this;
00107         set_data(C);
00108         return *this;
00109     }
00110 
00111     Fl_Variant& operator =(const char *s) {
00112         set_string(s);
00113         return *this;
00114     }
00115 
00116     Fl_Variant& operator =(const Fl_String &s) {
00117         set_string(s.c_str(), s.length());
00118         return *this;
00119     }
00120 
00121     Fl_Variant& operator =(int v) {
00122         set_int(v);
00123         return *this;
00124     }
00125 
00126     Fl_Variant& operator =(double v) {
00127         set_float(v);
00128         return *this;
00129     }
00130 
00131     Fl_Variant& operator =(Fl_Date_Time dt) {
00132         set_datetime(dt);
00133         return *this;
00134     }
00135 
00136     Fl_Variant& operator =(const Fl_Image *pm) {
00137         set_image_ptr(pm);
00138         return *this;
00139     }
00140 
00141 protected:
00142     void set_data(const Fl_Variant &C);
00143     void free_buffers();
00144 
00145 private:
00146     union variantData {
00147         int       intData;
00148         double    floatData;
00149         double    timeData;
00150         char      *stringData;
00151         void      *blobData;
00152         const Fl_Image *imagePtr;
00153     } m_data;
00154     int m_size;
00155     Fl_Variant_Type m_type;
00156 };
00157 
00158 #endif

Generated on Thu Jul 31 15:33:45 2003 for eFLTK by doxygen1.2.15