/////////////////////////////////////////////////////////////////////////////// /// \file list.hpp /// A special-purpose proto transform for putting things into a /// fusion::cons<> list. // // Copyright 2007 Eric Niebler. 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) #ifndef BOOST_PROTO_TRANSFORM_LIST_HPP_EAN_12_16_2006 #define BOOST_PROTO_TRANSFORM_LIST_HPP_EAN_12_16_2006 #include #include #if BOOST_VERSION < 103500 # include #else # include #endif #include #include namespace boost { namespace proto { namespace transform { // A list transform, that puts elements into a fusion cons-list template struct list : Grammar { list() {} template struct apply { typedef fusion::cons< typename Grammar::template apply::type , State > type; }; template static typename apply::type call(Expr const &expr, State const &state, Visitor &visitor) { return typename apply::type (Grammar::call(expr, state, visitor), state); } }; // A tail transform, that returns the tail of a fusion cons-list template struct tail : Grammar { tail() {} template struct apply { typedef typename Grammar::template apply::type::cdr_type type; }; template static typename apply::type call(Expr const &expr, State const &state, Visitor &visitor) { return Grammar::call(expr, state, visitor).cdr; } }; }}} namespace boost { namespace proto { template struct is_transform > : mpl::true_ {}; template struct is_transform > : mpl::true_ {}; }} #endif