/** * @file * @brief Atomic signal implementation. * * Configuration: * STA_STDLIB_HAS_ATOMIC: Enable module */ #ifndef STA_CORE_ATOMIC_SIGNAL_HPP #define STA_CORE_ATOMIC_SIGNAL_HPP #include #ifdef STA_STDLIB_HAS_ATOMIC # define STA_ATOMIC_ENABLED #endif // STA_STDLIB_HAS_ATOMIC #if defined(STA_ATOMIC_ENABLED) || defined(DOXYGEN) #include #include namespace sta { /** * @brief Implementation of `Signal` interface using `std::atomic`. */ class AtomicSignal : public Signal { public: AtomicSignal(); void notify() override; bool peek() override; bool test() override; void wait() override; private: std::atomic signal_; /**< Atomic bool used as signal */ }; } // namespace sta #endif // STA_ATOMIC_ENABLED #endif // STA_CORE_ATOMIC_SIGNAL_HPP