#pragma once #include #include #include #include namespace infra { struct transaction { std::uint64_t record = ~(std::uint64_t)0; }; struct pt { static std::ostream *ptfile; static std::uint64_t next_record; static transaction toplevel() { transaction t; t.record = next_record++; return t; } static transaction child(const transaction &p) { transaction t; t.record = next_record++; if (ptfile) *ptfile << fmt::format("{} parent {}\n", t.record, p.record); return t; } static void event(const transaction &t, const char *event, std::uint64_t time, const std::string &data) { if (ptfile) *ptfile << fmt::format("@{} {} {} {}\n", time, t.record, event, data) << std::flush; } }; }