123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- ///////////////////////////////////////////////////////////////////////////
- //
- // (C) Copyright Ion Gaztanaga 2006-2012. 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)
- //
- // See http://www.boost.org/libs/interprocess for documentation.
- //
- ///////////////////////////////////////////////////////////////////////////
- #ifndef BOOST_INTERPROCESS_TEST_MOVABLE_INT_HEADER
- #define BOOST_INTERPROCESS_TEST_MOVABLE_INT_HEADER
- #include <boost/interprocess/detail/config_begin.hpp>
- #include <boost/interprocess/detail/workaround.hpp>
- #include <boost/move/utility_core.hpp>
- namespace boost {
- namespace interprocess {
- namespace test {
- template<class T>
- struct is_copyable;
- template<>
- struct is_copyable<int>
- {
- static const bool value = true;
- };
- class movable_int
- {
- BOOST_MOVABLE_BUT_NOT_COPYABLE(movable_int)
- public:
- movable_int()
- : m_int(0)
- {}
- explicit movable_int(int a)
- : m_int(a)
- {}
- movable_int(BOOST_RV_REF(movable_int) mmi)
- : m_int(mmi.m_int)
- { mmi.m_int = 0; }
- movable_int & operator= (BOOST_RV_REF(movable_int) mmi)
- { this->m_int = mmi.m_int; mmi.m_int = 0; return *this; }
- movable_int & operator= (int i)
- { this->m_int = i; return *this; }
- bool operator ==(const movable_int &mi) const
- { return this->m_int == mi.m_int; }
- bool operator !=(const movable_int &mi) const
- { return this->m_int != mi.m_int; }
- bool operator <(const movable_int &mi) const
- { return this->m_int < mi.m_int; }
- bool operator <=(const movable_int &mi) const
- { return this->m_int <= mi.m_int; }
- bool operator >=(const movable_int &mi) const
- { return this->m_int >= mi.m_int; }
- bool operator >(const movable_int &mi) const
- { return this->m_int > mi.m_int; }
- int get_int() const
- { return m_int; }
- friend bool operator==(const movable_int &l, int r)
- { return l.get_int() == r; }
- friend bool operator==(int l, const movable_int &r)
- { return l == r.get_int(); }
- private:
- int m_int;
- };
- template<class E, class T>
- std::basic_ostream<E, T> & operator<<
- (std::basic_ostream<E, T> & os, movable_int const & p)
- {
- os << p.get_int();
- return os;
- }
- template<>
- struct is_copyable<movable_int>
- {
- static const bool value = false;
- };
- class movable_and_copyable_int
- {
- BOOST_COPYABLE_AND_MOVABLE(movable_and_copyable_int)
- public:
- movable_and_copyable_int()
- : m_int(0)
- {}
- explicit movable_and_copyable_int(int a)
- : m_int(a)
- {}
- movable_and_copyable_int(const movable_and_copyable_int& mmi)
- : m_int(mmi.m_int)
- {}
- movable_and_copyable_int(BOOST_RV_REF(movable_and_copyable_int) mmi)
- : m_int(mmi.m_int)
- { mmi.m_int = 0; }
- movable_and_copyable_int &operator= (BOOST_COPY_ASSIGN_REF(movable_and_copyable_int) mi)
- { this->m_int = mi.m_int; return *this; }
- movable_and_copyable_int & operator= (BOOST_RV_REF(movable_and_copyable_int) mmi)
- { this->m_int = mmi.m_int; mmi.m_int = 0; return *this; }
- movable_and_copyable_int & operator= (int i)
- { this->m_int = i; return *this; }
- bool operator ==(const movable_and_copyable_int &mi) const
- { return this->m_int == mi.m_int; }
- bool operator !=(const movable_and_copyable_int &mi) const
- { return this->m_int != mi.m_int; }
- bool operator <(const movable_and_copyable_int &mi) const
- { return this->m_int < mi.m_int; }
- bool operator <=(const movable_and_copyable_int &mi) const
- { return this->m_int <= mi.m_int; }
- bool operator >=(const movable_and_copyable_int &mi) const
- { return this->m_int >= mi.m_int; }
- bool operator >(const movable_and_copyable_int &mi) const
- { return this->m_int > mi.m_int; }
- int get_int() const
- { return m_int; }
- friend bool operator==(const movable_and_copyable_int &l, int r)
- { return l.get_int() == r; }
- friend bool operator==(int l, const movable_and_copyable_int &r)
- { return l == r.get_int(); }
- private:
- int m_int;
- };
- template<class E, class T>
- std::basic_ostream<E, T> & operator<<
- (std::basic_ostream<E, T> & os, movable_and_copyable_int const & p)
- {
- os << p.get_int();
- return os;
- }
- template<>
- struct is_copyable<movable_and_copyable_int>
- {
- static const bool value = true;
- };
- class copyable_int
- {
- public:
- copyable_int()
- : m_int(0)
- {}
- explicit copyable_int(int a)
- : m_int(a)
- {}
- copyable_int(const copyable_int& mmi)
- : m_int(mmi.m_int)
- {}
- copyable_int & operator= (int i)
- { this->m_int = i; return *this; }
- bool operator ==(const copyable_int &mi) const
- { return this->m_int == mi.m_int; }
- bool operator !=(const copyable_int &mi) const
- { return this->m_int != mi.m_int; }
- bool operator <(const copyable_int &mi) const
- { return this->m_int < mi.m_int; }
- bool operator <=(const copyable_int &mi) const
- { return this->m_int <= mi.m_int; }
- bool operator >=(const copyable_int &mi) const
- { return this->m_int >= mi.m_int; }
- bool operator >(const copyable_int &mi) const
- { return this->m_int > mi.m_int; }
- int get_int() const
- { return m_int; }
- friend bool operator==(const copyable_int &l, int r)
- { return l.get_int() == r; }
- friend bool operator==(int l, const copyable_int &r)
- { return l == r.get_int(); }
- private:
- int m_int;
- };
- template<class E, class T>
- std::basic_ostream<E, T> & operator<<
- (std::basic_ostream<E, T> & os, copyable_int const & p)
- {
- os << p.get_int();
- return os;
- }
- template<>
- struct is_copyable<copyable_int>
- {
- static const bool value = true;
- };
- class non_copymovable_int
- {
- non_copymovable_int(const non_copymovable_int& mmi);
- non_copymovable_int & operator= (const non_copymovable_int &mi);
- public:
- non_copymovable_int()
- : m_int(0)
- {}
- explicit non_copymovable_int(int a)
- : m_int(a)
- {}
- bool operator ==(const non_copymovable_int &mi) const
- { return this->m_int == mi.m_int; }
- bool operator !=(const non_copymovable_int &mi) const
- { return this->m_int != mi.m_int; }
- bool operator <(const non_copymovable_int &mi) const
- { return this->m_int < mi.m_int; }
- bool operator <=(const non_copymovable_int &mi) const
- { return this->m_int <= mi.m_int; }
- bool operator >=(const non_copymovable_int &mi) const
- { return this->m_int >= mi.m_int; }
- bool operator >(const non_copymovable_int &mi) const
- { return this->m_int > mi.m_int; }
- int get_int() const
- { return m_int; }
- friend bool operator==(const non_copymovable_int &l, int r)
- { return l.get_int() == r; }
- friend bool operator==(int l, const non_copymovable_int &r)
- { return l == r.get_int(); }
- private:
- int m_int;
- };
- } //namespace test {
- } //namespace interprocess {
- } //namespace boost {
- #include <boost/interprocess/detail/config_end.hpp>
- #endif //#ifndef BOOST_INTERPROCESS_TEST_MOVABLE_INT_HEADER
|