#ifndef ENTT_CORE_MONOSTATE_HPP #define ENTT_CORE_MONOSTATE_HPP #include "../config/config.h" #include "fwd.hpp" namespace entt { /** * @brief Minimal implementation of the monostate pattern. * * A minimal, yet complete configuration system built on top of the monostate * pattern. Thread safe by design, it works only with basic types like `int`s or * `bool`s.
* Multiple types and therefore more than one value can be associated with a * single key. Because of this, users must pay attention to use the same type * both during an assignment and when they try to read back their data. * Otherwise, they can incur in unexpected results. */ template struct monostate { /** * @brief Assigns a value of a specific type to a given key. * @tparam Type Type of the value to assign. * @param val User data to assign to the given key. */ template void operator=(Type val) const ENTT_NOEXCEPT { value = val; } /** * @brief Gets a value of a specific type for a given key. * @tparam Type Type of the value to get. * @return Stored value, if any. */ template operator Type() const ENTT_NOEXCEPT { return value; } private: template inline static ENTT_MAYBE_ATOMIC(Type) value{}; }; /** * @brief Helper variable template. * @tparam Value Value used to differentiate between different variables. */ template inline monostate monostate_v = {}; } // namespace entt #endif