annotate DEPENDENCIES/generic/include/boost/pointee.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 #ifndef POINTEE_DWA200415_HPP
Chris@16 2 # define POINTEE_DWA200415_HPP
Chris@16 3
Chris@16 4 //
Chris@16 5 // Copyright David Abrahams 2004. Use, modification and distribution is
Chris@16 6 // subject to the Boost Software License, Version 1.0. (See accompanying
Chris@16 7 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 8 //
Chris@16 9 // typename pointee<P>::type provides the pointee type of P.
Chris@16 10 //
Chris@16 11 // For example, it is T for T* and X for shared_ptr<X>.
Chris@16 12 //
Chris@16 13 // http://www.boost.org/libs/iterator/doc/pointee.html
Chris@16 14 //
Chris@16 15
Chris@16 16 # include <boost/detail/is_incrementable.hpp>
Chris@16 17 # include <boost/iterator/iterator_traits.hpp>
Chris@16 18 # include <boost/type_traits/add_const.hpp>
Chris@16 19 # include <boost/type_traits/remove_cv.hpp>
Chris@16 20 # include <boost/mpl/if.hpp>
Chris@16 21 # include <boost/mpl/eval_if.hpp>
Chris@16 22
Chris@101 23 namespace boost {
Chris@16 24
Chris@16 25 namespace detail
Chris@16 26 {
Chris@16 27 template <class P>
Chris@16 28 struct smart_ptr_pointee
Chris@16 29 {
Chris@16 30 typedef typename P::element_type type;
Chris@16 31 };
Chris@16 32
Chris@16 33 template <class Iterator>
Chris@16 34 struct iterator_pointee
Chris@16 35 {
Chris@16 36 typedef typename iterator_traits<Iterator>::value_type value_type;
Chris@101 37
Chris@16 38 struct impl
Chris@16 39 {
Chris@16 40 template <class T>
Chris@16 41 static char test(T const&);
Chris@101 42
Chris@16 43 static char (& test(value_type&) )[2];
Chris@101 44
Chris@16 45 static Iterator& x;
Chris@16 46 };
Chris@101 47
Chris@16 48 BOOST_STATIC_CONSTANT(bool, is_constant = sizeof(impl::test(*impl::x)) == 1);
Chris@101 49
Chris@16 50 typedef typename mpl::if_c<
Chris@16 51 # if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
Chris@16 52 ::boost::detail::iterator_pointee<Iterator>::is_constant
Chris@16 53 # else
Chris@16 54 is_constant
Chris@101 55 # endif
Chris@16 56 , typename add_const<value_type>::type
Chris@16 57 , value_type
Chris@16 58 >::type type;
Chris@16 59 };
Chris@16 60 }
Chris@16 61
Chris@16 62 template <class P>
Chris@16 63 struct pointee
Chris@16 64 : mpl::eval_if<
Chris@16 65 detail::is_incrementable<P>
Chris@16 66 , detail::iterator_pointee<P>
Chris@16 67 , detail::smart_ptr_pointee<P>
Chris@16 68 >
Chris@16 69 {
Chris@16 70 };
Chris@101 71
Chris@16 72 } // namespace boost
Chris@16 73
Chris@16 74 #endif // POINTEE_DWA200415_HPP