#pragma once #include #include #include namespace logger { extern std::mutex mut; class Timer { public: Timer(); void restart(); void print(std::ostream &os) const; private: double start_; }; template inline void log(const T &msg) { std::unique_lock lock(mut); std::cerr << msg << '\n'; } template inline void log(const T &msg, const Timer &t) { std::unique_lock lock(mut); std::cerr << msg; t.print(std::cerr); std::cerr << '\n'; } }