diff --git a/scripts/logdecoder/logdecoder.cpp b/scripts/logdecoder/logdecoder.cpp index 59b7e03aad83b09bb6baea4d986f205a4d3d41d1..8227f53788003dcd68bbef6a6860a4bccc1977fd 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 f724e7342fcd46b5b7c014c67f7260eef2124fec..189582f0a17fcd6731236ca004dd3909e9b1d362 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 b0c45d193df4c9aac7924a41dd4a7e82aef716cf..4df3ac83cf0921490e029d276f9e26510322d316 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>();