[ create a new paste ] login | about

Link: http://codepad.org/OOZ7riiy    [ raw code | fork ]

joel_f - C++, pasted on Aug 23:
#ifndef BOOST_MPL_SWITCH_HPP_INCLUDED
#define BOOST_MPL_SWITCH_HPP_INCLUDED

// Copyright Aleksey Gurtovoy 2003-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.

// $Source$
// $Date: 2004-09-02 11:41:37 -0400 (Thu, 02 Sep 2004) $
// $Revision: 24874 $

#include <boost/mpl/find_if.hpp>
#include <boost/mpl/deref.hpp>
#include <boost/mpl/lambda.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/mpl/always.hpp>
#include <boost/mpl/pair.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>

namespace boost { namespace mpl {

template<
      typename BOOST_MPL_AUX_NA_PARAM(Body)
    , typename BOOST_MPL_AUX_NA_PARAM(T)
    >
struct switch_
{
    typedef typename find_if<Body,apply1<first<_1>,T> >::type iter_;
    typedef typename deref<iter_>::type                       pair_;
    typedef typename second<pair_>::type                      f_;
    typedef typename apply1<f_,T>::type                       type;

    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,switch_,(Body,T))
};

BOOST_MPL_AUX_NA_SPEC(2, switch_)

template<typename F>            struct default_ : pair<always<true_>, F > {};
template<typename C,typename F> struct case_    : pair<C, F > {};

}}

#endif // BOOST_MPL_SWITCH_HPP_INCLUDED


Create a new paste based on this one


Comments: