{ "version": 1, "symbols": [ { "kind": "free_function", "qualified": "dofs::log_error", "signature": "void log_error(std::string_view type, std::string_view message, std::optional timestamp = std::nullopt) noexcept;", "file": "src/core/error.h", "line": 13, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "macro", "qualified": "DOFS_ERROR", "signature": "#define DOFS_ERROR(TYPE, MSG)", "file": "src/core/error.h", "line": 34, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "macro", "qualified": "DOFS_ERROR_T", "signature": "#define DOFS_ERROR_T(TYPE, MSG, TS)", "file": "src/core/error.h", "line": 37, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "macro", "qualified": "DOFS_ERROR_ST", "signature": "#define DOFS_ERROR_ST(TYPE, SRC, MSG, TS)", "file": "src/core/error.h", "line": 40, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "macro", "qualified": "DOFS_SHOW", "signature": "#define DOFS_SHOW(VAR)", "file": "src/core/error.h", "line": 43, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "macro", "qualified": "DOFS_EVAL", "signature": "#define DOFS_EVAL(EXPR)", "file": "src/core/error.h", "line": 46, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "macro", "qualified": "FORMAT", "signature": "#define FORMAT(VAR)", "file": "src/core/error.h", "line": 49, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "ctor", "qualified": "Host::Host", "signature": "Host(Simulator *const sim, NodeId id) noexcept", "file": "src/core/host.h", "line": 16, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "dtor", "qualified": "Host::~Host", "signature": "virtual ~Host() = default", "file": "src/core/host.h", "line": 17, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Host::nic", "signature": "NetworkNic *nic() const noexcept", "file": "src/core/host.h", "line": 20, "static": false, "const": true, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "dofs::attach_nic", "signature": "void attach_nic(NetworkNic *nic) noexcept;", "file": "src/core/host.h", "line": 23, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Host::attach_nic", "signature": "void attach_nic(NetworkNic *nic) noexcept", "file": "src/core/host.h", "line": 25, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Host::detach_nic", "signature": "void detach_nic(NetworkNic *nic) noexcept", "file": "src/core/host.h", "line": 26, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "dofs::detach_nic", "signature": "void detach_nic(NetworkNic *nic) noexcept;", "file": "src/core/host.h", "line": 26, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Host::recv_flow", "signature": "virtual void recv_flow(NodeId src, FlowId flow, FlowPriority priority, Bytes flow_size) = 0", "file": "src/core/host.h", "line": 29, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Host::recv_frame", "signature": "virtual void recv_frame(const Packet &frame) = 0", "file": "src/core/host.h", "line": 35, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Host::recv_mgmt_msg", "signature": "virtual void recv_mgmt_msg(std::unique_ptr msg) = 0", "file": "src/core/host.h", "line": 37, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "ctor", "qualified": "Host::Host", "signature": "Host(const Host &) = delete", "file": "src/core/host.h", "line": 39, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Host::operator=", "signature": "Host &operator=(const Host &) = delete", "file": "src/core/host.h", "line": 40, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "ctor", "qualified": "Logger::Logger", "signature": "Logger(std::string_view path, bool append) noexcept", "file": "src/core/logger.h", "line": 21, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "dtor", "qualified": "Logger::~Logger", "signature": "~Logger() noexcept", "file": "src/core/logger.h", "line": 22, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "ctor", "qualified": "Logger::Logger", "signature": "Logger(const Logger &) = delete", "file": "src/core/logger.h", "line": 24, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Logger::operator=", "signature": "Logger &operator=(const Logger &) = delete", "file": "src/core/logger.h", "line": 25, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "ctor", "qualified": "Logger::Logger", "signature": "Logger(Logger &&) = delete", "file": "src/core/logger.h", "line": 26, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Logger::operator=", "signature": "Logger &operator=(Logger &&) = delete", "file": "src/core/logger.h", "line": 27, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Logger::is_open", "signature": "bool is_open() const noexcept", "file": "src/core/logger.h", "line": 29, "static": false, "const": true, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "dofs::write_line", "signature": "void write_line(std::string_view line) noexcept;", "file": "src/core/logger.h", "line": 32, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Logger::write_line", "signature": "void write_line(std::string_view line) noexcept", "file": "src/core/logger.h", "line": 33, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "dofs::flush", "signature": "void flush() noexcept;", "file": "src/core/logger.h", "line": 34, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Logger::flush", "signature": "void flush() noexcept", "file": "src/core/logger.h", "line": 35, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Logger::close", "signature": "void close() noexcept", "file": "src/core/logger.h", "line": 36, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "dofs::close", "signature": "void close() noexcept;", "file": "src/core/logger.h", "line": 36, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Logger::path", "signature": "std::string_view path() const noexcept", "file": "src/core/logger.h", "line": 38, "static": false, "const": true, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "open", "signature": "private: bool open(std::ios::openmode mode) noexcept;", "file": "src/core/logger.h", "line": 41, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "ctor", "qualified": "Node::Node", "signature": "Node(Simulator *const sim, NodeId id, NodeType type) noexcept", "file": "src/core/node.h", "line": 14, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "dtor", "qualified": "Node::~Node", "signature": "virtual ~Node() = default", "file": "src/core/node.h", "line": 15, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Node::id", "signature": "NodeId id() const noexcept", "file": "src/core/node.h", "line": 17, "static": false, "const": true, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Node::status", "signature": "NodeStatus status() const noexcept", "file": "src/core/node.h", "line": 18, "static": false, "const": true, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Node::type", "signature": "NodeType type() const noexcept", "file": "src/core/node.h", "line": 19, "static": false, "const": true, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Node::set_status", "signature": "void set_status(NodeStatus s) noexcept", "file": "src/core/node.h", "line": 21, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Node::boot", "signature": "void boot(Time boottime_ns)", "file": "src/core/node.h", "line": 23, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Node::reboot", "signature": "void reboot(Time boottime_ns)", "file": "src/core/node.h", "line": 24, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "ctor", "qualified": "Node::Node", "signature": "Node(const Node &) = delete", "file": "src/core/node.h", "line": 26, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Node::operator=", "signature": "Node &operator=(const Node &) = delete", "file": "src/core/node.h", "line": 27, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "ctor", "qualified": "Rng::Rng", "signature": "explicit Rng(seed_type seed = default_seed()) noexcept : _eng(seed)", "file": "src/core/rng.h", "line": 19, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "dofs::seed", "signature": "void seed(seed_type s) noexcept{", "file": "src/core/rng.h", "line": 21, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Rng::seed", "signature": "void seed(seed_type s) noexcept", "file": "src/core/rng.h", "line": 22, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "uniform01", "signature": "double uniform01(){", "file": "src/core/rng.h", "line": 25, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Rng::uniform01", "signature": "double uniform01()", "file": "src/core/rng.h", "line": 27, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Rng::uniform_range", "signature": "template::value>> Int uniform_range(Int lo_inclusive, Int hi_exclusive)", "file": "src/core/rng.h", "line": 34, "static": false, "const": false, "ref_qual": "", "template_params": "template::value>>" }, { "kind": "free_function", "qualified": "uniform_range", "signature": "Int uniform_range(Int lo_inclusive, Int hi_exclusive){", "file": "src/core/rng.h", "line": 34, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Rng::uniform_range", "signature": "template::value>> Int uniform_range(Int hi_exclusive)", "file": "src/core/rng.h", "line": 41, "static": false, "const": false, "ref_qual": "", "template_params": "template::value>>" }, { "kind": "free_function", "qualified": "uniform_range", "signature": "Int uniform_range(Int hi_exclusive){", "file": "src/core/rng.h", "line": 41, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "uniform_range", "signature": "double uniform_range(double lo_inclusive, double hi_exclusive){", "file": "src/core/rng.h", "line": 44, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Rng::uniform_range", "signature": "double uniform_range(double lo_inclusive, double hi_exclusive)", "file": "src/core/rng.h", "line": 45, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "poisson", "signature": "std::uint64_t poisson(double lambda){", "file": "src/core/rng.h", "line": 49, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Rng::poisson", "signature": "std::uint64_t poisson(double lambda)", "file": "src/core/rng.h", "line": 50, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "choose_weighted", "signature": "template T choose_weighted(const std::vector> &items){", "file": "src/core/rng.h", "line": 54, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Rng::choose_weighted", "signature": "template T choose_weighted(const std::vector> &items)", "file": "src/core/rng.h", "line": 56, "static": false, "const": false, "ref_qual": "", "template_params": "template" }, { "kind": "free_function", "qualified": "choose_weighted_impl", "signature": "return choose_weighted_impl(items.begin(), items.end());", "file": "src/core/rng.h", "line": 57, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "choose_weighted", "signature": "template T choose_weighted(std::initializer_list> items){", "file": "src/core/rng.h", "line": 59, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Rng::choose_weighted", "signature": "template T choose_weighted(std::initializer_list> items)", "file": "src/core/rng.h", "line": 61, "static": false, "const": false, "ref_qual": "", "template_params": "template" }, { "kind": "free_function", "qualified": "choose_weighted_impl", "signature": "return choose_weighted_impl(items.begin(), items.end());", "file": "src/core/rng.h", "line": 62, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "default_seed", "signature": "static constexpr seed_type default_seed() noexcept{", "file": "src/core/rng.h", "line": 66, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "choose_weighted_impl", "signature": "template auto choose_weighted_impl(Iter first, Iter last) -> typename std::iterator_traits::value_type::second_type{", "file": "src/core/rng.h", "line": 71, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::Cmp::operator", "signature": "bool operator()(const Item &a, const Item &b) const noexcept", "file": "src/core/simulator.h", "line": 43, "static": false, "const": true, "ref_qual": "", "template_params": "" }, { "kind": "ctor", "qualified": "Simulator::Simulator", "signature": "Simulator() = default", "file": "src/core/simulator.h", "line": 58, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::create_simulator", "signature": "static std::pair create_simulator(InstanceId id)", "file": "src/core/simulator.h", "line": 60, "static": true, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::get_simulator", "signature": "static Simulator *get_simulator(InstanceId id) noexcept", "file": "src/core/simulator.h", "line": 61, "static": true, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::now", "signature": "Time now() const noexcept", "file": "src/core/simulator.h", "line": 63, "static": false, "const": true, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::schedule_at", "signature": "template EventId schedule_at(Time abs_time, F&&f, Args&&... args)", "file": "src/core/simulator.h", "line": 66, "static": false, "const": false, "ref_qual": "", "template_params": "template" }, { "kind": "method", "qualified": "Simulator::schedule_after", "signature": "template EventId schedule_after(Time delay, F&&f, Args&&... args)", "file": "src/core/simulator.h", "line": 84, "static": false, "const": false, "ref_qual": "", "template_params": "template" }, { "kind": "free_function", "qualified": "cancel", "signature": "bool cancel(EventId id);", "file": "src/core/simulator.h", "line": 88, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::cancel", "signature": "bool cancel(EventId id)", "file": "src/core/simulator.h", "line": 89, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::run_next", "signature": "bool run_next()", "file": "src/core/simulator.h", "line": 90, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "run_next", "signature": "bool run_next();", "file": "src/core/simulator.h", "line": 90, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::run_until", "signature": "void run_until(Time end_time)", "file": "src/core/simulator.h", "line": 91, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "run_until", "signature": "void run_until(Time end_time);", "file": "src/core/simulator.h", "line": 91, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "lock", "signature": "void lock() noexcept;", "file": "src/core/simulator.h", "line": 92, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::lock", "signature": "void lock() noexcept", "file": "src/core/simulator.h", "line": 95, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::is_locked", "signature": "bool is_locked() const noexcept", "file": "src/core/simulator.h", "line": 96, "static": false, "const": true, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "flush_after", "signature": "void flush_after(Time grace) noexcept;", "file": "src/core/simulator.h", "line": 99, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::flush_after", "signature": "void flush_after(Time grace) noexcept", "file": "src/core/simulator.h", "line": 100, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::create_rng", "signature": "Rng *create_rng(std::uint64_t seed)", "file": "src/core/simulator.h", "line": 103, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::get_rng", "signature": "Rng *get_rng() noexcept", "file": "src/core/simulator.h", "line": 104, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::get_rng", "signature": "Rng const *get_rng() const noexcept", "file": "src/core/simulator.h", "line": 105, "static": false, "const": true, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::create_link", "signature": "std::pair create_link(NetworkNode *a, PortId a_port, NetworkNode *b, PortId b_port, Time latency, double bandwidth_gbps)", "file": "src/core/simulator.h", "line": 107, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::get_link", "signature": "Link *get_link(LinkId id) noexcept", "file": "src/core/simulator.h", "line": 112, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Simulator::get_link", "signature": "Link const *get_link(LinkId id) const noexcept", "file": "src/core/simulator.h", "line": 113, "static": false, "const": true, "ref_qual": "", "template_params": "" }, { "kind": "ctor", "qualified": "Time::Time", "signature": "constexpr Time() : _nsec(0)", "file": "src/core/time.h", "line": 14, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "ctor", "qualified": "Time::Time", "signature": "explicit constexpr Time(rep ns) : _nsec(ns)", "file": "src/core/time.h", "line": 15, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "from_ns", "signature": "static constexpr Time from_ns(rep ns) noexcept{", "file": "src/core/time.h", "line": 16, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Time::from_ns", "signature": "static constexpr Time from_ns(rep ns) noexcept", "file": "src/core/time.h", "line": 18, "static": true, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "Time", "signature": "return Time(ns);", "file": "src/core/time.h", "line": 19, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Time::from_us", "signature": "static constexpr Time from_us(rep us) noexcept", "file": "src/core/time.h", "line": 21, "static": true, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "from_us", "signature": "static constexpr Time from_us(rep us) noexcept{", "file": "src/core/time.h", "line": 21, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "Time", "signature": "return Time(us * 1000ULL);", "file": "src/core/time.h", "line": 22, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Time::from_ms", "signature": "static constexpr Time from_ms(rep ms) noexcept", "file": "src/core/time.h", "line": 24, "static": true, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "from_ms", "signature": "static constexpr Time from_ms(rep ms) noexcept{", "file": "src/core/time.h", "line": 24, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "Time", "signature": "return Time(ms * 1000ULL * 1000ULL);", "file": "src/core/time.h", "line": 25, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Time::from_s", "signature": "static constexpr Time from_s (rep s ) noexcept", "file": "src/core/time.h", "line": 27, "static": true, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "from_s", "signature": "static constexpr Time from_s (rep s ) noexcept{", "file": "src/core/time.h", "line": 27, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "Time", "signature": "return Time(s * 1000ULL * 1000ULL * 1000ULL);", "file": "src/core/time.h", "line": 28, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Time::ns", "signature": "constexpr rep ns() const noexcept", "file": "src/core/time.h", "line": 32, "static": false, "const": true, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Time::count", "signature": "constexpr rep count() const noexcept", "file": "src/core/time.h", "line": 35, "static": false, "const": true, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "us_to_ns", "signature": "static constexpr rep us_to_ns(rep us) noexcept{", "file": "src/core/time.h", "line": 38, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Time::us_to_ns", "signature": "static constexpr rep us_to_ns(rep us) noexcept", "file": "src/core/time.h", "line": 40, "static": true, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "method", "qualified": "Time::ms_to_ns", "signature": "static constexpr rep ms_to_ns(rep ms) noexcept", "file": "src/core/time.h", "line": 43, "static": true, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "ms_to_ns", "signature": "static constexpr rep ms_to_ns(rep ms) noexcept{", "file": "src/core/time.h", "line": 43, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "Time", "signature": "return Time(a._nsec + b._nsec);", "file": "src/core/time.h", "line": 87, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "Time", "signature": "return Time(a._nsec * b._nsec);", "file": "src/core/time.h", "line": 91, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "safe_sub", "signature": "return safe_sub(a, b);", "file": "src/core/time.h", "line": 95, "static": false, "const": false, "ref_qual": "", "template_params": "" }, { "kind": "free_function", "qualified": "safe_sub", "signature": "friend constexpr std::optional