Line data Source code
1 : //
2 : // Author: Vladimir Migashko <migashko@gmail.com>, (C) 2012
3 : //
4 : // Copyright: See COPYING file that comes with this distribution
5 : //
6 :
7 : #ifndef VSET_VSET_BUFFER_INMEM_AD_TRUNCATE_HPP
8 : #define VSET_VSET_BUFFER_INMEM_AD_TRUNCATE_HPP
9 :
10 : #include <vset/buffer/tags.hpp>
11 : #include <vset/buffer/inmem/tags.hpp>
12 :
13 : namespace vset { namespace buffer { namespace inmem{
14 :
15 24 : struct ad_truncate
16 : {
17 : template<typename T>
18 1 : void operator()( T& t, typename T::aspect::template advice_cast<_size_type_>::type size )
19 : {
20 1 : if ( size > t.get_aspect().template get<_container_>().size() )
21 0 : t.get_aspect().template get<_container_>().reserve(size);
22 1 : else if ( size < t.get_aspect().template get<_container_>().size() )
23 : {
24 : typedef typename T::aspect::template advice_cast<_container_>::type container;
25 2 : container(
26 : t.get_aspect().template get<_container_>().begin(),
27 1 : t.get_aspect().template get<_container_>().begin() + static_cast<std::ptrdiff_t>(size)
28 : ).swap( t.get_aspect().template get<_container_>() );
29 :
30 : }
31 0 : else if ( size < t.get_aspect().template get<_container_>().capacity() )
32 : {
33 : typedef typename T::aspect::template advice_cast<_container_>::type container;
34 0 : container(
35 : t.get_aspect().template get<_container_>().begin(),
36 : t.get_aspect().template get<_container_>().end()
37 : ).swap( t.get_aspect().template get<_container_>() );
38 : }
39 1 : }
40 : };
41 :
42 : }}}
43 :
44 : #endif
|