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_BUFFER_BASE_HPP
8 : #define VSET_VSET_BUFFER_BUFFER_BASE_HPP
9 :
10 : #include <fas/aop.hpp>
11 : #include <vset/buffer/tags.hpp>
12 : namespace vset { namespace buffer{
13 :
14 : template<typename A /*= fas::aspect<>*/ >
15 : class buffer_base
16 : : public fas::aspect_class<A>
17 : {
18 : typedef fas::aspect_class<A> super;
19 : public:
20 :
21 : typedef typename super::aspect::template advice_cast<_size_type_>::type size_type;
22 : typedef typename super::aspect::template advice_cast<_data_type_>::type data_type;
23 :
24 5 : ~buffer_base()
25 : {
26 5 : _constructor(*this);
27 5 : }
28 :
29 5 : buffer_base()
30 5 : {
31 5 : _destructor(*this);
32 5 : }
33 :
34 : template<typename T>
35 5 : void _constructor(T& t)
36 : {
37 5 : t.get_aspect().template getg< _destructor_ >()(t);
38 5 : }
39 :
40 : template<typename T>
41 5 : void _destructor(T& t)
42 : {
43 5 : t.get_aspect().template getg< _destructor_ >()(t);
44 5 : }
45 :
46 : template<typename T>
47 159 : data_type _data(T& t)
48 : {
49 159 : return t.get_aspect().template get<_data_>()(t);
50 : }
51 :
52 : template<typename T>
53 : data_type _data(T& t) const
54 : {
55 : return t.get_aspect().template get<_data_>()(t);
56 : }
57 :
58 : template<typename T>
59 24 : size_type _size(T& t) const
60 : {
61 24 : return t.get_aspect().template get<_size_>()(t);
62 : }
63 :
64 : template<typename T>
65 27 : size_type _capacity(T& t) const
66 : {
67 27 : return t.get_aspect().template get<_capacity_>()(t);
68 : }
69 :
70 : template<typename T>
71 6 : void _resize(T& t, size_type size)
72 : {
73 6 : t.get_aspect().template get<_resize_>()(t, size);
74 6 : }
75 :
76 : template<typename T>
77 5 : void _truncate(T& t, size_type size)
78 : {
79 5 : t.get_aspect().template get<_truncate_>()(t, size);
80 5 : }
81 :
82 :
83 : template<typename T>
84 6 : void _reserve(T& t, size_type size)
85 : {
86 6 : t.get_aspect().template get<_reserve_>()(t, size);
87 6 : }
88 :
89 : template<typename T>
90 3 : void _clear(T& t)
91 : {
92 3 : t.get_aspect().template get<_clear_>()(t);
93 3 : }
94 : };
95 :
96 : }}
97 :
98 : #endif
|