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_PERSISTENT_MMAP_AD_RESIZE_HPP
8 : #define VSET_VSET_BUFFER_PERSISTENT_MMAP_AD_RESIZE_HPP
9 :
10 : #include <vset/buffer/tags.hpp>
11 : #include <vset/buffer/persistent/tags.hpp>
12 :
13 : #include <unistd.h>
14 : #include <sys/mman.h>
15 :
16 : namespace vset { namespace buffer { namespace persistent{ namespace mmap{
17 :
18 9 : struct ad_resize
19 : {
20 : template<typename T>
21 19 : void operator()( T& t, size_t size)
22 : {
23 19 : size_t capacity = t.get_aspect().template get<_capacity_>()(t);
24 19 : if ( size <= capacity )
25 : {
26 1 : t.get_aspect().template get<_head_>()(t)->set_size(size);
27 1 : t.get_aspect().template get<_size_value_>()=size;
28 : }
29 : else
30 : {
31 18 : t.get_aspect().template get<_reserve_>()(t, size);
32 18 : t.get_aspect().template get<_head_>()(t)->set_size(size);
33 18 : t.get_aspect().template get<_size_value_>()=size;
34 : }
35 19 : }
36 : };
37 :
38 : }}}}
39 :
40 : #endif
|