ClockWork DB CoreAPI 1.0.48
Abstract Time Series and Storage/Management Library
Loading...
Searching...
No Matches
csv_column.hpp
1#ifndef HAVE_TOM__CSV_COLUMN_HPP
2#define HAVE_TOM__CSV_COLUMN_HPP
3
4#include <tom-util/defines.hpp>
5#include <tom-util/scalar.hpp>
6
7namespace tom {
8
9 template <typename SCALAR_T>
10 class csv_column;
11
12 class TOM_UTIL_API named_ordinal_observation : public observation
13 {
14 public:
15 virtual ~named_ordinal_observation() { }
16 virtual named_ordinal_observation &operator=( const observation & ) = 0;
17 virtual const String &name() const = 0;
18 virtual const Int &position() const = 0;
19 virtual const String &image() const = 0;
20 };
21
22
23 template <typename SCALAR_T>
24 class TOM_UTIL_API csv_column : public named_ordinal_observation
25 {
26 public:
27
28 csv_column( const observation &name, const observation &pos,
29 const observation &nd, const observation& image)
30 : m_nd( nd ), m_position( pos ), m_name(name), m_image(image) {
31 if(typeid(Date) != typeid(SCALAR_T))
32 m_nd = nd;
33 else
34 m_nd = Date(nd, image);
35 }
36 virtual ~csv_column() { }
37
38 virtual named_ordinal_observation &operator=( const observation &rhs );
39
40 virtual
42 operator=( value_type v ) { m_value = v; return *this; }
43
44 virtual
45 bool
46 is_normal() const { return m_value.is_normal(); }
47
48 virtual tom::value_type flag() const;
49 virtual observation &clone() const
50 {
51 return *new csv_column( *this );
52 }
53
54 virtual observation &operator+=( const observation & );
55 virtual observation &operator-=( const observation & );
56 virtual observation &operator*=( const observation & );
57 virtual observation &operator/=( const observation & );
58
59 virtual bool operator<( const observation & ) const;
60 virtual bool operator<=( const observation & ) const;
61 virtual bool operator>( const observation & ) const;
62 virtual bool operator>=( const observation & ) const;
63
64 virtual bool operator==( const observation & ) const;
65 virtual bool operator!=( const observation & ) const;
66
67 virtual std::ostream &print( std::ostream & ) const;
68
69 virtual operator unsigned char() const;
70 virtual operator tom::value_types::string() const;
71 virtual operator short int() const;
72 virtual operator int() const;
73 virtual operator long int() const;
74 virtual operator unsigned short int() const;
75 virtual operator unsigned int() const;
76 virtual operator unsigned long int() const;
77 virtual operator float() const;
78 virtual operator double() const;
79 virtual operator bool() const;
80
81 inline
82 const SCALAR_T &value() const;
83
84 virtual const Int &position() const { return m_position; }
85 virtual const String &name() const { return m_name; }
86 virtual const String &image() const { return m_image; }
87
88 protected:
89 SCALAR_T m_value; // value of column
90 SCALAR_T m_nd; // value of column when missing
91 Int m_position; // ordinal position w/in the file...ZERO BASED
92 String m_name; // name of the column...USED to REGISTER US as VARIABLE :)
93 String m_image; // image of the column...USED to parse the value as DATE STRINGS
94
95 private:
96 // little helper to choose whether to use value or nd :)
97 // need both versions depending on const of calling method
98 const SCALAR_T &pickValue() const;
99 SCALAR_T &pickValue();
100
101 };
102
103 template <typename T>
106 {
107 if( tom::string("null") != tom::string(rhs) && tom::string("") != tom::string(rhs))
108 m_value = rhs;
109 else
110 m_value = T::HAS_NO_DATA;
111 return *this;
112 }
113
114
115 template <typename T>
116 const T &
117 csv_column<T>::pickValue() const
118 {
119 if ( m_value.flag() == tom::value_type::normal() )
120 return m_value;
121 else
122 return m_nd;
123 }
124 template <typename T>
125 T &
126 csv_column<T>::pickValue()
127 {
128 if ( m_value.flag() == tom::value_type::normal() )
129 return m_value;
130 else
131 return m_nd;
132 }
133
134 template <typename T>
135 const T &
136 csv_column<T>::value() const
137 { return pickValue(); }
138
139 template <typename T>
141 csv_column<T>::flag() const { return pickValue().flag(); }
142
143 template <typename T>
144 observation &
145 csv_column<T>::operator+=( const observation &rhs )
146 { m_value += rhs; return *this; }
147
148 template <typename T>
149 observation &
150 csv_column<T>::operator-=( const observation &rhs )
151 { m_value -= rhs; return *this; }
152
153 template <typename T>
154 observation &
155 csv_column<T>::operator*=( const observation &rhs )
156 { m_value *= rhs; return *this; }
157
158 template <typename T>
159 observation &
160 csv_column<T>::operator/=( const observation &rhs )
161 { m_value /= rhs; return *this; }
162
163 template <typename T>
164 bool
165 csv_column<T>::operator<( const observation &rhs ) const
166 { return pickValue() < rhs; }
167
168 template <typename T>
169 bool
170 csv_column<T>::operator<=( const observation &rhs ) const
171 { return pickValue() <= rhs; }
172
173 template <typename T>
174 bool
175 csv_column<T>::operator>( const observation &rhs ) const
176 { return pickValue() > rhs; }
177
178 template <typename T>
179 bool
180 csv_column<T>::operator>=( const observation &rhs ) const
181 { return pickValue() >= rhs; }
182
183 template <typename T>
184 bool
185 csv_column<T>::operator==( const observation &rhs ) const
186 { return pickValue() == rhs; }
187
188 template <typename T>
189 bool
190 csv_column<T>::operator!=( const observation &rhs ) const
191 { return pickValue() != rhs; }
192
193 template <typename T>
194 std::ostream &
195 csv_column<T>::print( std::ostream &os ) const
196 { return pickValue().print(os); }
197
198 template <typename T>
199 csv_column<T>::operator tom::value_types::string() const
200 { return pickValue().operator tom::value_types::string(); }
201 template <typename T>
202 csv_column<T>::operator unsigned char() const
203 { return pickValue().operator unsigned char(); }
204
205 template <typename T>
206 csv_column<T>::operator short int() const
207 { return pickValue().operator short int(); }
208
209 template <typename T>
210 csv_column<T>::operator int() const
211 { return pickValue().operator int(); }
212
213 template <typename T>
214 csv_column<T>::operator long int() const
215 { return pickValue().operator long int(); }
216
217 template <typename T>
218 csv_column<T>::operator unsigned short int() const
219 { return pickValue().operator unsigned short int(); }
220
221 template <typename T>
222 csv_column<T>::operator unsigned int() const
223 { return pickValue().operator unsigned int(); }
224
225 template <typename T>
226 csv_column<T>::operator unsigned long int() const
227 { return pickValue().operator unsigned long int(); }
228
229 template <typename T>
230 csv_column<T>::operator float() const
231 { return pickValue().operator float(); }
232
233 template <typename T>
234 csv_column<T>::operator double() const
235 { return pickValue().operator double(); }
236
237 template <typename T>
238 csv_column<T>::operator bool() const
239 { return pickValue().operator bool(); }
240
241
242} // end tom namespace
243
244#endif
Definition dates.hpp:22
Definition string.hpp:15
Definition csv_column.hpp:25
Definition csv_column.hpp:13
Definition observation.hpp:13
Definition value_types.hpp:96
Definition value_types.hpp:144