1 |
auterman |
1.1 |
#ifndef TABLE_H
|
2 |
|
|
#define TABLE_H
|
3 |
|
|
|
4 |
|
|
#include <iostream>
|
5 |
|
|
#include <iomanip>
|
6 |
|
|
|
7 |
|
|
#include "column.h"
|
8 |
|
|
|
9 |
|
|
class TTable {
|
10 |
|
|
public:
|
11 |
|
|
enum TableStyle {Plain, TeX};
|
12 |
|
|
|
13 |
|
|
TTable():_header(""),_delimiter(" "),_caption(""),_style(Plain){};
|
14 |
|
|
TTable(std::string h):_header(h),_delimiter(" "),_caption(""),_style(Plain){};
|
15 |
|
|
TTable(std::string h, std::string d):_header(h),_delimiter(d),_caption(""),_style(Plain){};
|
16 |
|
|
TTable(std::string h,std::string d,std::string c):_header(h),_delimiter(d),_caption(c),_style(Plain){};
|
17 |
|
|
virtual ~TTable(){
|
18 |
|
|
for (std::vector<TColumnBase*>::iterator it=_table.begin(); it!=_table.end(); ++it) delete *it;
|
19 |
|
|
_table.clear();};
|
20 |
|
|
template <class T> void AddColumn(std::string header){_table.push_back(new TColumn<T>(header));};
|
21 |
|
|
template <class T> void Set(unsigned idx,const T &value){
|
22 |
|
|
_table.at(idx)->Add(new T(value));};
|
23 |
|
|
template <class T> void Set( unsigned x, unsigned y, T value){static_cast<TColumn<T> >(_table.at(x))->Set(y,value);};
|
24 |
|
|
|
25 |
|
|
template <class T1> void Fill(const T1 &v1){
|
26 |
|
|
Fill<T1,short>(v1,0);}
|
27 |
|
|
template <class T1, class T2> void Fill(const T1 &v1, const T2 &v2){
|
28 |
|
|
Fill<T1,T2,short>(v1,v2,0);}
|
29 |
|
|
template <class T1, class T2, class T3> void Fill(const T1 &v1, const T2 &v2, const T3 &v3){
|
30 |
|
|
Fill<T1,T2,T3,short>(v1,v2,v3,0);}
|
31 |
|
|
template <class T1, class T2, class T3, class T4> void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4){
|
32 |
|
|
Fill<T1,T2,T3,T4,short>(v1,v2,v3,v4,0);}
|
33 |
|
|
template <class T1, class T2, class T3, class T4, class T5> void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5){
|
34 |
|
|
Fill<T1,T2,T3,T4,T5,short>(v1,v2,v3,v4,v5,0);}
|
35 |
|
|
template <class T1, class T2, class T3, class T4, class T5, class T6> void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6){
|
36 |
|
|
Fill<T1,T2,T3,T4,T5,T6,short>(v1,v2,v3,v4,v5,v6,0);}
|
37 |
|
|
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7> void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7){
|
38 |
|
|
Fill<T1,T2,T3,T4,T5,T6,T7,short>(v1,v2,v3,v4,v5,v6,v7,0);}
|
39 |
|
|
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8> void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8){
|
40 |
|
|
Fill<T1,T2,T3,T4,T5,T6,T7,T8,short>(v1,v2,v3,v4,v5,v6,v7,v8,0);}
|
41 |
|
|
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9> void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9){
|
42 |
|
|
Fill<T1,T2,T3,T4,T5,T6,T7,T8,T9,short>(v1,v2,v3,v4,v5,v6,v7,v8,v9,0);}
|
43 |
|
|
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10>
|
44 |
|
|
void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9, const T10 &v10){
|
45 |
|
|
Fill<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,short>(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,0);}
|
46 |
|
|
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11>
|
47 |
|
|
void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9, const T10 &v10, const T11 &v11){
|
48 |
|
|
Fill<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,short>(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,0);}
|
49 |
|
|
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12>
|
50 |
|
|
void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9, const T10 &v10, const T11 &v11, const T12 &v12){
|
51 |
|
|
Fill<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,short>(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,0);}
|
52 |
|
|
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13>
|
53 |
|
|
void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9, const T10 &v10, const T11 &v11, const T12 &v12, const T13 &v13){
|
54 |
|
|
Fill<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,short>(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,0);}
|
55 |
|
|
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14>
|
56 |
|
|
void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9, const T10 &v10, const T11 &v11, const T12 &v12, const T13 &v13, const T14 &v14){
|
57 |
|
|
Fill<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,short>(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,0);}
|
58 |
|
|
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14, class T15>
|
59 |
|
|
void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9, const T10 &v10, const T11 &v11, const T12 &v12, const T13 &v13, const T14 &v14, const T15 &v15){
|
60 |
|
|
Fill<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,short>(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,0);}
|
61 |
|
|
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14, class T15, class T16>
|
62 |
|
|
void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9, const T10 &v10, const T11 &v11, const T12 &v12, const T13 &v13, const T14 &v14, const T15 &v15, const T16 &v16){
|
63 |
|
|
Fill<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,short>(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,0);}
|
64 |
|
|
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14, class T15, class T16, class T17>
|
65 |
|
|
void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9, const T10 &v10, const T11 &v11, const T12 &v12, const T13 &v13, const T14 &v14, const T15 &v15, const T16 &v16, const T17 &v17){
|
66 |
|
|
Fill<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,short>(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,v17,0);}
|
67 |
|
|
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14, class T15, class T16, class T17, class T18>
|
68 |
|
|
void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9, const T10 &v10, const T11 &v11, const T12 &v12, const T13 &v13, const T14 &v14, const T15 &v15, const T16 &v16, const T17 &v17, const T18 &v18){
|
69 |
|
|
Fill<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,short>(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,v17,v18,0);}
|
70 |
|
|
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14, class T15, class T16, class T17, class T18, class T19>
|
71 |
|
|
void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9, const T10 &v10, const T11 &v11, const T12 &v12, const T13 &v13, const T14 &v14, const T15 &v15, const T16 &v16, const T17 &v17, const T18 &v18, const T19 &v19){
|
72 |
|
|
Fill<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,short>(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,v17,v18,v19,0);}
|
73 |
|
|
|
74 |
|
|
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14, class T15, class T16, class T17, class T18, class T19, class T20>
|
75 |
|
|
void Fill(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9, const T10 &v10, const T11 &v11, const T12 &v12, const T13 &v13, const T14 &v14, const T15 &v15, const T16 &v16, const T17 &v17, const T18 &v18, const T19 &v19, const T20 &v20){
|
76 |
|
|
//Elements are copies; TColumn takes care of freeing the memory
|
77 |
|
|
if (_table.size()>0) _table.at(0)->Add(new T1(v1));
|
78 |
|
|
if (_table.size()>1) _table.at(1)->Add(new T2(v2));
|
79 |
|
|
if (_table.size()>2) _table.at(2)->Add(new T3(v3));
|
80 |
|
|
if (_table.size()>3) _table.at(3)->Add(new T4(v4));
|
81 |
|
|
if (_table.size()>4) _table.at(4)->Add(new T5(v5));
|
82 |
|
|
if (_table.size()>5) _table.at(5)->Add(new T6(v6));
|
83 |
|
|
if (_table.size()>6) _table.at(6)->Add(new T7(v7));
|
84 |
|
|
if (_table.size()>7) _table.at(7)->Add(new T8(v8));
|
85 |
|
|
if (_table.size()>8) _table.at(8)->Add(new T9(v9));
|
86 |
|
|
if (_table.size()>9) _table.at(9)->Add(new T10(v10));
|
87 |
|
|
if (_table.size()>10) _table.at(10)->Add(new T11(v11));
|
88 |
|
|
if (_table.size()>11) _table.at(11)->Add(new T12(v12));
|
89 |
|
|
if (_table.size()>12) _table.at(12)->Add(new T13(v13));
|
90 |
|
|
if (_table.size()>13) _table.at(13)->Add(new T14(v14));
|
91 |
|
|
if (_table.size()>14) _table.at(14)->Add(new T15(v15));
|
92 |
|
|
if (_table.size()>15) _table.at(15)->Add(new T16(v16));
|
93 |
|
|
if (_table.size()>16) _table.at(16)->Add(new T17(v17));
|
94 |
|
|
if (_table.size()>17) _table.at(17)->Add(new T18(v18));
|
95 |
|
|
if (_table.size()>18) _table.at(18)->Add(new T19(v19));
|
96 |
|
|
if (_table.size()>19) _table.at(19)->Add(new T20(v20));
|
97 |
|
|
};
|
98 |
|
|
unsigned Length() const {
|
99 |
|
|
unsigned length=0;
|
100 |
|
|
for (std::vector<TColumnBase*>::const_iterator it=_table.begin();it!=_table.end();++it)
|
101 |
|
|
if ((*it)->Size()>length) length = (*it)->Size();
|
102 |
|
|
return length;
|
103 |
|
|
};
|
104 |
|
|
const std::vector<TColumnBase*> * GetTable() const {return &_table;};
|
105 |
|
|
std::string GetHeader() const{return _header;};
|
106 |
|
|
std::string GetDelimiter() const{return _delimiter;};
|
107 |
|
|
std::string GetCaption() const{return _caption;};
|
108 |
|
|
void SetHeader(const std::string s){_header=s;};
|
109 |
|
|
void SetDelimiter(const std::string s){_delimiter=s;};
|
110 |
|
|
void SetCaption(const std::string s){_caption=s;};
|
111 |
|
|
void SetStyle(TableStyle s){_style=s;};
|
112 |
|
|
TableStyle GetStyle() const {return _style;};
|
113 |
|
|
void SetPrecision(unsigned i, unsigned p){_table[i]->SetPrecision(p);};
|
114 |
|
|
void SetPrecision(unsigned p){
|
115 |
|
|
for (std::vector<TColumnBase*>::const_iterator it=_table.begin();it!=_table.end();++it)
|
116 |
|
|
(*it)->SetPrecision(p);};
|
117 |
|
|
|
118 |
|
|
friend std::ostream& operator<<( std::ostream& os, const TTable& tab );
|
119 |
|
|
|
120 |
|
|
protected:
|
121 |
|
|
std::string _header, _delimiter, _caption;
|
122 |
|
|
std::vector<TColumnBase*> _table;
|
123 |
|
|
TableStyle _style;
|
124 |
|
|
};
|
125 |
|
|
|
126 |
|
|
|
127 |
|
|
#endif
|