1 ///////////////////////////////////////////////////////////////////////////
3 // (C) Copyright Ion Gaztanaga 2006. Distributed under the Boost
4 // Software License, Version 1.0. (See accompanying file
5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 // See http://www.boost.org/libs/container for documentation.
9 ///////////////////////////////////////////////////////////////////////////
11 #ifndef BOOST_CONTAINER_TEST_MOVABLE_INT_HEADER
12 #define BOOST_CONTAINER_TEST_MOVABLE_INT_HEADER
14 #include <boost/container/detail/config_begin.hpp>
15 #include <boost/container/detail/workaround.hpp>
16 #include <boost/move/move.hpp>
26 struct is_copyable<int>
28 static const bool value = true;
34 BOOST_MOVABLE_BUT_NOT_COPYABLE(movable_int)
41 explicit movable_int(int a)
45 movable_int(BOOST_RV_REF(movable_int) mmi)
49 movable_int & operator= (BOOST_RV_REF(movable_int) mmi)
50 { this->m_int = mmi.m_int; mmi.m_int = 0; return *this; }
52 movable_int & operator= (int i)
53 { this->m_int = i; return *this; }
55 bool operator ==(const movable_int &mi) const
56 { return this->m_int == mi.m_int; }
58 bool operator !=(const movable_int &mi) const
59 { return this->m_int != mi.m_int; }
61 bool operator <(const movable_int &mi) const
62 { return this->m_int < mi.m_int; }
64 bool operator <=(const movable_int &mi) const
65 { return this->m_int <= mi.m_int; }
67 bool operator >=(const movable_int &mi) const
68 { return this->m_int >= mi.m_int; }
70 bool operator >(const movable_int &mi) const
71 { return this->m_int > mi.m_int; }
80 template<class E, class T>
81 std::basic_ostream<E, T> & operator<<
82 (std::basic_ostream<E, T> & os, movable_int const & p)
91 struct is_copyable<movable_int>
93 static const bool value = false;
96 class movable_and_copyable_int
98 BOOST_COPYABLE_AND_MOVABLE(movable_and_copyable_int)
101 movable_and_copyable_int()
105 explicit movable_and_copyable_int(int a)
109 movable_and_copyable_int(const movable_and_copyable_int& mmi)
113 movable_and_copyable_int(BOOST_RV_REF(movable_and_copyable_int) mmi)
117 movable_and_copyable_int &operator= (BOOST_COPY_ASSIGN_REF(movable_and_copyable_int) mi)
118 { this->m_int = mi.m_int; return *this; }
120 movable_and_copyable_int & operator= (BOOST_RV_REF(movable_and_copyable_int) mmi)
121 { this->m_int = mmi.m_int; mmi.m_int = 0; return *this; }
123 movable_and_copyable_int & operator= (int i)
124 { this->m_int = i; return *this; }
126 bool operator ==(const movable_and_copyable_int &mi) const
127 { return this->m_int == mi.m_int; }
129 bool operator !=(const movable_and_copyable_int &mi) const
130 { return this->m_int != mi.m_int; }
132 bool operator <(const movable_and_copyable_int &mi) const
133 { return this->m_int < mi.m_int; }
135 bool operator <=(const movable_and_copyable_int &mi) const
136 { return this->m_int <= mi.m_int; }
138 bool operator >=(const movable_and_copyable_int &mi) const
139 { return this->m_int >= mi.m_int; }
141 bool operator >(const movable_and_copyable_int &mi) const
142 { return this->m_int > mi.m_int; }
151 template<class E, class T>
152 std::basic_ostream<E, T> & operator<<
153 (std::basic_ostream<E, T> & os, movable_and_copyable_int const & p)
161 struct is_copyable<movable_and_copyable_int>
163 static const bool value = true;
173 explicit copyable_int(int a)
177 copyable_int(const copyable_int& mmi)
181 copyable_int & operator= (int i)
182 { this->m_int = i; return *this; }
184 bool operator ==(const copyable_int &mi) const
185 { return this->m_int == mi.m_int; }
187 bool operator !=(const copyable_int &mi) const
188 { return this->m_int != mi.m_int; }
190 bool operator <(const copyable_int &mi) const
191 { return this->m_int < mi.m_int; }
193 bool operator <=(const copyable_int &mi) const
194 { return this->m_int <= mi.m_int; }
196 bool operator >=(const copyable_int &mi) const
197 { return this->m_int >= mi.m_int; }
199 bool operator >(const copyable_int &mi) const
200 { return this->m_int > mi.m_int; }
209 template<class E, class T>
210 std::basic_ostream<E, T> & operator<<
211 (std::basic_ostream<E, T> & os, copyable_int const & p)
219 struct is_copyable<copyable_int>
221 static const bool value = true;
224 class non_copymovable_int
226 non_copymovable_int(const non_copymovable_int& mmi);
227 non_copymovable_int & operator= (const non_copymovable_int &mi);
230 non_copymovable_int()
234 explicit non_copymovable_int(int a)
238 bool operator ==(const non_copymovable_int &mi) const
239 { return this->m_int == mi.m_int; }
241 bool operator !=(const non_copymovable_int &mi) const
242 { return this->m_int != mi.m_int; }
244 bool operator <(const non_copymovable_int &mi) const
245 { return this->m_int < mi.m_int; }
247 bool operator <=(const non_copymovable_int &mi) const
248 { return this->m_int <= mi.m_int; }
250 bool operator >=(const non_copymovable_int &mi) const
251 { return this->m_int >= mi.m_int; }
253 bool operator >(const non_copymovable_int &mi) const
254 { return this->m_int > mi.m_int; }
264 } //namespace container {
265 } //namespace boost {
267 #include <boost/container/detail/config_end.hpp>
269 #endif //#ifndef BOOST_CONTAINER_TEST_MOVABLE_INT_HEADER