#pragma once #include #include // custom vector wrapper for outputting to log template struct VectorFormatter { const Container &vec; explicit VectorFormatter(const Container& v) : vec(v) {} friend std::ostream &operator<<(std::ostream &os, const VectorFormatter &vf) { os << "["; for (auto it = vf.vec.begin(); it != vf.vec.end();it++) { os << *it; if (std::next(it) != vf.vec.end()) { os << ", "; } } os << "]"; return os; } }; // custom vector wrapper for outputting to log template struct MapFormatter { const std::map &vec; explicit MapFormatter(const std::map &v) : vec(v) {} friend std::ostream &operator<<(std::ostream &os, const MapFormatter &vf) { os << "["; for (auto it = vf.vec.begin(); it != vf.vec.end(); it++) { os << it->first << " : " << it->second; if (std::next(it) != vf.vec.end()) { os << ", "; } } os << "]"; return os; } };