Added boost header
This commit is contained in:
322
test/external/boost/graph/boyer_myrvold_planar_test.hpp
vendored
Normal file
322
test/external/boost/graph/boyer_myrvold_planar_test.hpp
vendored
Normal file
@@ -0,0 +1,322 @@
|
||||
//=======================================================================
|
||||
// Copyright 2007 Aaron Windsor
|
||||
//
|
||||
// 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 __BOYER_MYRVOLD_PLANAR_TEST_HPP__
|
||||
#define __BOYER_MYRVOLD_PLANAR_TEST_HPP__
|
||||
|
||||
#include <boost/graph/planar_detail/boyer_myrvold_impl.hpp>
|
||||
#include <boost/parameter.hpp>
|
||||
#include <boost/type_traits.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
|
||||
|
||||
namespace boost
|
||||
{
|
||||
|
||||
struct no_kuratowski_subgraph_isolation {};
|
||||
struct no_planar_embedding {};
|
||||
|
||||
namespace boyer_myrvold_params
|
||||
{
|
||||
|
||||
BOOST_PARAMETER_KEYWORD(tag, graph)
|
||||
BOOST_PARAMETER_KEYWORD(tag, embedding)
|
||||
BOOST_PARAMETER_KEYWORD(tag, kuratowski_subgraph)
|
||||
BOOST_PARAMETER_KEYWORD(tag, vertex_index_map)
|
||||
BOOST_PARAMETER_KEYWORD(tag, edge_index_map)
|
||||
|
||||
typedef parameter::parameters< parameter::required<tag::graph>,
|
||||
tag::embedding,
|
||||
tag::kuratowski_subgraph,
|
||||
tag::vertex_index_map,
|
||||
tag::edge_index_map
|
||||
> boyer_myrvold_params_t;
|
||||
|
||||
namespace core
|
||||
{
|
||||
|
||||
template <typename ArgumentPack>
|
||||
bool dispatched_boyer_myrvold(ArgumentPack const& args,
|
||||
mpl::true_,
|
||||
mpl::true_
|
||||
)
|
||||
{
|
||||
//Dispatch for no planar embedding, no kuratowski subgraph isolation
|
||||
|
||||
typedef typename remove_const
|
||||
<
|
||||
typename remove_reference
|
||||
< typename parameter::binding
|
||||
< ArgumentPack, tag::graph>::type
|
||||
>::type
|
||||
>::type graph_t;
|
||||
|
||||
typedef typename parameter::binding
|
||||
< ArgumentPack,
|
||||
tag::vertex_index_map,
|
||||
typename property_map
|
||||
< typename remove_reference<graph_t>::type,
|
||||
vertex_index_t>::const_type
|
||||
>::type vertex_index_map_t;
|
||||
|
||||
boyer_myrvold_impl
|
||||
<graph_t,
|
||||
vertex_index_map_t,
|
||||
graph::detail::no_old_handles,
|
||||
graph::detail::no_embedding
|
||||
>
|
||||
planarity_tester(args[graph],
|
||||
args[vertex_index_map |
|
||||
get(vertex_index, args[graph])
|
||||
]
|
||||
);
|
||||
|
||||
return planarity_tester.is_planar() ? true : false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
template <typename ArgumentPack>
|
||||
bool dispatched_boyer_myrvold(ArgumentPack const& args,
|
||||
mpl::true_,
|
||||
mpl::false_
|
||||
)
|
||||
{
|
||||
//Dispatch for no planar embedding, kuratowski subgraph isolation
|
||||
typedef typename remove_const
|
||||
<
|
||||
typename remove_reference
|
||||
< typename parameter::binding
|
||||
< ArgumentPack, tag::graph>::type
|
||||
>::type
|
||||
>::type graph_t;
|
||||
|
||||
typedef typename parameter::binding
|
||||
< ArgumentPack,
|
||||
tag::vertex_index_map,
|
||||
typename property_map<graph_t, vertex_index_t>::type
|
||||
>::type vertex_index_map_t;
|
||||
|
||||
boyer_myrvold_impl
|
||||
<graph_t,
|
||||
vertex_index_map_t,
|
||||
graph::detail::store_old_handles,
|
||||
graph::detail::no_embedding
|
||||
>
|
||||
planarity_tester(args[graph],
|
||||
args[vertex_index_map |
|
||||
get(vertex_index, args[graph])
|
||||
]
|
||||
);
|
||||
|
||||
if (planarity_tester.is_planar())
|
||||
return true;
|
||||
else
|
||||
{
|
||||
planarity_tester.extract_kuratowski_subgraph
|
||||
(args[kuratowski_subgraph],
|
||||
args[edge_index_map|get(edge_index, args[graph])]
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
template <typename ArgumentPack>
|
||||
bool dispatched_boyer_myrvold(ArgumentPack const& args,
|
||||
mpl::false_,
|
||||
mpl::true_
|
||||
)
|
||||
{
|
||||
//Dispatch for planar embedding, no kuratowski subgraph isolation
|
||||
typedef typename remove_const
|
||||
<
|
||||
typename remove_reference
|
||||
< typename parameter::binding
|
||||
< ArgumentPack, tag::graph>::type
|
||||
>::type
|
||||
>::type graph_t;
|
||||
|
||||
typedef typename parameter::binding
|
||||
< ArgumentPack,
|
||||
tag::vertex_index_map,
|
||||
typename property_map<graph_t, vertex_index_t>::type
|
||||
>::type vertex_index_map_t;
|
||||
|
||||
boyer_myrvold_impl
|
||||
<graph_t,
|
||||
vertex_index_map_t,
|
||||
graph::detail::no_old_handles,
|
||||
#ifdef BOOST_GRAPH_PREFER_STD_LIB
|
||||
graph::detail::std_list
|
||||
#else
|
||||
graph::detail::recursive_lazy_list
|
||||
#endif
|
||||
>
|
||||
planarity_tester(args[graph],
|
||||
args[vertex_index_map |
|
||||
get(vertex_index, args[graph])
|
||||
]
|
||||
);
|
||||
|
||||
if (planarity_tester.is_planar())
|
||||
{
|
||||
planarity_tester.make_edge_permutation(args[embedding]);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
template <typename ArgumentPack>
|
||||
bool dispatched_boyer_myrvold(ArgumentPack const& args,
|
||||
mpl::false_,
|
||||
mpl::false_
|
||||
)
|
||||
{
|
||||
//Dispatch for planar embedding, kuratowski subgraph isolation
|
||||
typedef typename remove_const
|
||||
<
|
||||
typename remove_reference
|
||||
< typename parameter::binding
|
||||
< ArgumentPack, tag::graph>::type
|
||||
>::type
|
||||
>::type graph_t;
|
||||
|
||||
typedef typename parameter::binding
|
||||
< ArgumentPack,
|
||||
tag::vertex_index_map,
|
||||
typename property_map<graph_t, vertex_index_t>::type
|
||||
>::type vertex_index_map_t;
|
||||
|
||||
boyer_myrvold_impl
|
||||
<graph_t,
|
||||
vertex_index_map_t,
|
||||
graph::detail::store_old_handles,
|
||||
#ifdef BOOST_BGL_PREFER_STD_LIB
|
||||
graph::detail::std_list
|
||||
#else
|
||||
graph::detail::recursive_lazy_list
|
||||
#endif
|
||||
>
|
||||
planarity_tester(args[graph],
|
||||
args[vertex_index_map |
|
||||
get(vertex_index, args[graph])
|
||||
]
|
||||
);
|
||||
|
||||
if (planarity_tester.is_planar())
|
||||
{
|
||||
planarity_tester.make_edge_permutation(args[embedding]);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
planarity_tester.extract_kuratowski_subgraph
|
||||
(args[kuratowski_subgraph],
|
||||
args[edge_index_map | get(edge_index, args[graph])]
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
template <typename ArgumentPack>
|
||||
bool boyer_myrvold_planarity_test(ArgumentPack const& args)
|
||||
{
|
||||
|
||||
typedef typename parameter::binding
|
||||
< ArgumentPack,
|
||||
tag::kuratowski_subgraph,
|
||||
const no_kuratowski_subgraph_isolation&
|
||||
>::type
|
||||
kuratowski_arg_t;
|
||||
|
||||
typedef typename parameter::binding
|
||||
< ArgumentPack,
|
||||
tag::embedding,
|
||||
const no_planar_embedding&
|
||||
>::type
|
||||
embedding_arg_t;
|
||||
|
||||
return dispatched_boyer_myrvold
|
||||
(args,
|
||||
boost::is_same
|
||||
<embedding_arg_t, const no_planar_embedding&>(),
|
||||
boost::is_same
|
||||
<kuratowski_arg_t, const no_kuratowski_subgraph_isolation&>()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
} //namespace core
|
||||
|
||||
} //namespace boyer_myrvold_params
|
||||
|
||||
|
||||
template <typename A0>
|
||||
bool boyer_myrvold_planarity_test(A0 const& arg0)
|
||||
{
|
||||
return boyer_myrvold_params::core::boyer_myrvold_planarity_test
|
||||
(boyer_myrvold_params::boyer_myrvold_params_t()(arg0));
|
||||
}
|
||||
|
||||
template <typename A0, typename A1>
|
||||
// bool boyer_myrvold_planarity_test(A0 const& arg0, A1 const& arg1)
|
||||
bool boyer_myrvold_planarity_test(A0 const& arg0, A1 const& arg1)
|
||||
{
|
||||
return boyer_myrvold_params::core::boyer_myrvold_planarity_test
|
||||
(boyer_myrvold_params::boyer_myrvold_params_t()(arg0,arg1));
|
||||
}
|
||||
|
||||
template <typename A0, typename A1, typename A2>
|
||||
bool boyer_myrvold_planarity_test(A0 const& arg0,
|
||||
A1 const& arg1,
|
||||
A2 const& arg2
|
||||
)
|
||||
{
|
||||
return boyer_myrvold_params::core::boyer_myrvold_planarity_test
|
||||
(boyer_myrvold_params::boyer_myrvold_params_t()(arg0,arg1,arg2));
|
||||
}
|
||||
|
||||
template <typename A0, typename A1, typename A2, typename A3>
|
||||
bool boyer_myrvold_planarity_test(A0 const& arg0,
|
||||
A1 const& arg1,
|
||||
A2 const& arg2,
|
||||
A3 const& arg3
|
||||
)
|
||||
{
|
||||
return boyer_myrvold_params::core::boyer_myrvold_planarity_test
|
||||
(boyer_myrvold_params::boyer_myrvold_params_t()(arg0,arg1,arg2,arg3));
|
||||
}
|
||||
|
||||
template <typename A0, typename A1, typename A2, typename A3, typename A4>
|
||||
bool boyer_myrvold_planarity_test(A0 const& arg0,
|
||||
A1 const& arg1,
|
||||
A2 const& arg2,
|
||||
A3 const& arg3,
|
||||
A4 const& arg4
|
||||
)
|
||||
{
|
||||
return boyer_myrvold_params::core::boyer_myrvold_planarity_test
|
||||
(boyer_myrvold_params::boyer_myrvold_params_t()
|
||||
(arg0,arg1,arg2,arg3,arg4)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif //__BOYER_MYRVOLD_PLANAR_TEST_HPP__
|
||||
Reference in New Issue
Block a user