boost/interprocess/sync/cv_status.hpp
// cv_status.hpp // // Copyright (C) 2011 Vicente J. Botet Escriba // Copyright (C) 2021 Ion Gaztanaga // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_INTERPROCESS_CV_STATUS_HPP #define BOOST_INTERPROCESS_CV_STATUS_HPP #include <boost/config.hpp> namespace boost { namespace interprocess { #if !defined(BOOST_NO_CXX11_SCOPED_ENUMS) enum class cv_status { no_timeout, timeout }; #else //BOOST_NO_CXX11_SCOPED_ENUMS // enum class cv_status emulation struct cv_status { typedef void is_boost_scoped_enum_tag; typedef int underlying_type; cv_status() {} explicit cv_status(underlying_type v) : v_(v) {} underlying_type get_underlying_value_() const { return v_; } private: underlying_type v_; typedef cv_status self_type; public: enum enum_type { no_timeout, timeout }; cv_status(enum_type v) : v_(v) {} enum_type get_native_value_() const { return enum_type(v_); } friend bool operator ==(self_type lhs, self_type rhs) { return enum_type(lhs.v_)==enum_type(rhs.v_); } friend bool operator ==(self_type lhs, enum_type rhs) { return enum_type(lhs.v_)==rhs; } friend bool operator ==(enum_type lhs, self_type rhs) { return lhs==enum_type(rhs.v_); } friend bool operator !=(self_type lhs, self_type rhs) { return enum_type(lhs.v_)!=enum_type(rhs.v_); } friend bool operator !=(self_type lhs, enum_type rhs) { return enum_type(lhs.v_)!=rhs; } friend bool operator !=(enum_type lhs, self_type rhs) { return lhs!=enum_type(rhs.v_); } friend bool operator <(self_type lhs, self_type rhs) { return enum_type(lhs.v_)<enum_type(rhs.v_); } friend bool operator <(self_type lhs, enum_type rhs) { return enum_type(lhs.v_)<rhs; } friend bool operator <(enum_type lhs, self_type rhs) { return lhs<enum_type(rhs.v_); } friend bool operator <=(self_type lhs, self_type rhs) { return enum_type(lhs.v_)<=enum_type(rhs.v_); } friend bool operator <=(self_type lhs, enum_type rhs) { return enum_type(lhs.v_)<=rhs; } friend bool operator <=(enum_type lhs, self_type rhs) { return lhs<=enum_type(rhs.v_); } friend bool operator >(self_type lhs, self_type rhs) { return enum_type(lhs.v_)>enum_type(rhs.v_); } friend bool operator >(self_type lhs, enum_type rhs) { return enum_type(lhs.v_)>rhs; } friend bool operator >(enum_type lhs, self_type rhs) { return lhs>enum_type(rhs.v_); } friend bool operator >=(self_type lhs, self_type rhs) { return enum_type(lhs.v_)>=enum_type(rhs.v_); } friend bool operator >=(self_type lhs, enum_type rhs) { return enum_type(lhs.v_)>=rhs; } friend bool operator >=(enum_type lhs, self_type rhs) { return lhs>=enum_type(rhs.v_); } }; #endif } //namespace interprocess } //namespace boost #endif // header