From a7411c11549eeab7fbbcf00e6dc267f38d740a64 Mon Sep 17 00:00:00 2001 From: falsycat Date: Wed, 16 Aug 2023 11:51:24 +0900 Subject: [PATCH] add uv::Clock --- core/CMakeLists.txt | 1 + core/uv/clock.hh | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 core/uv/clock.hh diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index c15e81d..005c90c 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -18,6 +18,7 @@ target_sources(nf7_core luajit/lambda.hh luajit/thread.hh uv/context.hh + uv/clock.hh clock.hh logger.hh version.hh diff --git a/core/uv/clock.hh b/core/uv/clock.hh new file mode 100644 index 0000000..e4d9d9b --- /dev/null +++ b/core/uv/clock.hh @@ -0,0 +1,40 @@ +// No copyright +#pragma once + +#include +#include +#include + +#include "iface/subsys/clock.hh" +#include "iface/env.hh" + +#include "core/uv/context.hh" +#include "core/clock.hh" + +namespace nf7::core::uv { + +class Clock : public subsys::Clock { + public: + explicit Clock(Env& env) + : subsys::Clock("nf7::core::uv::Clock"), + ctx_(env.Get()) { } + + public: + void Reset(Time now = core::Clock::GetCurrentTime()) noexcept { + epoch_ = now - std::chrono::milliseconds(ctx_->loop()->now()); + } + + Time now() const noexcept override { + if (std::nullopt == epoch_) { + const_cast(*this).Reset(); + } + return *epoch_ + std::chrono::milliseconds(ctx_->loop()->now()); + } + + private: + const std::shared_ptr ctx_; + + std::optional