From 1198442730732c2dc1f71b7a06c072ddeb7729d6 Mon Sep 17 00:00:00 2001 From: Ruonan Wang <jason.ruonan.wang@gmail.com> Date: Wed, 26 Apr 2017 00:27:16 -0400 Subject: [PATCH] fixed a bug in CacheMan for cleaning variables after a timestep is finished --- source/dataman/CacheMan.cpp | 107 ++++++++------------------------- source/dataman/CacheMan.h | 6 +- source/dataman/DataMan.cpp | 10 +-- source/dataman/DataManBase.cpp | 24 ++++---- source/dataman/DumpMan.cpp | 2 +- source/dataman/MdtmMan.cpp | 9 +-- source/dataman/StreamMan.cpp | 3 - source/dataman/ZmqMan.cpp | 4 -- 8 files changed, 50 insertions(+), 115 deletions(-) diff --git a/source/dataman/CacheMan.cpp b/source/dataman/CacheMan.cpp index b575460c8..46384219f 100644 --- a/source/dataman/CacheMan.cpp +++ b/source/dataman/CacheMan.cpp @@ -49,29 +49,22 @@ int CacheItem::put(const void *a_data, json a_jmsg) push(); } - printf("put begin front, pointer=%d\n", m_cache.front().data()); - printf("put begin back, pointer=%d\n", m_cache.back().data()); - for (size_t i = 0; i < putsize; i += chunksize) { std::vector<size_t> p = one2multi(putshape, i); p = apply_offset(p, offset); size_t ig = multi2one(varshape, p); - std::copy((char *)a_data + i * dsize, - (char *)a_data + i * dsize + chunksize * dsize, + std::copy(const_cast<char *>(static_cast<const char *>(a_data)) + + i * dsize, + const_cast<char *>(static_cast<const char *>(a_data)) + + i * dsize + chunksize * dsize, m_cache.back().data() + ig * dsize); } - printf("put end front, pointer=%d\n", m_cache.front().data()); - printf("put end back, pointer=%d\n", m_cache.back().data()); return 0; } -void *CacheItem::get() { - - printf("get, pointer=%d\n", m_cache.front().data()); - return m_cache.front().data(); -} +void *CacheItem::get() { return m_cache.front().data(); } void *CacheMan::get(std::string doid, std::string var) { @@ -80,9 +73,9 @@ void *CacheMan::get(std::string doid, std::string var) void CacheMan::pop() { - for (auto i : m_cache) + for (auto &i : m_cache) { - for (auto j : i.second) + for (auto &j : i.second) { j.second.pop(); } @@ -91,17 +84,13 @@ void CacheMan::pop() m_timestep_first++; } -void CacheItem::pop() -{ - std::cout << "CacheItem::pop() ---------------------------" << std::endl; - m_cache.pop(); -} +void CacheItem::pop() { m_cache.pop(); } void CacheMan::push() { - for (auto i : m_cache) + for (auto &i : m_cache) { - for (auto j : i.second) + for (auto &j : i.second) { j.second.push(); } @@ -111,11 +100,9 @@ void CacheMan::push() void CacheItem::push() { - std::cout << "CacheItem::push() ---------------------------" << std::endl; size_t varbytes = m_jmsg["varbytes"].get<size_t>(); - std::vector<char> buff(varbytes); - m_cache.push(buff); - clean(m_cache.front(), "nan"); + m_cache.push(std::vector<char>(varbytes)); + clean("nan"); } void CacheItem::clean(std::string a_mode) @@ -125,7 +112,6 @@ void CacheItem::clean(std::string a_mode) std::string dtype = m_jmsg["dtype"].get<std::string>(); if (a_mode == "zero") { - printf("zero, pointer=%d\n", m_cache.front().data()); std::memset(m_cache.front().data(), 0, varbytes); return; } @@ -133,98 +119,55 @@ void CacheItem::clean(std::string a_mode) { if (dtype == "float") { - printf("nan, pointer=%d\n", m_cache.front().data()); - for (size_t j = 0; j < varsize; j++) + for (size_t j = 0; j < varsize; ++j) { - ((float*)(m_cache.front().data()))[j] = + (reinterpret_cast<float *>(m_cache.front().data()))[j] = std::numeric_limits<float>::quiet_NaN(); } } else if (dtype == "double") { - for (size_t j = 0; j < varsize; j++) + for (size_t j = 0; j < varsize; ++j) { - ((double *)m_cache.front().data())[j] = + (reinterpret_cast<double *>(m_cache.front().data()))[j] = std::numeric_limits<double>::quiet_NaN(); } } else if (dtype == "int") { - for (size_t j = 0; j < varsize; j++) + for (size_t j = 0; j < varsize; ++j) { - ((int *)m_cache.front().data())[j] = + (reinterpret_cast<int *>(m_cache.front().data()))[j] = std::numeric_limits<int>::quiet_NaN(); } } } -// clean(m_cache.front(), a_mode); } void CacheMan::clean(std::string a_mode) { - for (auto i : m_cache) + for (auto &i : m_cache) { - for (auto j : i.second) + for (auto &j : i.second) { j.second.clean(a_mode); } } } -void CacheItem::clean(std::vector<char> &a_data, std::string a_mode) -{ - size_t varbytes = m_jmsg["varbytes"].get<size_t>(); - size_t varsize = m_jmsg["varsize"].get<size_t>(); - std::string dtype = m_jmsg["dtype"].get<std::string>(); - if (a_mode == "zero") - { - printf("zero, pointer=%d\n", a_data.data()); - std::memset(a_data.data(), 0, varbytes); - return; - } - else if (a_mode == "nan") - { - if (dtype == "float") - { - printf("nan, pointer=%d\n", a_data.data()); - for (size_t j = 0; j < varsize; j++) - { - ((float*)(a_data.data()))[j] = - std::numeric_limits<float>::quiet_NaN(); - } - } - else if (dtype == "double") - { - for (size_t j = 0; j < varsize; j++) - { - ((double *)a_data.data())[j] = - std::numeric_limits<double>::quiet_NaN(); - } - } - else if (dtype == "int") - { - for (size_t j = 0; j < varsize; j++) - { - ((int *)a_data.data())[j] = - std::numeric_limits<int>::quiet_NaN(); - } - } - } -} - std::vector<std::string> CacheMan::get_do_list() { std::vector<std::string> do_list; - for (auto it = m_cache.begin(); it != m_cache.end(); ++it) - do_list.push_back(it->first); + for (const auto &i : m_cache) + do_list.push_back(i.first); return do_list; } std::vector<std::string> CacheMan::get_var_list(std::string doid) { std::vector<std::string> var_list; - for (auto it = m_cache[doid].begin(); it != m_cache[doid].end(); ++it) - var_list.push_back(it->first); + for (const auto &i : m_cache[doid]) + var_list.push_back(i.first); return var_list; } @@ -243,5 +186,3 @@ nlohmann::json CacheItem::get_jmsg() m_jmsg.erase("offset"); return m_jmsg; } - - diff --git a/source/dataman/CacheMan.h b/source/dataman/CacheMan.h index ad248d04a..6cfb50a95 100644 --- a/source/dataman/CacheMan.h +++ b/source/dataman/CacheMan.h @@ -41,7 +41,7 @@ private: const std::vector<size_t> &o) { std::vector<size_t> g; - for (int i = 0; i < p.size(); i++) + for (int i = 0; i < p.size(); ++i) { g.push_back(p[i] + o[i]); } @@ -52,7 +52,7 @@ private: const std::vector<size_t> &p) { size_t index = 0; - for (int i = 1; i < v.size(); i++) + for (int i = 1; i < v.size(); ++i) { index += std::accumulate(v.begin() + i, v.end(), p[i - 1], std::multiplies<size_t>()); @@ -64,7 +64,7 @@ private: inline std::vector<size_t> one2multi(const std::vector<size_t> &v, size_t p) { std::vector<size_t> index(v.size()); - for (int i = 1; i < v.size(); i++) + for (int i = 1; i < v.size(); ++i) { size_t s = std::accumulate(v.begin() + i, v.end(), 1, std::multiplies<size_t>()); diff --git a/source/dataman/DataMan.cpp b/source/dataman/DataMan.cpp index d871e0f3a..8bc55fcb7 100644 --- a/source/dataman/DataMan.cpp +++ b/source/dataman/DataMan.cpp @@ -59,14 +59,14 @@ void DataMan::add_stream(json a_jmsg) if (m_tolerance.size() < m_num_channels) { - for (int i = 0; i < m_num_channels; i++) + for (int i = 0; i < m_num_channels; ++i) { m_tolerance.push_back(0); } } if (m_priority.size() < m_num_channels) { - for (int i = 0; i < m_num_channels; i++) + for (int i = 0; i < m_num_channels; ++i) { m_priority.push_back(100 / (i + 1)); } @@ -94,13 +94,13 @@ void DataMan::flush() { if (m_cache_size == m_cache.get_timesteps_cached()) { - for (int i = 0; i < m_cache_size; i++) + for (int i = 0; i < m_cache_size; ++i) { std::vector<std::string> do_list = m_cache.get_do_list(); - for (auto j : do_list) + for (const auto &j : do_list) { std::vector<std::string> var_list = m_cache.get_var_list(j); - for (auto k : var_list) + for (const auto &k : var_list) { json jmsg = m_cache.get_jmsg(j, k); put_begin(m_cache.get(j, k), jmsg); diff --git a/source/dataman/DataManBase.cpp b/source/dataman/DataManBase.cpp index 941e6cbd2..e386249e7 100644 --- a/source/dataman/DataManBase.cpp +++ b/source/dataman/DataManBase.cpp @@ -195,13 +195,13 @@ void DataManBase::reg_callback( std::vector<size_t>)> cb) { - if (m_next.size() == 0) + if (m_next.empty()) { m_callback = cb; } else { - for (auto i : m_next) + for (const auto &i : m_next) { i.second->reg_callback(cb); } @@ -215,10 +215,10 @@ void DataManBase::dump(const void *p_data, json p_jmsg, std::ostream &out) std::string dtype = p_jmsg["dtype"]; size_t length = p_jmsg["dumplength"].get<size_t>(); size_t s = 0; - for (size_t i = 0; i < product(p_varshape, 1); i++) + for (size_t i = 0; i < product(p_varshape, 1); ++i) { s++; - out << ((float *)p_data)[i] << " "; + out << (static_cast<const float *>(p_data))[i] << " "; if (s == length) { out << std::endl; @@ -238,7 +238,7 @@ void DataManBase::remove_next(std::string p_name) { m_next.erase(p_name); } bool DataManBase::have_next() { - if (m_next.size() == 0) + if (m_next.empty()) { return false; } @@ -250,7 +250,7 @@ bool DataManBase::have_next() void DataManBase::print_next(std::ostream &out) { - for (auto i : m_next) + for (const auto &i : m_next) { out << i.second->name() << " -> "; i.second->print_next(); @@ -301,7 +301,7 @@ void DataManBase::add_man_to_path(std::string p_new, std::string p_path, int DataManBase::flush_next() { - for (auto i : m_next) + for (const auto &i : m_next) { i.second->flush(); } @@ -310,7 +310,7 @@ int DataManBase::flush_next() int DataManBase::put_next(const void *p_data, json p_jmsg) { - for (auto i : m_next) + for (const auto &i : m_next) { i.second->put(p_data, p_jmsg); } @@ -367,7 +367,7 @@ bool DataManBase::check_json(json p_jmsg, std::vector<std::string> p_strings, { p_man = name(); } - for (auto i : p_strings) + for (const auto &i : p_strings) { if (p_jmsg[i] == nullptr) { @@ -386,7 +386,7 @@ size_t DataManBase::product(size_t *shape) size_t s = 1; if (shape) { - for (size_t i = 1; i <= shape[0]; i++) + for (size_t i = 1; i <= shape[0]; ++i) { s *= shape[i]; } @@ -498,7 +498,7 @@ nlohmann::json DataManBase::atoj(unsigned int *array) if (array[0] > 0) { j = {array[1]}; - for (unsigned int i = 2; i <= array[0]; i++) + for (unsigned int i = 2; i <= array[0]; ++i) { j.insert(j.end(), array[i]); } @@ -510,7 +510,7 @@ nlohmann::json DataManBase::atoj(unsigned int *array) int DataManBase::closest(int v, json j, bool up) { int s = 100, k = 0, t; - for (unsigned int i = 0; i < j.size(); i++) + for (unsigned int i = 0; i < j.size(); ++i) { if (up) { diff --git a/source/dataman/DumpMan.cpp b/source/dataman/DumpMan.cpp index 1a85e4bf3..b87c9ba02 100644 --- a/source/dataman/DumpMan.cpp +++ b/source/dataman/DumpMan.cpp @@ -59,7 +59,7 @@ int DumpMan::put(const void *p_data, json p_jmsg) auto_transform(data, p_jmsg); void *data_to_print = data.data(); - for (size_t i = 0; i < numbers_to_print; i++) + for (size_t i = 0; i < numbers_to_print; ++i) { if (dtype == "float") { diff --git a/source/dataman/MdtmMan.cpp b/source/dataman/MdtmMan.cpp index 02e47706a..40aed77d7 100644 --- a/source/dataman/MdtmMan.cpp +++ b/source/dataman/MdtmMan.cpp @@ -42,7 +42,7 @@ int MdtmMan::init(json p_jmsg) pipe_desc["mode"] = m_stream_mode; std::string pipename_prefix = "MdtmManPipe"; - for (int i = 0; i < m_num_channels; i++) + for (int i = 0; i < m_num_channels; ++i) { std::stringstream pipename; pipename << pipename_prefix << i; @@ -76,13 +76,14 @@ int MdtmMan::init(json p_jmsg) // Pipes mkdir(pipe_desc["pipe_prefix"].get<std::string>().c_str(), 0755); - for (auto i : pipe_desc["pipe_names"].get<std::vector<std::string>>()) + for (const auto &i : + pipe_desc["pipe_names"].get<std::vector<std::string>>()) { std::string filename = pipe_desc["pipe_prefix"].get<std::string>() + i; mkfifo(filename.c_str(), 0666); } - for (int i = 0; i < m_num_channels; i++) + for (int i = 0; i < m_num_channels; ++i) { std::stringstream pipename; pipename << pipename_prefix << i; @@ -181,7 +182,7 @@ void MdtmMan::on_recv(json a_jmsg) break; } int pipeindex = 0; - for (int i = 0; i < pipenames.size(); i++) + for (int i = 0; i < pipenames.size(); ++i) { if (jmsg["pipe"].get<std::string>() == pipenames[i]) { diff --git a/source/dataman/StreamMan.cpp b/source/dataman/StreamMan.cpp index b993f7a2f..68e08ab94 100644 --- a/source/dataman/StreamMan.cpp +++ b/source/dataman/StreamMan.cpp @@ -149,6 +149,3 @@ int StreamMan::put(const void *p_data, json p_jmsg) zmq_send(zmq_meta, p_jmsg.dump().c_str(), p_jmsg.dump().length(), 0); return 0; } - - - diff --git a/source/dataman/ZmqMan.cpp b/source/dataman/ZmqMan.cpp index 5d6f69373..811baa1d5 100644 --- a/source/dataman/ZmqMan.cpp +++ b/source/dataman/ZmqMan.cpp @@ -73,7 +73,3 @@ void ZmqMan::on_recv(json a_jmsg) callback(); } } - - - - -- GitLab