00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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
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
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
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