// Copyright 2008-2010 Gordon Woodhull // 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_MSM_MPL_GRAPH_DETAIL_INCIDENCE_LIST_GRAPH_IPP_INCLUDED #define BOOST_MSM_MPL_GRAPH_DETAIL_INCIDENCE_LIST_GRAPH_IPP_INCLUDED // these metafunctions provide the metadata structures needed by the public interface // in mpl_graph.hpp #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace msm { namespace mpl_graph { namespace detail { // tag to identify this graph implementation (not defined) struct incidence_list_tag; // clarifiers template struct fetch_edge : mpl::front {}; template struct fetch_source : mpl::deref::type>::type> {}; template struct fetch_target : mpl::back {}; // Edge->Target map for an Source for out_*, adjacent_vertices template struct produce_out_map : mpl::fold,Source> >::type, mpl::map<>, mpl::insert,fetch_target > > > {}; // Edge->Source map for a Target for in_*, degree template struct produce_in_map : mpl::fold,Target> >::type, mpl::map<>, mpl::insert,fetch_source > > > {}; // Edge->pair map for source, target template struct produce_edge_st_map : mpl::fold, mpl::insert, mpl::pair, fetch_target > > > > {}; // Vertex set for VertexListGraph template struct produce_vertex_set : mpl::fold, mpl::insert > >::type, mpl::insert > > {}; // Edge set for EdgeListGraph template struct produce_edge_set : mpl::fold, mpl::insert > > {}; } } } } #endif // BOOST_MSM_MPL_GRAPH_DETAIL_INCIDENCE_LIST_GRAPH_IPP_INCLUDED