00001
00002 #ifndef XSIL_TABLE_HH
00003 #define XSIL_TABLE_HH
00004
00005 #include "xsil/xobj.hh"
00006 #include "xsil/stream.hh"
00007 #include <list>
00008 #include <string>
00009
00010 namespace xsil {
00011 class column;
00012 class Xwriter;
00013
00020 class table : public xobj {
00021 public:
00025 table(void);
00026
00030 table(const char* Name, const char* Type=0);
00031
00035 table(const table& x);
00036
00040 virtual ~table(void);
00041
00046 void Spew(Xwriter& xout) const;
00047
00052 virtual table* Clone(void) const;
00053
00057 bool empty(void) const;
00058
00063 const char* getObjType(void) const;
00064
00069 const char* getUnit(void) const;
00070
00078 column* addColumn(const char* Name, const char* Type=0,
00079 const char* Unit=0);
00080
00086 column* addColumn(const column& col);
00087
00092 column& refColumn(const char* name);
00093
00099 const column& refColumn(const char* name) const;
00100
00105 Stream& refStream(void);
00106
00111 const Stream& refStream(void) const;
00112
00117 void setStream(const Stream& istr);
00118
00123 void setUnit(const char* Unit);
00124
00125 private:
00126 typedef std::list<column> ColumnList;
00127 typedef ColumnList::const_iterator const_column_iterator;
00128 typedef ColumnList::iterator column_iterator;
00129
00130 private:
00131 std::string mUnit;
00132 ColumnList mColumn;
00133 Stream mData;
00134 };
00135
00136
00137 inline bool
00138 xsil::table::empty(void) const {
00139 return mData.empty();
00140 }
00141
00142 inline const char*
00143 xsil::table::getUnit(void) const {
00144 return mUnit.c_str();
00145 }
00146
00147
00148 inline xsil::Stream&
00149 xsil::table::refStream(void) {
00150 return mData;
00151 }
00152
00153 inline const xsil::Stream&
00154 xsil::table::refStream(void) const {
00155 return mData;
00156 }
00157
00158 }
00159
00160 #endif // XSIL_TABLE_HH