1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- //////////////////////////////////////////////////////////////////////////////
- //
- // (C) Copyright David Abrahams, Vicente Botet, Ion Gaztanaga 2009.
- // 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/move for documentation.
- //
- //////////////////////////////////////////////////////////////////////////////
- #include <boost/move/detail/config_begin.hpp>
- // move
- #include <boost/move/algorithm.hpp>
- #include <boost/move/iterator.hpp>
- // container
- #include <boost/container/deque.hpp>
- #include <boost/container/list.hpp>
- #include <boost/container/stable_vector.hpp>
- #include "../example/movable.hpp"
- template<class Container>
- int move_test()
- {
- bool use_move_iterator = false;
- bool done = false;
- while(!done){
- //Default construct 10 movable objects
- Container v(10);
- //Test default constructed value
- if(v.begin()->moved()){
- return 1;
- }
- //Move values
- Container v2;
- if(use_move_iterator){
- ::boost::copy_or_move( boost::make_move_iterator(v.begin())
- , boost::make_move_iterator(v.end())
- , boost::back_move_inserter(v2));
- }
- else{
- std::copy(v.begin(), v.end(), boost::back_move_inserter(v2));
- }
- //Test values have been moved
- if(!v.begin()->moved()){
- return 1;
- }
- if(v2.size() != 10){
- return 1;
- }
- if(v2.begin()->moved()){
- return 1;
- }
- done = use_move_iterator;
- use_move_iterator = true;
- }
- return 0;
- }
- int main()
- {
- namespace bc = ::boost::container;
- if(move_test< bc::vector<movable> >()){
- return 1;
- }
- if(move_test< bc::list<movable> >()){
- return 1;
- }
- if(move_test< bc::stable_vector<movable> >()){
- return 1;
- }
- return 0;
- }
- #include <boost/move/detail/config_end.hpp>
|