Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/range/any_range.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children | c530137014c0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/range/any_range.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,205 @@ +// Copyright Neil Groves 2010. Use, modification and +// distribution is subject to the Boost Software License, Version +// 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// +// For more information, see http://www.boost.org/libs/range/ +// +#ifndef BOOST_RANGE_ANY_RANGE_HPP_INCLUDED +#define BOOST_RANGE_ANY_RANGE_HPP_INCLUDED + +#include <boost/config.hpp> +#include <boost/iterator/iterator_categories.hpp> +#include <boost/iterator/iterator_traits.hpp> +#include <boost/iterator/iterator_facade.hpp> +#include <boost/iterator/iterator_adaptor.hpp> +#include <boost/range/detail/any_iterator.hpp> +#include <boost/range/concepts.hpp> +#include <boost/range/reference.hpp> +#include <boost/range/value_type.hpp> +#include <boost/range/iterator_range_core.hpp> +#include <boost/cast.hpp> + +namespace boost +{ + namespace range_detail + { + // If T is use_default, return the result of Default, otherwise + // return T. + // + // This is an implementation artifact used to pick intelligent default + // values when the user specified boost::use_default as a template + // parameter. + template< + class T, + class Default + > + struct any_range_default_help + : mpl::eval_if< + is_same<T, use_default> + , Default + , mpl::identity<T> + > + { + }; + + template< + class WrappedRange + , class Value + , class Reference + > + struct any_range_value_type + { +# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY + typedef typename any_range_default_help< + Value + , mpl::eval_if< + is_same<Reference, use_default> + , range_value< + typename remove_const<WrappedRange> + ::type> + , remove_reference<Reference> + > + >::type type; +# else + typedef typename any_range_default_help< + Value + , range_value< + typename remove_const<WrappedRange> + ::type> + >::type type; +# endif + }; + + template< + class Value + , class Traversal + , class Reference + , class Difference + , class Buffer = use_default + > + class any_range + : public iterator_range< + any_iterator< + Value + , Traversal + , Reference + , Difference + , typename any_range_default_help< + Buffer + , mpl::identity<any_iterator_default_buffer> + >::type + > + > + { + typedef iterator_range< + any_iterator< + Value + , Traversal + , Reference + , Difference + , typename any_range_default_help< + Buffer + , mpl::identity<any_iterator_default_buffer> + >::type + > + > base_type; + + struct enabler {}; + struct disabler {}; + public: + any_range() + { + } + + any_range(const any_range& other) + : base_type(other) + { + } + + template<class WrappedRange> + any_range(WrappedRange& wrapped_range) + : base_type(boost::begin(wrapped_range), + boost::end(wrapped_range)) + { + } + + template<class WrappedRange> + any_range(const WrappedRange& wrapped_range) + : base_type(boost::begin(wrapped_range), + boost::end(wrapped_range)) + { + } + + template< + class OtherValue + , class OtherTraversal + , class OtherReference + , class OtherDifference + > + any_range(const any_range< + OtherValue + , OtherTraversal + , OtherReference + , OtherDifference + , Buffer + >& other) + : base_type(boost::begin(other), boost::end(other)) + { + } + + template<class Iterator> + any_range(Iterator first, Iterator last) + : base_type(first, last) + { + } + }; + + template< + class WrappedRange + , class Value = use_default + , class Traversal = use_default + , class Reference = use_default + , class Difference = use_default + , class Buffer = use_default + > + struct any_range_type_generator + { + BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<WrappedRange> )); + typedef any_range< + typename any_range_value_type< + WrappedRange + , Value + , typename any_range_default_help< + Reference + , range_reference<WrappedRange> + >::type + >::type + , typename any_range_default_help< + Traversal + , iterator_traversal< + typename range_iterator<WrappedRange>::type + > + >::type + , typename any_range_default_help< + Reference + , range_reference<WrappedRange> + >::type + , typename any_range_default_help< + Difference + , range_difference<WrappedRange> + >::type + , typename any_range_default_help< + Buffer + , mpl::identity<any_iterator_default_buffer> + >::type + > type; + }; + } // namespace range_detail + + using range_detail::any_range; + using range_detail::any_range_type_generator; +} // namespace boost + +#endif // include guard