#pragma once #include "application/interfaces/IBlocker.h" #include #include #include namespace nxl::autostore::infrastructure { class CvBlocker : public application::IBlocker { public: ~CvBlocker() override = default; void block() override; void blockFor(const std::chrono::milliseconds& duration) override; void blockUntil(const TimePoint& timePoint) override; void notify() override; bool isBlocked() override; bool wasNotified() override; private: template void blockUntilTimePoint( const std::chrono::time_point& timePoint); private: std::condition_variable conditionVar; std::mutex mutex; std::atomic notified{false}; std::atomic blocked{false}; }; } // namespace nxl::autostore::infrastructure