00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef IXE_ITEM_H
00026 #define IXE_ITEM_H
00027
00028
00029 #include "platform.h"
00030
00031
00032 #include <cstdlib>
00033 #include <iostream>
00034 #include <string>
00035
00036
00037 #include "include/ixe.h"
00038 #include "include/sql.h"
00039
00040 namespace IXE {
00041
00042
00048
00049
00050 class Item {
00051
00052 public:
00053 virtual ~Item() {}
00054 virtual Size packSize() = 0;
00055 virtual byte* value() const = 0;
00056 # if 0
00057 virtual Item const & operator =(char const *newval) = 0;
00058 # endif
00059 template <typename T>
00060 T& operator *() { return (T)(*value()); }
00061
00062 template <typename T>
00063 operator T() { return (T)(*value()); }
00064
00065 template <typename T>
00066 operator T*() { return *(T**)value(); }
00067 };
00068
00069 #if 0
00070 template <class T>
00071 T convert(char const *newval) { return (T)(newval); }
00072
00073 template <>
00074 int convert<int>(char const *newval) { return atoi(newval); }
00075
00076 template <>
00077 long convert<long>(char const *newval) { return atol(newval); }
00078
00079 template <>
00080 float convert<float>(char const *newval) { return (float)atof(newval); }
00081
00082 template <>
00083 double convert<double>(char const *newval) { return atof(newval); }
00084 #endif
00085
00086 template <class T>
00087 class ItemOf : public Item {
00088 public:
00089 T value_;
00090
00091 ItemOf() {}
00092 ItemOf(T const value) : value_(value) { }
00093 virtual ~ItemOf() {}
00094 Size packSize() { return sizeof(T); }
00095 # if 0
00096 virtual Item const & operator =(char const *newval) {
00097 value_ = convert<T>(newval);
00098 return *this;
00099 }
00100 # endif
00101 T const & operator =(T const &newval) { return value_ = newval; }
00102 T & operator *() { return value_; }
00103 virtual byte* value() const { return (byte*)&value_; }
00104 };
00105
00106 template<class T>
00107 std::ostream& operator<< (std::ostream& s, const ItemOf<T>& t) {
00108 return s << *t;
00109 }
00110
00111 }
00112
00113
00114 # ifndef NON_TEMPLATE
00115 # include "item.cpp"
00116 # endif
00117
00118 #endif // IXE_ITEM_H