diff options
author | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 12:57:26 -0700 |
---|---|---|
committer | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 12:57:26 -0700 |
commit | 1a78a62555be32868418fe52f8e330c9d0f95d5a (patch) | |
tree | d3765a80e7d3b9640ec2e930743630cd6b9fce2b /boost/mpl/aux_/transform_iter.hpp | |
download | boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.tar.gz boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.tar.bz2 boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.zip |
Imported Upstream version 1.49.0upstream/1.49.0
Diffstat (limited to 'boost/mpl/aux_/transform_iter.hpp')
-rw-r--r-- | boost/mpl/aux_/transform_iter.hpp | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/boost/mpl/aux_/transform_iter.hpp b/boost/mpl/aux_/transform_iter.hpp new file mode 100644 index 0000000000..2d678935d4 --- /dev/null +++ b/boost/mpl/aux_/transform_iter.hpp @@ -0,0 +1,123 @@ + +#ifndef BOOST_MPL_AUX_TRANSFORM_ITER_HPP_INCLUDED +#define BOOST_MPL_AUX_TRANSFORM_ITER_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// +// Distributed under 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) +// +// See http://www.boost.org/libs/mpl for documentation. + +// $Id: transform_iter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/apply.hpp> +#include <boost/mpl/iterator_tags.hpp> +#include <boost/mpl/next.hpp> +#include <boost/mpl/deref.hpp> +#include <boost/mpl/aux_/lambda_spec.hpp> +#include <boost/mpl/aux_/config/ctps.hpp> +#include <boost/type_traits/is_same.hpp> + +namespace boost { namespace mpl { + +namespace aux { + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template< + typename Iterator + , typename LastIterator + , typename F + > +struct transform_iter +{ + typedef Iterator base; + typedef forward_iterator_tag category; + typedef transform_iter< typename mpl::next<base>::type,LastIterator,F > next; + + typedef typename apply1< + F + , typename deref<base>::type + >::type type; +}; + +template< + typename LastIterator + , typename F + > +struct transform_iter< LastIterator,LastIterator,F > +{ + typedef LastIterator base; + typedef forward_iterator_tag category; +}; + +#else + +template< + typename Iterator + , typename LastIterator + , typename F + > +struct transform_iter; + +template< bool > +struct transform_iter_impl +{ + template< + typename Iterator + , typename LastIterator + , typename F + > + struct result_ + { + typedef Iterator base; + typedef forward_iterator_tag category; + typedef transform_iter< typename mpl::next<Iterator>::type,LastIterator,F > next; + + typedef typename apply1< + F + , typename deref<Iterator>::type + >::type type; + }; +}; + +template<> +struct transform_iter_impl<true> +{ + template< + typename Iterator + , typename LastIterator + , typename F + > + struct result_ + { + typedef Iterator base; + typedef forward_iterator_tag category; + }; +}; + +template< + typename Iterator + , typename LastIterator + , typename F + > +struct transform_iter + : transform_iter_impl< + ::boost::is_same<Iterator,LastIterator>::value + >::template result_< Iterator,LastIterator,F > +{ +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace aux + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(3, aux::transform_iter) + +}} + +#endif // BOOST_MPL_AUX_TRANSFORM_ITER_HPP_INCLUDED |