#pragma once #include "frame_result.hpp" #include #include namespace cms { // One immutable result variable. Readers neither remove nor acknowledge results. class LatestResult { public: void publish(FrameResultPtr result) { if(!result)throw std::invalid_argument("Cannot publish a null result"); std::atomic_store_explicit(&latest_,std::move(result),std::memory_order_release); } FrameResultPtr load() const { return std::atomic_load_explicit(&latest_,std::memory_order_acquire); } private: FrameResultPtr latest_; }; }