ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/auterman/SusyScan/Limits/table.h
Revision: 1.1
Committed: Wed Jan 26 14:37:51 2011 UTC (14 years, 3 months ago) by auterman
Content type: text/plain
Branch point for: Limits, MAIN
Log Message:
Initial revision

File Contents

# User Rev Content
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