Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/range/size.hpp @ 101:c530137014c0
Update Boost headers (1.58.0)
author | Chris Cannam |
---|---|
date | Mon, 07 Sep 2015 11:12:49 +0100 |
parents | 2665513ce2d3 |
children |
comparison
equal
deleted
inserted
replaced
100:793467b5e61c | 101:c530137014c0 |
---|---|
9 // | 9 // |
10 | 10 |
11 #ifndef BOOST_RANGE_SIZE_HPP | 11 #ifndef BOOST_RANGE_SIZE_HPP |
12 #define BOOST_RANGE_SIZE_HPP | 12 #define BOOST_RANGE_SIZE_HPP |
13 | 13 |
14 #if defined(_MSC_VER) && (_MSC_VER >= 1200) | 14 #if defined(_MSC_VER) |
15 # pragma once | 15 # pragma once |
16 #endif | 16 #endif |
17 | 17 |
18 #include <boost/range/config.hpp> | 18 #include <boost/range/config.hpp> |
19 #include <boost/range/begin.hpp> | 19 #include <boost/range/begin.hpp> |
20 #include <boost/range/end.hpp> | 20 #include <boost/range/end.hpp> |
21 #include <boost/range/size_type.hpp> | 21 #include <boost/range/size_type.hpp> |
22 #include <boost/range/detail/has_member_size.hpp> | |
22 #include <boost/assert.hpp> | 23 #include <boost/assert.hpp> |
24 #include <boost/cstdint.hpp> | |
25 #include <boost/utility.hpp> | |
23 | 26 |
24 namespace boost | 27 namespace boost |
25 { | 28 { |
26 namespace range_detail | 29 namespace range_detail |
27 { | 30 { |
31 | |
28 template<class SinglePassRange> | 32 template<class SinglePassRange> |
29 inline BOOST_DEDUCED_TYPENAME range_size<const SinglePassRange>::type | 33 inline typename ::boost::enable_if< |
34 has_member_size<SinglePassRange>, | |
35 typename range_size<const SinglePassRange>::type | |
36 >::type | |
30 range_calculate_size(const SinglePassRange& rng) | 37 range_calculate_size(const SinglePassRange& rng) |
31 { | 38 { |
32 BOOST_ASSERT( (boost::end(rng) - boost::begin(rng)) >= 0 && | 39 return rng.size(); |
33 "reachability invariant broken!" ); | 40 } |
34 return boost::end(rng) - boost::begin(rng); | 41 |
42 template<class SinglePassRange> | |
43 inline typename disable_if< | |
44 has_member_size<SinglePassRange>, | |
45 typename range_size<const SinglePassRange>::type | |
46 >::type | |
47 range_calculate_size(const SinglePassRange& rng) | |
48 { | |
49 return std::distance(boost::begin(rng), boost::end(rng)); | |
35 } | 50 } |
36 } | 51 } |
37 | 52 |
38 template<class SinglePassRange> | 53 template<class SinglePassRange> |
39 inline BOOST_DEDUCED_TYPENAME range_size<const SinglePassRange>::type | 54 inline typename range_size<const SinglePassRange>::type |
40 size(const SinglePassRange& rng) | 55 size(const SinglePassRange& rng) |
41 { | 56 { |
42 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \ | 57 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \ |
43 !BOOST_WORKAROUND(__GNUC__, < 3) \ | 58 !BOOST_WORKAROUND(__GNUC__, < 3) \ |
44 /**/ | 59 /**/ |