21#include "configuration.h"
23#if CLOCKWERK_ALLOW_VECTOR
24#if CLOCKWERK_ALLOW_STD_STRING
26#ifndef LOGGING_SIM_LOGGER_H
27#define LOGGING_SIM_LOGGER_H
39 enum vector_select_e {
75 SimLogger(GraphTreeObject &parent,
const std::string &filename=
"output.csv",
unsigned int buffer_size=1);
76 virtual ~SimLogger() {close();}
79 unsigned int bufferSize() {
return _buffer_size;}
80 int bufferSize(
unsigned int buffer_size);
83 std::string filename() {
return _filename;}
84 int filename(
const std::string &name);
87 std::string outDir() {
return _output_directory;}
88 int outDir(
const std::string &directory);
93 virtual int setup(
const std::string &file_name) {
return NO_ERROR;}
102 int addParameter(GraphTreeObject ¶meter,
const std::string ¶m_name,
103 bool recursive =
false);
112 int addParameter(
const std::string ¶meter,
const std::string ¶m_name,
113 bool recursive =
false);
122 virtual int lockForLogging();
133 int writeHeaders(
const bool &val) {
return writeHeaders((uint64)val);}
134 int writeHeaders(
const int8 &val) {
return writeHeaders((int64)val);}
135 int writeHeaders(
const int16 &val) {
return writeHeaders((int64)val);}
136 int writeHeaders(
const int32 &val) {
return writeHeaders((int64)val);}
137 int writeHeaders(
const int64 &val) {_group_idx.push_back(-1); _headers.push_back(_current_name);
return NO_ERROR;}
138 int writeHeaders(
const uint8 &val) {
return writeHeaders((uint64)val);}
139 int writeHeaders(
const uint16 &val) {
return writeHeaders((uint64)val);}
140 int writeHeaders(
const uint32 &val) {
return writeHeaders((uint64)val);}
141 int writeHeaders(
const uint64 &val) {_group_idx.push_back(-1); _headers.push_back(_current_name);
return NO_ERROR;}
142 int writeHeaders(
const double &val) {_group_idx.push_back(-1); _headers.push_back(_current_name);
return NO_ERROR;}
143 int writeHeaders(
const GraphTreeObject &val);
144 int writeHeaders(
void* val) {_group_idx.push_back(-1); _headers.push_back(_current_name);
return NO_ERROR;}
145 int writeHeaders(
const std::string &val) {_group_idx.push_back(-1); _headers.push_back(_current_name);
return NO_ERROR;}
147 template <
typename T>
int writeHeaders(
const std::vector<T> &val);
148 template <
typename T,
long unsigned int N>
int writeHeaders(
const std::array<T, N> &val);
150 template <
unsigned int R,
unsigned int C>
int writeHeaders(
const Matrix<R, C> &val);
157 int writeToBuffer(
const bool &val);
158 int writeToBuffer(
const int8 &val) {
return writeToBuffer((int64)val);}
159 int writeToBuffer(
const int16 &val) {
return writeToBuffer((int64)val);}
160 int writeToBuffer(
const int32 &val) {
return writeToBuffer((int64)val);}
161 int writeToBuffer(
const int64 &val);
162 int writeToBuffer(
const uint8 &val) {
return writeToBuffer((uint64)val);}
163 int writeToBuffer(
const uint16 &val) {
return writeToBuffer((uint64)val);}
164 int writeToBuffer(
const uint32 &val) {
return writeToBuffer((uint64)val);}
165 int writeToBuffer(
const uint64 &val);
166 int writeToBuffer(
const float &val);
167 int writeToBuffer(
const double &val);
168 int writeToBuffer(
const std::string &val);
169 int writeToBuffer(
void* val);
170 int writeToBuffer(GraphTreeObject &val);
175 template <
typename T>
int writeToBuffer(
const std::vector<T> &val);
176 template <
typename T,
long unsigned int N>
int writeToBuffer(
const std::array<T, N> &val);
178 template <
unsigned int R,
unsigned int C>
int writeToBuffer(
const Matrix<R, C> &val);
185 virtual int _createSetupFile() {
return NO_ERROR;}
188 virtual int _writeToFile() {
return NO_ERROR;}
191 std::vector<GraphTreeObject*> _logged_nodes;
192 std::vector<std::string> _log_names;
193 std::string _current_name;
196 std::string _filename;
197 std::string _output_directory;
208 unsigned int _buffer_size = 10;
209 unsigned int _buffer_write_idx = 0;
210 unsigned int _buffer_read_idx = 0;
211 std::vector<std::vector<bool>> _bool_vector;
212 std::vector<std::vector<int64>> _int_vector;
213 std::vector<std::vector<uint64>> _uint_vector;
214 std::vector<std::vector<float>> _float_vector;
215 std::vector<std::vector<double>> _double_vector;
216 std::vector<std::vector<std::string>> _string_vector;
220 unsigned int _seq_idx = 0;
221 std::vector<std::string> _headers;
222 std::vector<unsigned int> _sequence;
223 std::vector<vector_select_e> _type;
231 long unsigned int size;
232 std::string group_name;
234 std::vector<int> _group_idx;
235 std::vector<Group> _groups;
239 template <
typename T>
240 int SimLogger::writeToBuffer(
const std::vector<T> &val) {
243 for(
unsigned int i = 0; i < val.size(); i++) {
244 err = writeToBuffer(val[i]);
252 template <
typename T,
long unsigned int N>
253 int SimLogger::writeToBuffer(
const std::array<T, N> &val) {
256 for(
unsigned int i = 0; i < N; i++) {
257 err = writeToBuffer(val[i]);
265 template <
unsigned int R,
unsigned int C>
269 for(i = 0; i < R; i++) {
270 for(j = 0; j < C; j++) {
271 err = writeToBuffer(val.values[i][j]);
280 template <
typename T>
281 int SimLogger::writeHeaders(
const std::vector<T> &val) {
284 _groups.push_back({val.size(), _current_name});
286 for(
unsigned int i = 0; i < val.size(); i++) {
287 _headers.push_back(_current_name +
"_" + std::to_string(i));
288 _group_idx.push_back(_groups.size() - 1);
293 template <
typename T,
long unsigned int N>
294 int SimLogger::writeHeaders(
const std::array<T, N> &val) {
297 _groups.push_back({val.size(), _current_name});
299 for(
unsigned int i = 0; i < N; i++) {
300 _headers.push_back(_current_name +
"_" + std::to_string(i));
301 _group_idx.push_back(_groups.size() - 1);
306 template <
unsigned int R,
unsigned int C>
310 _groups.push_back({R*C, _current_name});
313 for(i = 0; i < R; i++) {
314 for(j = 0; j < C; j++) {
317 _headers.push_back(_current_name +
"_" + std::to_string(i));
318 _group_idx.push_back(_groups.size() - 1);
321 _headers.push_back(_current_name +
"_" + std::to_string(i) +
"_" + std::to_string(j));
322 _group_idx.push_back(_groups.size() - 1);
Base class for object organization.
Definition GraphTreeObject.h:98
Matrix math implementation.
Definition Matrix.hpp:55
#define NO_ERROR
Error code in the case where matrix math executed successfully.
Definition clockwerkerrors.h:34
Definition CircularBuffer.hpp:28
half log(half arg)
Definition half.hpp:3050
@ STRING
Definition Connection.h:40