Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/container/detail/next_capacity.hpp @ 102:f46d142149f5
Whoops, finish that update
author | Chris Cannam |
---|---|
date | Mon, 07 Sep 2015 11:13:41 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
101:c530137014c0 | 102:f46d142149f5 |
---|---|
1 ////////////////////////////////////////////////////////////////////////////// | |
2 // | |
3 // (C) Copyright Ion Gaztanaga 2014-2015. Distributed under the Boost | |
4 // Software License, Version 1.0. (See accompanying file | |
5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
6 // | |
7 // See http://www.boost.org/libs/container for documentation. | |
8 // | |
9 ////////////////////////////////////////////////////////////////////////////// | |
10 #ifndef BOOST_CONTAINER_DETAIL_NEXT_CAPACITY_HPP | |
11 #define BOOST_CONTAINER_DETAIL_NEXT_CAPACITY_HPP | |
12 | |
13 #ifndef BOOST_CONFIG_HPP | |
14 # include <boost/config.hpp> | |
15 #endif | |
16 | |
17 #if defined(BOOST_HAS_PRAGMA_ONCE) | |
18 # pragma once | |
19 #endif | |
20 | |
21 // container | |
22 #include <boost/container/throw_exception.hpp> | |
23 // container/detail | |
24 #include <boost/container/detail/min_max.hpp> | |
25 | |
26 namespace boost { | |
27 namespace container { | |
28 namespace container_detail { | |
29 | |
30 enum NextCapacityOption { NextCapacityDouble, NextCapacity60Percent }; | |
31 | |
32 template<class SizeType, NextCapacityOption Option> | |
33 struct next_capacity_calculator; | |
34 | |
35 template<class SizeType> | |
36 struct next_capacity_calculator<SizeType, NextCapacityDouble> | |
37 { | |
38 static SizeType get(const SizeType max_size | |
39 ,const SizeType capacity | |
40 ,const SizeType n) | |
41 { | |
42 const SizeType remaining = max_size - capacity; | |
43 if ( remaining < n ) | |
44 boost::container::throw_length_error("get_next_capacity, allocator's max_size reached"); | |
45 const SizeType additional = max_value(n, capacity); | |
46 return ( remaining < additional ) ? max_size : ( capacity + additional ); | |
47 } | |
48 }; | |
49 | |
50 template<class SizeType> | |
51 struct next_capacity_calculator<SizeType, NextCapacity60Percent> | |
52 { | |
53 static SizeType get(const SizeType max_size | |
54 ,const SizeType capacity | |
55 ,const SizeType n) | |
56 { | |
57 const SizeType remaining = max_size - capacity; | |
58 if ( remaining < n ) | |
59 boost::container::throw_length_error("get_next_capacity, allocator's max_size reached"); | |
60 const SizeType m3 = max_size/3; | |
61 | |
62 if (capacity < m3) | |
63 return capacity + max_value(3*(capacity+1)/5, n); | |
64 | |
65 if (capacity < m3*2) | |
66 return capacity + max_value((capacity+1)/2, n); | |
67 return max_size; | |
68 } | |
69 }; | |
70 | |
71 } //namespace container_detail { | |
72 } //namespace container { | |
73 } //namespace boost { | |
74 | |
75 #endif //#ifndef BOOST_CONTAINER_DETAIL_NEXT_CAPACITY_HPP |