NumeRe v1.1.4
NumeRe: Framework für Numerische Rechnungen
tablecolumnimpl.hpp
Go to the documentation of this file.
1/*****************************************************************************
2 NumeRe: Framework fuer Numerische Rechnungen
3 Copyright (C) 2021 Erik Haenel et al.
4
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17******************************************************************************/
18
19#ifndef TABLECOLUMNIMPL_HPP
20#define TABLECOLUMNIMPL_HPP
21
22#include "tablecolumn.hpp"
23
24// Forward declaration for ValueColumn::convert()
25class StringColumn;
26
32{
33 protected:
34 std::vector<mu::value_type> m_data;
35
36 public:
42 {
44 }
45
53 ValueColumn(size_t nElem) : ValueColumn()
54 {
55 resize(nElem);
56 }
57
58 virtual ~ValueColumn() {}
59
60 virtual std::string getValueAsString(size_t elem) const override;
61 virtual std::string getValueAsInternalString(size_t elem) const override;
62 virtual std::string getValueAsParserString(size_t elem) const override;
63 virtual std::string getValueAsStringLiteral(size_t elem) const override;
64 virtual mu::value_type getValue(size_t elem) const override;
65
66 virtual void setValue(size_t elem, const std::string& sValue) override;
67 virtual void setValue(size_t elem, const mu::value_type& vValue) override;
68
69 virtual ValueColumn* copy(const VectorIndex& idx) const override;
70 virtual void assign(const TableColumn* column) override;
71 virtual void insert(const VectorIndex& idx, const TableColumn* column) override;
72 virtual void deleteElements(const VectorIndex& idx) override;
73
74 virtual void insertElements(size_t pos, size_t elem) override;
75 virtual void appendElements(size_t elem) override;
76 virtual void removeElements(size_t pos, size_t elem) override;
77 virtual void resize(size_t elem) override;
78
79 virtual int compare(int i, int j, bool unused) const override;
80 virtual bool isValid(int elem) const override;
81 virtual bool asBool(int elem) const override;
82
90 virtual size_t getBytes() const override
91 {
92 return size() * sizeof(mu::value_type) + m_sHeadLine.length() * sizeof(char);
93 }
94
102 virtual size_t size() const override
103 {
104 return m_data.size();
105 }
106
107 virtual TableColumn* convert(ColumnType type = TableColumn::TYPE_NONE) override;
108};
109
110
116{
117 private:
118 std::vector<double> m_data;
119
120 public:
126 {
128 }
129
138 {
139 resize(nElem);
140 }
141
142 virtual ~DateTimeColumn() {}
143
144 virtual std::string getValueAsString(size_t elem) const override;
145 virtual std::string getValueAsInternalString(size_t elem) const override;
146 virtual std::string getValueAsParserString(size_t elem) const override;
147 virtual std::string getValueAsStringLiteral(size_t elem) const override;
148 virtual mu::value_type getValue(size_t elem) const override;
149
150 virtual void setValue(size_t elem, const std::string& sValue) override;
151 virtual void setValue(size_t elem, const mu::value_type& vValue) override;
152
153 virtual DateTimeColumn* copy(const VectorIndex& idx) const override;
154 virtual void assign(const TableColumn* column) override;
155 virtual void insert(const VectorIndex& idx, const TableColumn* column) override;
156 virtual void deleteElements(const VectorIndex& idx) override;
157
158 virtual void insertElements(size_t pos, size_t elem) override;
159 virtual void appendElements(size_t elem) override;
160 virtual void removeElements(size_t pos, size_t elem) override;
161 virtual void resize(size_t elem) override;
162
163 virtual int compare(int i, int j, bool unused) const override;
164 virtual bool isValid(int elem) const override;
165 virtual bool asBool(int elem) const override;
166
174 virtual size_t getBytes() const override
175 {
176 return size() * sizeof(double) + m_sHeadLine.length() * sizeof(char);
177 }
178
186 virtual size_t size() const override
187 {
188 return m_data.size();
189 }
190
191 virtual TableColumn* convert(ColumnType type = TableColumn::TYPE_NONE) override;
192};
193
194
200{
201 private:
203 {
206 LOGICAL_TRUE = 1
207 };
208
209 std::vector<LogicalValue> m_data;
210
211 public:
217 {
219 }
220
228 LogicalColumn(size_t nElem) : LogicalColumn()
229 {
230 resize(nElem);
231 }
232
233 virtual ~LogicalColumn() {}
234
235 virtual std::string getValueAsString(size_t elem) const override;
236 virtual std::string getValueAsInternalString(size_t elem) const override;
237 virtual std::string getValueAsParserString(size_t elem) const override;
238 virtual std::string getValueAsStringLiteral(size_t elem) const override;
239 virtual mu::value_type getValue(size_t elem) const override;
240
241 virtual void setValue(size_t elem, const std::string& sValue) override;
242 virtual void setValue(size_t elem, const mu::value_type& vValue) override;
243
244 virtual LogicalColumn* copy(const VectorIndex& idx) const override;
245 virtual void assign(const TableColumn* column) override;
246 virtual void insert(const VectorIndex& idx, const TableColumn* column) override;
247 virtual void deleteElements(const VectorIndex& idx) override;
248
249 virtual void insertElements(size_t pos, size_t elem) override;
250 virtual void appendElements(size_t elem) override;
251 virtual void removeElements(size_t pos, size_t elem) override;
252 virtual void resize(size_t elem) override;
253
254 virtual int compare(int i, int j, bool unused) const override;
255 virtual bool isValid(int elem) const override;
256 virtual bool asBool(int elem) const override;
257
265 virtual size_t getBytes() const override
266 {
267 return size() * sizeof(LogicalValue) + m_sHeadLine.length() * sizeof(char);
268 }
269
277 virtual size_t size() const override
278 {
279 return m_data.size();
280 }
281
282 virtual TableColumn* convert(ColumnType type = TableColumn::TYPE_NONE) override;
283};
284
285
291{
292 private:
293 std::vector<std::string> m_data;
294
295 public:
301 {
303 }
304
312 StringColumn(size_t nElem) : StringColumn()
313 {
314 resize(nElem);
315 }
316
317 virtual ~StringColumn() {}
318
319 virtual std::string getValueAsString(size_t elem) const override;
320 virtual std::string getValueAsInternalString(size_t elem) const override;
321 virtual std::string getValueAsParserString(size_t elem) const override;
322 virtual std::string getValueAsStringLiteral(size_t elem) const override;
323 virtual mu::value_type getValue(size_t elem) const override;
324
325 virtual void setValue(size_t elem, const std::string& sValue) override;
326 virtual void setValue(size_t elem, const mu::value_type& vValue) override;
327
328 virtual StringColumn* copy(const VectorIndex& idx) const override;
329 virtual void assign(const TableColumn* column) override;
330 virtual void insert(const VectorIndex& idx, const TableColumn* column) override;
331 virtual void deleteElements(const VectorIndex& idx) override;
332
333 virtual void insertElements(size_t pos, size_t elem);
334 virtual void appendElements(size_t elem);
335 virtual void removeElements(size_t pos, size_t elem);
336 virtual void resize(size_t elem) override;
337
338 virtual int compare(int i, int j, bool caseinsensitive) const override;
339 virtual bool isValid(int elem) const override;
340 virtual bool asBool(int elem) const override;
341
342 virtual size_t getBytes() const override;
343
351 virtual size_t size() const override
352 {
353 return m_data.size();
354 }
355
356 virtual TableColumn* convert(ColumnType type = TableColumn::TYPE_NONE) override;
357};
358
359
365{
366 private:
367 enum {CATEGORICAL_NAN = -1};
368
369 std::vector<int> m_data;
370 std::vector<std::string> m_categories;
371
372 public:
378 {
380 }
381
390 {
391 resize(nElem);
392 }
393
395
396 virtual std::string getValueAsString(size_t elem) const override;
397 virtual std::string getValueAsInternalString(size_t elem) const override;
398 virtual std::string getValueAsParserString(size_t elem) const override;
399 virtual std::string getValueAsStringLiteral(size_t elem) const override;
400 virtual mu::value_type getValue(size_t elem) const override;
401
402 virtual void setValue(size_t elem, const std::string& sValue) override;
403 virtual void setValue(size_t elem, const mu::value_type& vValue) override;
404
405 virtual CategoricalColumn* copy(const VectorIndex& idx) const override;
406 virtual void assign(const TableColumn* column) override;
407 virtual void insert(const VectorIndex& idx, const TableColumn* column) override;
408 virtual void deleteElements(const VectorIndex& idx) override;
409
410 virtual void insertElements(size_t pos, size_t elem);
411 virtual void appendElements(size_t elem);
412 virtual void removeElements(size_t pos, size_t elem);
413 virtual void resize(size_t elem) override;
414
415 virtual int compare(int i, int j, bool caseinsensitive) const override;
416 virtual bool isValid(int elem) const override;
417 virtual bool asBool(int elem) const override;
418
419 virtual size_t getBytes() const override;
420
428 virtual size_t size() const override
429 {
430 return m_data.size();
431 }
432
433 virtual TableColumn* convert(ColumnType type = TableColumn::TYPE_NONE) override;
434
443 const std::vector<std::string>& getCategories() const
444 {
445 return m_categories;
446 }
447
448 void setCategories(const std::vector<std::string>& vCategories);
449};
450
451
452void convert_if_empty(TblColPtr& col, size_t colNo, TableColumn::ColumnType type);
453bool convert_if_needed(TblColPtr& col, size_t colNo, TableColumn::ColumnType type);
454void convert_for_overwrite(TblColPtr& col, size_t colNo, TableColumn::ColumnType type);
455
456
457#endif // TABLECOLUMNIMPL_HPP
458
459
460
461
A table column containing categorical values.
virtual std::string getValueAsInternalString(size_t elem) const override
Returns the contents as an internal string (i.e. without quotation marks).
CategoricalColumn()
Default constructor. Sets only the column's type.
virtual bool asBool(int elem) const override
Interprets the value as a boolean.
virtual void assign(const TableColumn *column) override
Assign another TableColumn's contents to this table column.
virtual size_t getBytes() const override
Calculates the number of bytes occupied by this column.
virtual void removeElements(size_t pos, size_t elem)
Removes the selected number of elements from the column and moving all following items forward.
std::vector< std::string > m_categories
virtual mu::value_type getValue(size_t elem) const override
Returns always NaN, because this conversion is not possible.
virtual std::string getValueAsParserString(size_t elem) const override
Returns the contents as parser string (i.e. with quotation marks).
virtual void insertElements(size_t pos, size_t elem)
Inserts as many as the selected elements at the desired position, if the column is already larger tha...
virtual void resize(size_t elem) override
Resizes the internal array.
virtual void setValue(size_t elem, const std::string &sValue) override
Set a single string value.
void setCategories(const std::vector< std::string > &vCategories)
Replaces the internal categories with new categories.
virtual std::string getValueAsString(size_t elem) const override
Returns the selected value or an empty string, if the value does not exist.
virtual void insert(const VectorIndex &idx, const TableColumn *column) override
Insert the contents of the passed column at the specified positions.
virtual void deleteElements(const VectorIndex &idx) override
Delete the specified elements.
virtual int compare(int i, int j, bool caseinsensitive) const override
Returns 0, if both elements are equal, -1 if element i is smaller than element j and 1 otherwise.
virtual ~CategoricalColumn()
virtual size_t size() const override
Returns the number of elements in this column (will also count invalid ones).
virtual std::string getValueAsStringLiteral(size_t elem) const override
Returns the contents as parser string (i.e. with quotation marks).
CategoricalColumn(size_t nElem)
Generalized constructor. Will prepare a column with the specified size.
virtual bool isValid(int elem) const override
Returns true, if the selected element is a valid value.
std::vector< int > m_data
virtual TableColumn * convert(ColumnType type=TableColumn::TYPE_NONE) override
Returns the contents of this column converted to the new column type. Might even return itself.
const std::vector< std::string > & getCategories() const
Returns the list of internal categories to be used within expressions and code.
virtual void appendElements(size_t elem)
Appends the number of elements.
A table column containing numerical values formatted as dates and times.
DateTimeColumn(size_t nElem)
Generalized constructor. Will prepare a column with the specified size.
virtual size_t size() const override
Return the number of elements in this column (will also count invalid ones).
virtual bool isValid(int elem) const override
Returns true, if the selected element is a valid value.
virtual std::string getValueAsStringLiteral(size_t elem) const override
Returns the contents as parser string (i.e. with quotation marks).
virtual int compare(int i, int j, bool unused) const override
Returns 0, if both elements are equal, -1 if element i is smaller than element j and 1 otherwise.
virtual void setValue(size_t elem, const std::string &sValue) override
Set a single string value.
virtual bool asBool(int elem) const override
Interprets the value as a boolean.
virtual void insertElements(size_t pos, size_t elem) override
Inserts as many as the selected elements at the desired position, if the column is already larger tha...
virtual mu::value_type getValue(size_t elem) const override
Returns the selected value as a numerical type or an invalid value, if it does not exist.
virtual size_t getBytes() const override
Return the number of bytes occupied by this column.
virtual std::string getValueAsString(size_t elem) const override
Returns the selected value as a string or a default value, if it does not exist.
virtual TableColumn * convert(ColumnType type=TableColumn::TYPE_NONE) override
Returns the contents of this column converted to the new column type. Might even return itself.
virtual std::string getValueAsInternalString(size_t elem) const override
Returns the contents as an internal string (i.e. without quotation marks).
DateTimeColumn()
Default constructor. Sets only the column's type.
virtual void removeElements(size_t pos, size_t elem) override
Removes the selected number of elements from the column and moving all following items forward.
virtual void resize(size_t elem) override
Resizes the internal array.
std::vector< double > m_data
virtual void insert(const VectorIndex &idx, const TableColumn *column) override
Insert the contents of the passed column at the specified positions.
virtual void appendElements(size_t elem) override
Appends the number of elements.
virtual std::string getValueAsParserString(size_t elem) const override
Returns the contents as parser string (i.e. with quotation marks).
virtual void assign(const TableColumn *column) override
Assign another TableColumn's contents to this table column.
virtual void deleteElements(const VectorIndex &idx) override
Delete the specified elements.
virtual ~DateTimeColumn()
A table column containing logical values.
virtual std::string getValueAsInternalString(size_t elem) const override
Returns the contents as an internal string (i.e. without quotation marks).
virtual mu::value_type getValue(size_t elem) const override
Returns the selected value as a numerical type or an invalid value, if it does not exist.
virtual void insert(const VectorIndex &idx, const TableColumn *column) override
Insert the contents of the passed column at the specified positions.
virtual ~LogicalColumn()
virtual std::string getValueAsStringLiteral(size_t elem) const override
Returns the contents as parser string (i.e. without quotation marks).
virtual void appendElements(size_t elem) override
Appends the number of elements.
virtual TableColumn * convert(ColumnType type=TableColumn::TYPE_NONE) override
Returns the contents of this column converted to the new column type. Might even return itself.
virtual void setValue(size_t elem, const std::string &sValue) override
Set a single string value.
virtual std::string getValueAsParserString(size_t elem) const override
Returns the contents as parser string (i.e. without quotation marks).
virtual void assign(const TableColumn *column) override
Assign another TableColumn's contents to this table column.
virtual bool asBool(int elem) const override
Interprets the value as a boolean.
virtual size_t size() const override
Return the number of elements in this column (will also count invalid ones).
virtual void removeElements(size_t pos, size_t elem) override
Removes the selected number of elements from the column and moving all following items forward.
virtual void insertElements(size_t pos, size_t elem) override
Inserts as many as the selected elements at the desired position, if the column is already larger tha...
virtual int compare(int i, int j, bool unused) const override
Returns 0, if both elements are equal, -1 if element i is smaller than element j and 1 otherwise.
LogicalColumn(size_t nElem)
Generalized constructor. Will prepare a column with the specified size.
virtual std::string getValueAsString(size_t elem) const override
Returns the selected value as a string or a default value, if it does not exist.
virtual void deleteElements(const VectorIndex &idx) override
Delete the specified elements.
virtual size_t getBytes() const override
Return the number of bytes occupied by this column.
virtual void resize(size_t elem) override
Resizes the internal array.
LogicalColumn()
Default constructor. Sets only the column's type.
virtual bool isValid(int elem) const override
Returns true, if the selected element is a valid value.
std::vector< LogicalValue > m_data
A table column containing only strings as values.
virtual std::string getValueAsString(size_t elem) const override
Returns the selected value or an empty string, if the value does not exist.
virtual std::string getValueAsStringLiteral(size_t elem) const override
Returns the contents as parser string (i.e. with quotation marks).
virtual bool asBool(int elem) const override
Interprets the value as a boolean.
virtual std::string getValueAsParserString(size_t elem) const override
Returns the contents as parser string (i.e. with quotation marks).
virtual void insertElements(size_t pos, size_t elem)
Inserts as many as the selected elements at the desired position, if the column is already larger tha...
StringColumn(size_t nElem)
Generalized constructor. Will prepare a column with the specified size.
virtual void deleteElements(const VectorIndex &idx) override
Delete the specified elements.
virtual ~StringColumn()
virtual size_t size() const override
Returns the number of elements in this column (will also count invalid ones).
virtual std::string getValueAsInternalString(size_t elem) const override
Returns the contents as an internal string (i.e. without quotation marks).
virtual int compare(int i, int j, bool caseinsensitive) const override
Returns 0, if both elements are equal, -1 if element i is smaller than element j and 1 otherwise.
virtual bool isValid(int elem) const override
Returns true, if the selected element is a valid value.
std::vector< std::string > m_data
StringColumn()
Default constructor. Sets only the column's type.
virtual size_t getBytes() const override
Calculates the number of bytes occupied by this column.
virtual void resize(size_t elem) override
Resizes the internal array.
virtual void appendElements(size_t elem)
Appends the number of elements.
virtual mu::value_type getValue(size_t elem) const override
Returns always NaN, because this conversion is not possible.
virtual TableColumn * convert(ColumnType type=TableColumn::TYPE_NONE) override
Returns the contents of this column converted to the new column type. Might even return itself.
virtual void setValue(size_t elem, const std::string &sValue) override
Set a single string value.
virtual void insert(const VectorIndex &idx, const TableColumn *column) override
Insert the contents of the passed column at the specified positions.
virtual void assign(const TableColumn *column) override
Assign another TableColumn's contents to this table column.
virtual void removeElements(size_t pos, size_t elem)
Removes the selected number of elements from the column and moving all following items forward.
A table column containing only numerical values.
virtual bool asBool(int elem) const override
Interprets the value as a boolean.
virtual int compare(int i, int j, bool unused) const override
Returns 0, if both elements are equal, -1 if element i is smaller than element j and 1 otherwise.
virtual void deleteElements(const VectorIndex &idx) override
Delete the specified elements.
virtual void appendElements(size_t elem) override
Appends the number of elements.
virtual std::string getValueAsString(size_t elem) const override
Returns the selected value as a string or a default value, if it does not exist.
ValueColumn()
Default constructor. Sets only the type of the column.
ValueColumn(size_t nElem)
Generalized constructor. Will prepare a column with the specified size.
virtual size_t getBytes() const override
Return the number of bytes occupied by this column.
virtual std::string getValueAsParserString(size_t elem) const override
Returns the contents as parser string (i.e. without quotation marks).
virtual TableColumn * convert(ColumnType type=TableColumn::TYPE_NONE) override
Returns the contents of this column converted to the new column type. Might even return itself.
virtual std::string getValueAsStringLiteral(size_t elem) const override
Returns the contents as parser string (i.e. without quotation marks).
std::vector< mu::value_type > m_data
virtual void setValue(size_t elem, const std::string &sValue) override
Set a single string value.
virtual void insert(const VectorIndex &idx, const TableColumn *column) override
Insert the contents of the passed column at the specified positions.
virtual void insertElements(size_t pos, size_t elem) override
Inserts as many as the selected elements at the desired position, if the column is already larger tha...
virtual mu::value_type getValue(size_t elem) const override
Returns the selected value as a numerical type or an invalid value, if it does not exist.
virtual std::string getValueAsInternalString(size_t elem) const override
Returns the contents as an internal string (i.e. without quotation marks).
virtual bool isValid(int elem) const override
Returns true, if the selected element is a valid value.
virtual size_t size() const override
Return the number of elements in this column (will also count invalid ones).
virtual void resize(size_t elem) override
Resizes the internal array.
virtual void assign(const TableColumn *column) override
Assign another TableColumn's contents to this table column.
virtual void removeElements(size_t pos, size_t elem) override
Removes the selected number of elements from the column and moving all following items forward.
virtual ~ValueColumn()
This class abstracts all the index logics, i.e. the logical differences between single indices and in...
Definition: structures.hpp:42
MUP_BASETYPE value_type
The numeric datatype used by the parser.
Definition: muParserDef.h:251
Abstract table column, which allows using it to compose the data table in each Memory instance.
Definition: tablecolumn.hpp:34
TableColumn * copy() const
Simplification wrapper around the indiced copy method to copy the whole column.
ColumnType m_type
Definition: tablecolumn.hpp:49
std::string m_sHeadLine
Definition: tablecolumn.hpp:48
std::unique_ptr< TableColumn > TblColPtr
Typedef for simplifying the usage of a smart pointer in combination with a TableColumn instance.
void convert_for_overwrite(TblColPtr &col, size_t colNo, TableColumn::ColumnType type)
This function deletes the contents of a column, if necessary, and creates a new column with the corre...
void convert_if_empty(TblColPtr &col, size_t colNo, TableColumn::ColumnType type)
Tries to convert a column if the column does not contain any data (with the exception of the header).
bool convert_if_needed(TblColPtr &col, size_t colNo, TableColumn::ColumnType type)
Tries to convert a column into the selected column, if possible.