1 /////////////////////////////////////////////////////////////////////////////
3 // (C) Copyright Ion Gaztanaga 2014-2014
5 // Distributed under the Boost Software License, Version 1.0.
6 // (See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
9 // See http://www.boost.org/libs/intrusive for documentation.
11 /////////////////////////////////////////////////////////////////////////////
13 #ifndef BOOST_INTRUSIVE_DETAIL_SIZE_HOLDER_HPP
14 #define BOOST_INTRUSIVE_DETAIL_SIZE_HOLDER_HPP
16 #ifndef BOOST_CONFIG_HPP
17 # include <boost/config.hpp>
20 #if defined(BOOST_HAS_PRAGMA_ONCE)
24 #include <boost/intrusive/detail/workaround.hpp>
30 template<bool ConstantSize, class SizeType, class Tag = void>
33 static const bool constant_time_size = ConstantSize;
34 typedef SizeType size_type;
36 BOOST_INTRUSIVE_FORCEINLINE SizeType get_size() const
39 BOOST_INTRUSIVE_FORCEINLINE void set_size(SizeType size)
42 BOOST_INTRUSIVE_FORCEINLINE void decrement()
45 BOOST_INTRUSIVE_FORCEINLINE void increment()
48 BOOST_INTRUSIVE_FORCEINLINE void increase(SizeType n)
51 BOOST_INTRUSIVE_FORCEINLINE void decrease(SizeType n)
54 BOOST_INTRUSIVE_FORCEINLINE void swap(size_holder &other)
55 { SizeType tmp(size_); size_ = other.size_; other.size_ = tmp; }
60 template<class SizeType, class Tag>
61 struct size_holder<false, SizeType, Tag>
63 static const bool constant_time_size = false;
64 typedef SizeType size_type;
66 BOOST_INTRUSIVE_FORCEINLINE size_type get_size() const
69 BOOST_INTRUSIVE_FORCEINLINE void set_size(size_type)
72 BOOST_INTRUSIVE_FORCEINLINE void decrement()
75 BOOST_INTRUSIVE_FORCEINLINE void increment()
78 BOOST_INTRUSIVE_FORCEINLINE void increase(SizeType)
81 BOOST_INTRUSIVE_FORCEINLINE void decrease(SizeType)
84 BOOST_INTRUSIVE_FORCEINLINE void swap(size_holder){}
88 } //namespace intrusive{
91 #endif //BOOST_INTRUSIVE_DETAIL_SIZE_HOLDER_HPP