// // format.hpp // logger // // Created by Sam Jaffe on 8/21/16. // #pragma once #include #include #include #include #include "logger_fwd.h" #include "wrapper_object.h" namespace logging { class format { public: enum class token_id { DATE, PRIORITY, CATEGORY, MESSAGE, STRING, NEWLINE }; using generator = std::function; static format parse_format_string(std::string const &); void process(logpacket const & pkt, std::ostream & os) const; std::string process(logpacket const & pkt) const; private: std::vector gen; }; using string_generator = std::function; string_generator get_date_formatter(std::string fmt); void format_msg(std::ostream & os, std::string const & interp, size_t pos, size_t idx, std::vector const & objs); template std::string format_msg(std::string const & interp, Args && ...args) { std::stringstream msg; format_msg(msg, interp, 0, 0, {object(args)...}); return msg.str(); } }