From 465b406ecf55d82196850d254eafb13c3c5bdcba Mon Sep 17 00:00:00 2001 From: Alberto Nidasio <alberto.nidasio@skywarder.eu> Date: Sat, 7 May 2022 16:47:34 +0200 Subject: [PATCH] [Deserializer] Fixed automatic log deconding of multiple files --- scripts/logdecoder/logdecoder.cpp | 12 ++++-------- src/shared/logger/Deserializer.h | 22 +++++++++++++--------- src/shared/logger/LogTypes.h | 1 - 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/scripts/logdecoder/logdecoder.cpp b/scripts/logdecoder/logdecoder.cpp index 59b7e03aa..8227f5378 100644 --- a/scripts/logdecoder/logdecoder.cpp +++ b/scripts/logdecoder/logdecoder.cpp @@ -64,18 +64,14 @@ bool deserializeAll() { for (int i = 0; i < 100; i++) { - char fn[10]; - char fnext[11]; - sprintf(fn, "log%02d", i); - sprintf(fnext, "log%02d.dat", i); + char nextName[11]; + sprintf(nextName, "log%02d.dat", i); struct stat st; - if (stat(fnext, &st) != 0) + if (stat(nextName, &st) != 0) continue; // File not found // File found - if (!deserialize(string(fn))) - { + if (!deserialize(string(nextName))) return false; - } } return true; } diff --git a/src/shared/logger/Deserializer.h b/src/shared/logger/Deserializer.h index f724e7342..189582f0a 100644 --- a/src/shared/logger/Deserializer.h +++ b/src/shared/logger/Deserializer.h @@ -99,7 +99,7 @@ private: bool closed = false; - std::vector<std::ofstream*> fileStreams; + std::map<std::string, std::ofstream*> fileStreams; tscpp::TypePoolStream tps; std::string logFilename; @@ -130,14 +130,18 @@ void Deserializer::registerType() template <typename T> void Deserializer::printType(T& t, std::string path, std::string prefix) { - static std::ofstream* stream = nullptr; + std::string demangledTypeName = tscpp::demangle(typeid(T).name()); + static std::ofstream* stream; + try + { + stream = fileStreams.at(demangledTypeName); + } // If not already initialize, open the file and write the header - if (stream == nullptr) + catch (std::out_of_range e) { - stream = new std::ofstream(); - std::string filename = - path + prefix + "_" + tscpp::demangle(typeid(T).name()) + ".csv"; + stream = new std::ofstream(); + std::string filename = path + prefix + "_" + demangledTypeName + ".csv"; std::cout << "Creating file " + filename << std::endl; stream->open(filename); @@ -152,7 +156,7 @@ void Deserializer::printType(T& t, std::string path, std::string prefix) *stream << T::header(); // Add the file to the vector such that it will be closed - fileStreams.push_back(stream); + fileStreams.emplace(demangledTypeName, stream); } // Print data into the file if it is open @@ -222,8 +226,8 @@ void Deserializer::close() closed = true; for (auto it = fileStreams.begin(); it != fileStreams.end(); it++) { - (*it)->close(); - delete *it; + it->second->close(); + delete it->second; } } } diff --git a/src/shared/logger/LogTypes.h b/src/shared/logger/LogTypes.h index b0c45d193..4df3ac83c 100644 --- a/src/shared/logger/LogTypes.h +++ b/src/shared/logger/LogTypes.h @@ -101,7 +101,6 @@ void registerTypes(Deserializer& ds) ds.registerType<VN100Data>(); ds.registerType<BatteryVoltageSensorData>(); ds.registerType<CurrentSensorData>(); - ds.registerType<LoadCellData>(); ds.registerType<MPXHZ6130AData>(); ds.registerType<HSCMAND015PAData>(); ds.registerType<HSCMRNN030PAData>(); -- GitLab