Chris@102
|
1 /////////////////////////////////////////////////////////////////////////////
|
Chris@102
|
2 //
|
Chris@102
|
3 // (C) Copyright Ion Gaztanaga 2014-2014
|
Chris@102
|
4 //
|
Chris@102
|
5 // Distributed under the Boost Software License, Version 1.0.
|
Chris@102
|
6 // (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@102
|
7 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@102
|
8 //
|
Chris@102
|
9 // See http://www.boost.org/libs/intrusive for documentation.
|
Chris@102
|
10 //
|
Chris@102
|
11 /////////////////////////////////////////////////////////////////////////////
|
Chris@102
|
12
|
Chris@102
|
13 #ifndef BOOST_INTRUSIVE_DETAIL_SIZE_HOLDER_HPP
|
Chris@102
|
14 #define BOOST_INTRUSIVE_DETAIL_SIZE_HOLDER_HPP
|
Chris@102
|
15
|
Chris@102
|
16 #ifndef BOOST_CONFIG_HPP
|
Chris@102
|
17 # include <boost/config.hpp>
|
Chris@102
|
18 #endif
|
Chris@102
|
19
|
Chris@102
|
20 #if defined(BOOST_HAS_PRAGMA_ONCE)
|
Chris@102
|
21 # pragma once
|
Chris@102
|
22 #endif
|
Chris@102
|
23
|
Chris@102
|
24 namespace boost {
|
Chris@102
|
25 namespace intrusive {
|
Chris@102
|
26 namespace detail {
|
Chris@102
|
27
|
Chris@102
|
28 template<bool ConstantSize, class SizeType, class Tag = void>
|
Chris@102
|
29 struct size_holder
|
Chris@102
|
30 {
|
Chris@102
|
31 static const bool constant_time_size = ConstantSize;
|
Chris@102
|
32 typedef SizeType size_type;
|
Chris@102
|
33
|
Chris@102
|
34 SizeType get_size() const
|
Chris@102
|
35 { return size_; }
|
Chris@102
|
36
|
Chris@102
|
37 void set_size(SizeType size)
|
Chris@102
|
38 { size_ = size; }
|
Chris@102
|
39
|
Chris@102
|
40 void decrement()
|
Chris@102
|
41 { --size_; }
|
Chris@102
|
42
|
Chris@102
|
43 void increment()
|
Chris@102
|
44 { ++size_; }
|
Chris@102
|
45
|
Chris@102
|
46 void increase(SizeType n)
|
Chris@102
|
47 { size_ += n; }
|
Chris@102
|
48
|
Chris@102
|
49 void decrease(SizeType n)
|
Chris@102
|
50 { size_ -= n; }
|
Chris@102
|
51
|
Chris@102
|
52 SizeType size_;
|
Chris@102
|
53 };
|
Chris@102
|
54
|
Chris@102
|
55 template<class SizeType, class Tag>
|
Chris@102
|
56 struct size_holder<false, SizeType, Tag>
|
Chris@102
|
57 {
|
Chris@102
|
58 static const bool constant_time_size = false;
|
Chris@102
|
59 typedef SizeType size_type;
|
Chris@102
|
60
|
Chris@102
|
61 size_type get_size() const
|
Chris@102
|
62 { return 0; }
|
Chris@102
|
63
|
Chris@102
|
64 void set_size(size_type)
|
Chris@102
|
65 {}
|
Chris@102
|
66
|
Chris@102
|
67 void decrement()
|
Chris@102
|
68 {}
|
Chris@102
|
69
|
Chris@102
|
70 void increment()
|
Chris@102
|
71 {}
|
Chris@102
|
72
|
Chris@102
|
73 void increase(SizeType)
|
Chris@102
|
74 {}
|
Chris@102
|
75
|
Chris@102
|
76 void decrease(SizeType)
|
Chris@102
|
77 {}
|
Chris@102
|
78 };
|
Chris@102
|
79
|
Chris@102
|
80 } //namespace detail{
|
Chris@102
|
81 } //namespace intrusive{
|
Chris@102
|
82 } //namespace boost{
|
Chris@102
|
83
|
Chris@102
|
84 #endif //BOOST_INTRUSIVE_DETAIL_SIZE_HOLDER_HPP
|