Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <iosfwd> 7 : 8 : #include "Utilities/TypeTraits.hpp" 9 : 10 : namespace observers { 11 : /*! 12 : * \ingroup ObserversGroup 13 : * \brief Specifies the type of observation. 14 : * 15 : * Below `sender` is the component passing the data, reduction or volume, to the 16 : * observer component. 17 : */ 18 1 : enum class TypeOfObservation { 19 : /// The sender will only perform reduction observations 20 : Reduction, 21 : /// The sender will only perform volume observations 22 : Volume, 23 : }; 24 : 25 0 : std::ostream& operator<<(std::ostream& os, const TypeOfObservation& t); 26 : 27 : /// @{ 28 : /// Inherits off of `std::true_type` if `T` has a member variable 29 : /// `RegisterWithObserver` 30 : template <class T, class = std::void_t<>> 31 1 : struct has_register_with_observer : std::false_type {}; 32 : 33 : /// \cond 34 : template <class T> 35 : struct has_register_with_observer< 36 : T, std::void_t<decltype(T::RegisterWithObserver)>> : std::true_type {}; 37 : /// \endcond 38 : 39 : template <class T> 40 0 : constexpr bool has_register_with_observer_v = 41 : has_register_with_observer<T>::value; 42 : /// @} 43 : } // namespace observers