mirror of https://github.com/CGAL/cgal
Fix indentation in named_param_helpers.h (no real changes)
This commit is contained in:
parent
13d78e8eec
commit
f4012763a9
|
|
@ -10,175 +10,171 @@
|
|||
#define CGAL_BOOST_GRAPH_NAMED_PARAMETERS_HELPERS_H
|
||||
|
||||
#include <CGAL/boost/graph/internal/initialized_index_maps_helpers.h>
|
||||
#include <CGAL/Named_function_parameters.h>
|
||||
#include <CGAL/boost/graph/properties.h>
|
||||
#include <CGAL/Dynamic_property_map.h>
|
||||
#include <CGAL/iterator.h>
|
||||
#include <CGAL/Kernel_traits.h>
|
||||
#include <CGAL/Origin.h>
|
||||
#include <CGAL/iterator.h>
|
||||
|
||||
#include <CGAL/Named_function_parameters.h>
|
||||
#include <CGAL/property_map.h>
|
||||
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/mpl/has_xxx.hpp>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
|
||||
#include <fstream>
|
||||
#include <iterator>
|
||||
#include <type_traits>
|
||||
|
||||
namespace CGAL {
|
||||
namespace parameters {
|
||||
|
||||
namespace parameters
|
||||
template <class Parameter, class NamedParameters>
|
||||
struct Is_default
|
||||
{
|
||||
typedef typename internal_np::Lookup_named_param_def<Parameter,
|
||||
NamedParameters,
|
||||
internal_np::Param_not_found>::type NP_type;
|
||||
|
||||
static const bool value = boost::is_same<NP_type, internal_np::Param_not_found>::value;
|
||||
|
||||
typedef CGAL::Boolean_tag<value> type;
|
||||
};
|
||||
|
||||
} // namespace parameters
|
||||
|
||||
// forward declarations to avoid dependency to Solver_interface
|
||||
template <typename FT, unsigned int dim>
|
||||
class Default_diagonalize_traits;
|
||||
class Eigen_svd;
|
||||
class Lapack_svd;
|
||||
struct Alpha_expansion_boost_adjacency_list_tag;
|
||||
//
|
||||
|
||||
//helper classes
|
||||
template<typename PolygonMesh, typename PropertyTag>
|
||||
class property_map_selector
|
||||
{
|
||||
public:
|
||||
typedef typename graph_has_property<PolygonMesh, PropertyTag>::type Has_internal_pmap;
|
||||
typedef typename boost::mpl::if_c<Has_internal_pmap::value,
|
||||
typename boost::property_map<PolygonMesh, PropertyTag>::type,
|
||||
typename boost::cgal_no_property::type
|
||||
>::type type;
|
||||
typedef typename boost::mpl::if_c<Has_internal_pmap::value,
|
||||
typename boost::property_map<PolygonMesh, PropertyTag>::const_type,
|
||||
typename boost::cgal_no_property::const_type
|
||||
>::type const_type;
|
||||
|
||||
type get_pmap(const PropertyTag& p, PolygonMesh& pmesh)
|
||||
{
|
||||
template <class Parameter, class NamedParameters>
|
||||
struct Is_default
|
||||
{
|
||||
typedef typename internal_np::Lookup_named_param_def <
|
||||
Parameter,
|
||||
NamedParameters,
|
||||
internal_np::Param_not_found > ::type NP_type;
|
||||
static const bool value = boost::is_same<NP_type, internal_np::Param_not_found>::value;
|
||||
typedef CGAL::Boolean_tag<value> type;
|
||||
};
|
||||
} // end of parameters namespace
|
||||
|
||||
// forward declarations to avoid dependency to Solver_interface
|
||||
template <typename FT, unsigned int dim>
|
||||
class Default_diagonalize_traits;
|
||||
class Eigen_svd;
|
||||
class Lapack_svd;
|
||||
struct Alpha_expansion_boost_adjacency_list_tag;
|
||||
//
|
||||
|
||||
|
||||
//helper classes
|
||||
template<typename PolygonMesh, typename PropertyTag>
|
||||
class property_map_selector
|
||||
{
|
||||
public:
|
||||
typedef typename graph_has_property<PolygonMesh, PropertyTag>::type Has_internal_pmap;
|
||||
typedef typename boost::mpl::if_c< Has_internal_pmap::value
|
||||
, typename boost::property_map<PolygonMesh, PropertyTag>::type
|
||||
, typename boost::cgal_no_property::type
|
||||
>::type type;
|
||||
typedef typename boost::mpl::if_c< Has_internal_pmap::value
|
||||
, typename boost::property_map<PolygonMesh, PropertyTag>::const_type
|
||||
, typename boost::cgal_no_property::const_type
|
||||
>::type const_type;
|
||||
|
||||
type get_pmap(const PropertyTag& p, PolygonMesh& pmesh)
|
||||
{
|
||||
return get_impl(p, pmesh, Has_internal_pmap());
|
||||
}
|
||||
|
||||
const_type get_const_pmap(const PropertyTag& p, const PolygonMesh& pmesh)
|
||||
{
|
||||
return get_const_pmap_impl(p, pmesh, Has_internal_pmap());
|
||||
}
|
||||
|
||||
private:
|
||||
type get_impl(const PropertyTag&, PolygonMesh&, CGAL::Tag_false)
|
||||
{
|
||||
return type(); //boost::cgal_no_property::type
|
||||
}
|
||||
type get_impl(const PropertyTag& p, PolygonMesh& pmesh, CGAL::Tag_true)
|
||||
{
|
||||
return get(p, pmesh);
|
||||
}
|
||||
|
||||
const_type get_const_pmap_impl(const PropertyTag&
|
||||
, const PolygonMesh&, CGAL::Tag_false)
|
||||
{
|
||||
return const_type(); //boost::cgal_no_property::type
|
||||
}
|
||||
const_type get_const_pmap_impl(const PropertyTag& p
|
||||
, const PolygonMesh& pmesh, CGAL::Tag_true)
|
||||
{
|
||||
return get(p, pmesh);
|
||||
}
|
||||
};
|
||||
|
||||
template<typename PolygonMesh, typename PropertyTag>
|
||||
typename property_map_selector<PolygonMesh, PropertyTag>::type
|
||||
get_property_map(const PropertyTag& p, PolygonMesh& pmesh)
|
||||
{
|
||||
property_map_selector<PolygonMesh, PropertyTag> pms;
|
||||
return pms.get_pmap(p, pmesh);
|
||||
return get_impl(p, pmesh, Has_internal_pmap());
|
||||
}
|
||||
|
||||
template<typename PolygonMesh, typename PropertyTag>
|
||||
typename property_map_selector<PolygonMesh, PropertyTag>::const_type
|
||||
get_const_property_map(const PropertyTag& p, const PolygonMesh& pmesh)
|
||||
const_type get_const_pmap(const PropertyTag& p, const PolygonMesh& pmesh)
|
||||
{
|
||||
property_map_selector<PolygonMesh, PropertyTag> pms;
|
||||
return pms.get_const_pmap(p, pmesh);
|
||||
return get_const_pmap_impl(p, pmesh, Has_internal_pmap());
|
||||
}
|
||||
|
||||
// Shortcut for accessing the value type of the property map
|
||||
template <class Graph, class Property>
|
||||
class property_map_value {
|
||||
typedef typename boost::property_map<Graph, Property>::const_type PMap;
|
||||
public:
|
||||
typedef typename boost::property_traits<PMap>::value_type type;
|
||||
};
|
||||
|
||||
template<typename PolygonMesh,
|
||||
typename NamedParameters = parameters::Default_named_parameters >
|
||||
class GetVertexPointMap
|
||||
private:
|
||||
type get_impl(const PropertyTag&, PolygonMesh&, CGAL::Tag_false)
|
||||
{
|
||||
typedef typename property_map_selector<PolygonMesh, boost::vertex_point_t>::const_type
|
||||
DefaultVPMap_const;
|
||||
typedef typename property_map_selector<PolygonMesh, boost::vertex_point_t>::type
|
||||
DefaultVPMap;
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def<
|
||||
internal_np::vertex_point_t,
|
||||
NamedParameters,
|
||||
DefaultVPMap
|
||||
> ::type type;
|
||||
typedef typename internal_np::Lookup_named_param_def<
|
||||
internal_np::vertex_point_t,
|
||||
NamedParameters,
|
||||
DefaultVPMap_const
|
||||
> ::type const_type;
|
||||
};
|
||||
|
||||
template<typename PolygonMesh, typename NamedParameters>
|
||||
class GetK
|
||||
return type(); //boost::cgal_no_property::type
|
||||
}
|
||||
type get_impl(const PropertyTag& p, PolygonMesh& pmesh, CGAL::Tag_true)
|
||||
{
|
||||
typedef typename boost::property_traits<
|
||||
typename GetVertexPointMap<PolygonMesh, NamedParameters>::type
|
||||
>::value_type Point;
|
||||
public:
|
||||
typedef typename CGAL::Kernel_traits<Point>::Kernel Kernel;
|
||||
};
|
||||
return get(p, pmesh);
|
||||
}
|
||||
|
||||
template<typename PolygonMesh,
|
||||
typename NamedParametersGT = parameters::Default_named_parameters,
|
||||
typename NamedParametersVPM = NamedParametersGT >
|
||||
class GetGeomTraits
|
||||
const_type get_const_pmap_impl(const PropertyTag&
|
||||
, const PolygonMesh&, CGAL::Tag_false)
|
||||
{
|
||||
typedef typename CGAL::graph_has_property<PolygonMesh, boost::vertex_point_t>::type
|
||||
Has_internal_pmap;
|
||||
return const_type(); //boost::cgal_no_property::type
|
||||
}
|
||||
const_type get_const_pmap_impl(const PropertyTag& p
|
||||
, const PolygonMesh& pmesh, CGAL::Tag_true)
|
||||
{
|
||||
return get(p, pmesh);
|
||||
}
|
||||
};
|
||||
|
||||
typedef typename internal_np::Lookup_named_param_def <
|
||||
internal_np::vertex_point_t,
|
||||
NamedParametersVPM,
|
||||
internal_np::Param_not_found
|
||||
> ::type NP_vpm;
|
||||
template<typename PolygonMesh, typename PropertyTag>
|
||||
typename property_map_selector<PolygonMesh, PropertyTag>::type
|
||||
get_property_map(const PropertyTag& p, PolygonMesh& pmesh)
|
||||
{
|
||||
property_map_selector<PolygonMesh, PropertyTag> pms;
|
||||
return pms.get_pmap(p, pmesh);
|
||||
}
|
||||
|
||||
struct Fake_GT {};//to be used if there is no internal vertex_point_map in PolygonMesh
|
||||
template<typename PolygonMesh, typename PropertyTag>
|
||||
typename property_map_selector<PolygonMesh, PropertyTag>::const_type
|
||||
get_const_property_map(const PropertyTag& p, const PolygonMesh& pmesh)
|
||||
{
|
||||
property_map_selector<PolygonMesh, PropertyTag> pms;
|
||||
return pms.get_const_pmap(p, pmesh);
|
||||
}
|
||||
|
||||
typedef typename boost::mpl::if_c<Has_internal_pmap::value || !boost::is_same<internal_np::Param_not_found, NP_vpm>::value,
|
||||
typename GetK<PolygonMesh, NamedParametersVPM>::Kernel,
|
||||
Fake_GT>::type DefaultKernel;
|
||||
// Shortcut for accessing the value type of the property map
|
||||
template <class Graph, class Property>
|
||||
class property_map_value
|
||||
{
|
||||
typedef typename boost::property_map<Graph, Property>::const_type PMap;
|
||||
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def <
|
||||
internal_np::geom_traits_t,
|
||||
NamedParametersGT,
|
||||
DefaultKernel
|
||||
> ::type type;
|
||||
};
|
||||
public:
|
||||
typedef typename boost::property_traits<PMap>::value_type type;
|
||||
};
|
||||
|
||||
template <typename PolygonMesh,
|
||||
typename NamedParameters = parameters::Default_named_parameters>
|
||||
class GetVertexPointMap
|
||||
{
|
||||
typedef typename property_map_selector<PolygonMesh, boost::vertex_point_t>::const_type
|
||||
DefaultVPMap_const;
|
||||
typedef typename property_map_selector<PolygonMesh, boost::vertex_point_t>::type
|
||||
DefaultVPMap;
|
||||
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def<internal_np::vertex_point_t,
|
||||
NamedParameters,
|
||||
DefaultVPMap>::type type;
|
||||
typedef typename internal_np::Lookup_named_param_def<internal_np::vertex_point_t,
|
||||
NamedParameters,
|
||||
DefaultVPMap_const>::type const_type;
|
||||
};
|
||||
|
||||
template<typename PolygonMesh, typename NamedParameters>
|
||||
class GetK
|
||||
{
|
||||
typedef typename boost::property_traits<
|
||||
typename GetVertexPointMap<PolygonMesh, NamedParameters>::type>::value_type Point;
|
||||
|
||||
public:
|
||||
typedef typename CGAL::Kernel_traits<Point>::Kernel Kernel;
|
||||
};
|
||||
|
||||
template <typename PolygonMesh,
|
||||
typename NamedParametersGT = parameters::Default_named_parameters,
|
||||
typename NamedParametersVPM = NamedParametersGT>
|
||||
class GetGeomTraits
|
||||
{
|
||||
typedef typename CGAL::graph_has_property<PolygonMesh, boost::vertex_point_t>::type Has_internal_pmap;
|
||||
|
||||
typedef typename internal_np::Lookup_named_param_def<internal_np::vertex_point_t,
|
||||
NamedParametersVPM,
|
||||
internal_np::Param_not_found>::type NP_vpm;
|
||||
|
||||
struct Fake_GT {}; // to be used if there is no internal vertex_point_map in PolygonMesh
|
||||
|
||||
typedef typename boost::mpl::if_c<Has_internal_pmap::value ||
|
||||
!boost::is_same<internal_np::Param_not_found, NP_vpm>::value,
|
||||
typename GetK<PolygonMesh, NamedParametersVPM>::Kernel,
|
||||
Fake_GT>::type DefaultKernel;
|
||||
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def<internal_np::geom_traits_t,
|
||||
NamedParametersGT,
|
||||
DefaultKernel>::type type;
|
||||
};
|
||||
|
||||
// Define the following structs:
|
||||
//
|
||||
|
|
@ -189,7 +185,7 @@ namespace CGAL {
|
|||
|
||||
#define CGAL_DEF_GET_INDEX_TYPE(CTYPE, DTYPE, STYPE) \
|
||||
template <typename Graph, \
|
||||
typename NamedParameters = parameters::Default_named_parameters> \
|
||||
typename NamedParameters = parameters::Default_named_parameters> \
|
||||
struct GetInitialized##CTYPE##IndexMap \
|
||||
: public BGL::internal::GetInitializedIndexMap<internal_np::DTYPE##_index_t, \
|
||||
boost::DTYPE##_index_t, \
|
||||
|
|
@ -224,7 +220,7 @@ typename BGL::internal::GetInitializedIndexMap<CGAL::internal_np::DTYPE##_index_
|
|||
CGAL::dynamic_##DTYPE##_property_t<STYPE>, \
|
||||
Graph, NamedParameters>::const_type \
|
||||
get_initialized_##DTYPE##_index_map(const Graph& g, \
|
||||
const NamedParameters& np = parameters::default_values()) \
|
||||
const NamedParameters& np = parameters::default_values()) \
|
||||
{ \
|
||||
typedef BGL::internal::GetInitializedIndexMap<CGAL::internal_np::DTYPE##_index_t, \
|
||||
boost::DTYPE##_index_t, \
|
||||
|
|
@ -234,7 +230,7 @@ get_initialized_##DTYPE##_index_map(const Graph& g,
|
|||
} \
|
||||
/* same as above, non-const version*/ \
|
||||
template <typename Graph, \
|
||||
typename NamedParameters = parameters::Default_named_parameters, \
|
||||
typename NamedParameters = parameters::Default_named_parameters, \
|
||||
/*otherwise compilers will try to use 'Graph := const PM' and things will go badly*/ \
|
||||
std::enable_if_t< \
|
||||
!std::is_const<typename std::remove_reference<Graph>::type>::value, int> = 0> \
|
||||
|
|
@ -243,7 +239,7 @@ typename BGL::internal::GetInitializedIndexMap<CGAL::internal_np::DTYPE##_index_
|
|||
CGAL::dynamic_##DTYPE##_property_t<STYPE>, \
|
||||
Graph, NamedParameters>::type \
|
||||
get_initialized_##DTYPE##_index_map(Graph& g, \
|
||||
const NamedParameters& np = parameters::default_values()) \
|
||||
const NamedParameters& np = parameters::default_values()) \
|
||||
{ \
|
||||
typedef BGL::internal::GetInitializedIndexMap<CGAL::internal_np::DTYPE##_index_t, \
|
||||
boost::DTYPE##_index_t, \
|
||||
|
|
@ -259,263 +255,244 @@ CGAL_DEF_GET_INITIALIZED_INDEX_MAP(face, typename boost::graph_traits<Graph>::fa
|
|||
|
||||
#undef CGAL_DEF_GET_INITIALIZED_INDEX_MAP
|
||||
|
||||
namespace internal {
|
||||
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(Has_nested_type_iterator, iterator, false)
|
||||
namespace internal {
|
||||
|
||||
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(Has_nested_type_iterator, iterator, false)
|
||||
|
||||
} // namespace internal
|
||||
|
||||
template<typename PointRange,
|
||||
typename NamedParameters = parameters::Default_named_parameters,
|
||||
bool has_nested_iterator = internal::Has_nested_type_iterator<PointRange>::value,
|
||||
typename NP_TAG = internal_np::point_t>
|
||||
class GetPointMap
|
||||
{
|
||||
typedef typename std::iterator_traits<typename PointRange::iterator>::value_type Point;
|
||||
typedef typename CGAL::Identity_property_map<Point> DefaultPMap;
|
||||
typedef typename CGAL::Identity_property_map<const Point> DefaultConstPMap;
|
||||
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def<NP_TAG,
|
||||
NamedParameters,
|
||||
DefaultPMap>::type type;
|
||||
|
||||
typedef typename internal_np::Lookup_named_param_def<NP_TAG,
|
||||
NamedParameters,
|
||||
DefaultConstPMap>::type const_type;
|
||||
};
|
||||
|
||||
// to please compiler instantiating non valid overloads
|
||||
template<typename PointRange, typename NamedParameters>
|
||||
class GetPointMap<PointRange, NamedParameters, false>
|
||||
{
|
||||
struct Dummy_point{};
|
||||
|
||||
public:
|
||||
typedef typename CGAL::Identity_property_map<Dummy_point> type;
|
||||
typedef typename CGAL::Identity_property_map<const Dummy_point> const_type;
|
||||
};
|
||||
|
||||
template <class PointRange, class NamedParameters, typename NP_TAG = internal_np::point_t>
|
||||
struct Point_set_processing_3_np_helper
|
||||
{
|
||||
typedef typename std::iterator_traits<typename PointRange::iterator>::value_type Value_type;
|
||||
typedef CGAL::Identity_property_map<Value_type> DefaultPMap;
|
||||
typedef CGAL::Identity_property_map<const Value_type> DefaultConstPMap;
|
||||
|
||||
typedef typename internal_np::Lookup_named_param_def<NP_TAG,
|
||||
NamedParameters,
|
||||
DefaultPMap>::type Point_map;
|
||||
typedef typename internal_np::Lookup_named_param_def<NP_TAG,
|
||||
NamedParameters,
|
||||
DefaultConstPMap>::type Const_point_map;
|
||||
|
||||
typedef typename boost::property_traits<Point_map>::value_type Point;
|
||||
typedef typename Kernel_traits<Point>::Kernel Default_geom_traits;
|
||||
|
||||
typedef typename internal_np::Lookup_named_param_def<internal_np::geom_traits_t,
|
||||
NamedParameters,
|
||||
Default_geom_traits>::type Geom_traits;
|
||||
|
||||
typedef typename Geom_traits::FT FT;
|
||||
|
||||
typedef Constant_property_map<Value_type, typename Geom_traits::Vector_3> DummyNormalMap;
|
||||
|
||||
typedef typename internal_np::Lookup_named_param_def<internal_np::normal_t,
|
||||
NamedParameters,
|
||||
DummyNormalMap>::type Normal_map;
|
||||
|
||||
static Point_map get_point_map(PointRange&, const NamedParameters& np)
|
||||
{
|
||||
return parameters::choose_parameter<Point_map>(parameters::get_parameter(np, internal_np::point_map));
|
||||
}
|
||||
|
||||
template<typename PointRange,
|
||||
typename NamedParameters = parameters::Default_named_parameters,
|
||||
bool has_nested_iterator = internal::Has_nested_type_iterator<PointRange>::value,
|
||||
typename NP_TAG = internal_np::point_t
|
||||
>
|
||||
class GetPointMap
|
||||
static Point_map get_point_map(const NamedParameters& np)
|
||||
{
|
||||
typedef typename std::iterator_traits<typename PointRange::iterator>::value_type Point;
|
||||
typedef typename CGAL::Identity_property_map<Point> DefaultPMap;
|
||||
typedef typename CGAL::Identity_property_map<const Point> DefaultConstPMap;
|
||||
return parameters::choose_parameter<Point_map>(parameters::get_parameter(np, internal_np::point_map));
|
||||
}
|
||||
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def<
|
||||
NP_TAG,
|
||||
NamedParameters,
|
||||
DefaultPMap
|
||||
> ::type type;
|
||||
static Const_point_map get_const_point_map(const PointRange&, const NamedParameters& np)
|
||||
{
|
||||
return parameters::choose_parameter<Const_point_map>(parameters::get_parameter(np, internal_np::point_map));
|
||||
}
|
||||
|
||||
typedef typename internal_np::Lookup_named_param_def<
|
||||
NP_TAG,
|
||||
NamedParameters,
|
||||
DefaultConstPMap
|
||||
> ::type const_type;
|
||||
static Normal_map get_normal_map(const PointRange&, const NamedParameters& np)
|
||||
{
|
||||
return parameters::choose_parameter<Normal_map>(parameters::get_parameter(np, internal_np::normal_map));
|
||||
}
|
||||
|
||||
static Normal_map get_normal_map(const NamedParameters& np)
|
||||
{
|
||||
return parameters::choose_parameter<Normal_map>(parameters::get_parameter(np, internal_np::normal_map));
|
||||
}
|
||||
|
||||
static Geom_traits get_geom_traits(const PointRange&, const NamedParameters& np)
|
||||
{
|
||||
return parameters::choose_parameter<Geom_traits>(parameters::get_parameter(np, internal_np::geom_traits));
|
||||
}
|
||||
|
||||
static constexpr bool has_normal_map()
|
||||
{
|
||||
return !boost::is_same< typename internal_np::Get_param<typename NamedParameters::base, internal_np::normal_t>::type,
|
||||
internal_np::Param_not_found> ::value;
|
||||
}
|
||||
};
|
||||
|
||||
namespace Point_set_processing_3 {
|
||||
|
||||
template <typename ValueType>
|
||||
struct Fake_point_range
|
||||
{
|
||||
struct iterator
|
||||
{
|
||||
typedef ValueType value_type;
|
||||
typedef std::ptrdiff_t difference_type;
|
||||
typedef ValueType* pointer;
|
||||
typedef ValueType reference;
|
||||
typedef std::random_access_iterator_tag iterator_category;
|
||||
};
|
||||
};
|
||||
|
||||
template<typename PlaneRange, typename NamedParameters>
|
||||
class GetPlaneMap
|
||||
{
|
||||
typedef typename PlaneRange::iterator::value_type Plane;
|
||||
typedef typename CGAL::Identity_property_map<Plane> DefaultPMap;
|
||||
typedef typename CGAL::Identity_property_map<const Plane> DefaultConstPMap;
|
||||
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def<internal_np::plane_t,
|
||||
NamedParameters,
|
||||
DefaultPMap>::type type;
|
||||
|
||||
typedef typename internal_np::Lookup_named_param_def<internal_np::plane_t,
|
||||
NamedParameters,
|
||||
DefaultConstPMap>::type const_type;
|
||||
};
|
||||
|
||||
template<typename NamedParameters>
|
||||
class GetPlaneIndexMap
|
||||
{
|
||||
typedef Constant_property_map<std::size_t, int> DummyPlaneIndexMap;
|
||||
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def<internal_np::plane_index_t,
|
||||
NamedParameters,
|
||||
DummyPlaneIndexMap>::type type;
|
||||
};
|
||||
|
||||
template<typename PointRange, typename NamedParameters>
|
||||
class GetIsConstrainedMap
|
||||
{
|
||||
typedef Static_boolean_property_map<
|
||||
typename std::iterator_traits<typename PointRange::iterator>::value_type, false> Default_map;
|
||||
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def<internal_np::point_is_constrained_t,
|
||||
NamedParameters,
|
||||
Default_map>::type type;
|
||||
};
|
||||
|
||||
template<typename PointRange, typename NamedParameters>
|
||||
class GetAdjacencies
|
||||
{
|
||||
public:
|
||||
typedef Emptyset_iterator Empty;
|
||||
typedef typename internal_np::Lookup_named_param_def<internal_np::adjacencies_t,
|
||||
NamedParameters,
|
||||
Empty>::type type;
|
||||
};
|
||||
|
||||
} // namespace Point_set_processing_3
|
||||
|
||||
template<typename NamedParameters, typename DefaultSolver>
|
||||
class GetSolver
|
||||
{
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def<internal_np::sparse_linear_solver_t,
|
||||
NamedParameters,
|
||||
DefaultSolver>::type type;
|
||||
};
|
||||
|
||||
template<typename NamedParameters, typename FT, unsigned int dim = 3>
|
||||
class GetDiagonalizeTraits
|
||||
{
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def<internal_np::diagonalize_traits_t,
|
||||
NamedParameters,
|
||||
Default_diagonalize_traits<FT, dim> >::type type;
|
||||
};
|
||||
|
||||
template<typename NamedParameters>
|
||||
class GetSvdTraits
|
||||
{
|
||||
struct DummySvdTraits
|
||||
{
|
||||
typedef double FT;
|
||||
typedef int Vector;
|
||||
typedef int Matrix;
|
||||
static FT solve (const Matrix&, Vector&) { return 0.; }
|
||||
};
|
||||
|
||||
// to please compiler instantiating non valid overloads
|
||||
template<typename PointRange, typename NamedParameters>
|
||||
class GetPointMap<PointRange, NamedParameters, false>
|
||||
{
|
||||
struct Dummy_point{};
|
||||
public:
|
||||
typedef typename CGAL::Identity_property_map<Dummy_point> type;
|
||||
typedef typename CGAL::Identity_property_map<const Dummy_point> const_type;
|
||||
};
|
||||
public:
|
||||
typedef DummySvdTraits NoTraits;
|
||||
|
||||
template <class PointRange, class NamedParameters, typename NP_TAG = internal_np::point_t>
|
||||
struct Point_set_processing_3_np_helper
|
||||
{
|
||||
typedef typename std::iterator_traits<typename PointRange::iterator>::value_type Value_type;
|
||||
typedef CGAL::Identity_property_map<Value_type> DefaultPMap;
|
||||
typedef CGAL::Identity_property_map<const Value_type> DefaultConstPMap;
|
||||
|
||||
typedef typename internal_np::Lookup_named_param_def<NP_TAG,
|
||||
NamedParameters,DefaultPMap> ::type Point_map; // public
|
||||
typedef typename internal_np::Lookup_named_param_def<NP_TAG,
|
||||
NamedParameters,DefaultConstPMap> ::type Const_point_map; // public
|
||||
|
||||
typedef typename boost::property_traits<Point_map>::value_type Point;
|
||||
typedef typename Kernel_traits<Point>::Kernel Default_geom_traits;
|
||||
|
||||
typedef typename internal_np::Lookup_named_param_def <
|
||||
internal_np::geom_traits_t,
|
||||
NamedParameters,
|
||||
Default_geom_traits
|
||||
> ::type Geom_traits; // public
|
||||
|
||||
typedef typename Geom_traits::FT FT; // public
|
||||
|
||||
typedef Constant_property_map<Value_type, typename Geom_traits::Vector_3> DummyNormalMap;
|
||||
|
||||
typedef typename internal_np::Lookup_named_param_def<
|
||||
internal_np::normal_t,
|
||||
NamedParameters,
|
||||
DummyNormalMap
|
||||
> ::type Normal_map; // public
|
||||
|
||||
static Point_map get_point_map(PointRange&, const NamedParameters& np)
|
||||
{
|
||||
return parameters::choose_parameter<Point_map>(parameters::get_parameter(np, internal_np::point_map));
|
||||
}
|
||||
|
||||
static Point_map get_point_map(const NamedParameters& np)
|
||||
{
|
||||
return parameters::choose_parameter<Point_map>(parameters::get_parameter(np, internal_np::point_map));
|
||||
}
|
||||
|
||||
static Const_point_map get_const_point_map(const PointRange&, const NamedParameters& np)
|
||||
{
|
||||
return parameters::choose_parameter<Const_point_map>(parameters::get_parameter(np, internal_np::point_map));
|
||||
}
|
||||
|
||||
static Normal_map get_normal_map(const PointRange&, const NamedParameters& np)
|
||||
{
|
||||
return parameters::choose_parameter<Normal_map>(parameters::get_parameter(np, internal_np::normal_map));
|
||||
}
|
||||
|
||||
static Normal_map get_normal_map(const NamedParameters& np)
|
||||
{
|
||||
return parameters::choose_parameter<Normal_map>(parameters::get_parameter(np, internal_np::normal_map));
|
||||
}
|
||||
|
||||
static Geom_traits get_geom_traits(const PointRange&, const NamedParameters& np)
|
||||
{
|
||||
return parameters::choose_parameter<Geom_traits>(parameters::get_parameter(np, internal_np::geom_traits));
|
||||
}
|
||||
|
||||
static constexpr bool has_normal_map()
|
||||
{
|
||||
return !boost::is_same< typename internal_np::Get_param<typename NamedParameters::base, internal_np::normal_t>::type,
|
||||
internal_np::Param_not_found> ::value;
|
||||
}
|
||||
};
|
||||
|
||||
namespace Point_set_processing_3 {
|
||||
template <typename ValueType>
|
||||
struct Fake_point_range
|
||||
{
|
||||
struct iterator
|
||||
{
|
||||
typedef ValueType value_type;
|
||||
typedef std::ptrdiff_t difference_type;
|
||||
typedef ValueType* pointer;
|
||||
typedef ValueType reference;
|
||||
typedef std::random_access_iterator_tag iterator_category;
|
||||
};
|
||||
};
|
||||
|
||||
template<typename PlaneRange, typename NamedParameters>
|
||||
class GetPlaneMap
|
||||
{
|
||||
typedef typename PlaneRange::iterator::value_type Plane;
|
||||
typedef typename CGAL::Identity_property_map<Plane> DefaultPMap;
|
||||
typedef typename CGAL::Identity_property_map<const Plane> DefaultConstPMap;
|
||||
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def<
|
||||
internal_np::plane_t,
|
||||
NamedParameters,
|
||||
DefaultPMap
|
||||
> ::type type;
|
||||
|
||||
typedef typename internal_np::Lookup_named_param_def<
|
||||
internal_np::plane_t,
|
||||
NamedParameters,
|
||||
DefaultConstPMap
|
||||
> ::type const_type;
|
||||
};
|
||||
|
||||
template<typename NamedParameters>
|
||||
class GetPlaneIndexMap
|
||||
{
|
||||
typedef Constant_property_map<std::size_t, int> DummyPlaneIndexMap;
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def <
|
||||
internal_np::plane_index_t,
|
||||
NamedParameters,
|
||||
DummyPlaneIndexMap//default
|
||||
> ::type type;
|
||||
};
|
||||
|
||||
template<typename PointRange, typename NamedParameters>
|
||||
class GetIsConstrainedMap
|
||||
{
|
||||
typedef Static_boolean_property_map<
|
||||
typename std::iterator_traits<typename PointRange::iterator>::value_type,
|
||||
false> Default_map;
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def <
|
||||
internal_np::point_is_constrained_t,
|
||||
NamedParameters,
|
||||
Default_map //default
|
||||
> ::type type;
|
||||
};
|
||||
|
||||
template<typename PointRange, typename NamedParameters>
|
||||
class GetAdjacencies
|
||||
{
|
||||
public:
|
||||
typedef Emptyset_iterator Empty;
|
||||
typedef typename internal_np::Lookup_named_param_def <
|
||||
internal_np::adjacencies_t,
|
||||
NamedParameters,
|
||||
Empty//default
|
||||
> ::type type;
|
||||
};
|
||||
|
||||
} // namespace Point_set_processing_3
|
||||
|
||||
template<typename NamedParameters, typename DefaultSolver>
|
||||
class GetSolver
|
||||
{
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def <
|
||||
internal_np::sparse_linear_solver_t,
|
||||
NamedParameters,
|
||||
DefaultSolver
|
||||
> ::type type;
|
||||
};
|
||||
|
||||
template<typename NamedParameters, typename FT, unsigned int dim = 3>
|
||||
class GetDiagonalizeTraits
|
||||
{
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def <
|
||||
internal_np::diagonalize_traits_t,
|
||||
NamedParameters,
|
||||
Default_diagonalize_traits<FT, dim>
|
||||
> ::type type;
|
||||
};
|
||||
|
||||
template<typename NamedParameters>
|
||||
class GetSvdTraits
|
||||
{
|
||||
struct DummySvdTraits
|
||||
{
|
||||
typedef double FT;
|
||||
typedef int Vector;
|
||||
typedef int Matrix;
|
||||
static FT solve (const Matrix&, Vector&) { return 0.; }
|
||||
};
|
||||
|
||||
public:
|
||||
typedef DummySvdTraits NoTraits;
|
||||
|
||||
typedef typename internal_np::Lookup_named_param_def <
|
||||
internal_np::svd_traits_t,
|
||||
NamedParameters,
|
||||
typedef typename internal_np::Lookup_named_param_def<internal_np::svd_traits_t,
|
||||
NamedParameters,
|
||||
#if defined(CGAL_EIGEN3_ENABLED)
|
||||
Eigen_svd
|
||||
Eigen_svd
|
||||
#elif defined(CGAL_LAPACK_ENABLED)
|
||||
Lapack_svd
|
||||
Lapack_svd
|
||||
#else
|
||||
NoTraits
|
||||
NoTraits
|
||||
#endif
|
||||
> ::type type;
|
||||
};
|
||||
>::type type;
|
||||
};
|
||||
|
||||
template<typename NamedParameters>
|
||||
class GetImplementationTag
|
||||
template<typename NamedParameters>
|
||||
class GetImplementationTag
|
||||
{
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def<internal_np::implementation_tag_t,
|
||||
NamedParameters,
|
||||
Alpha_expansion_boost_adjacency_list_tag>::type type;
|
||||
};
|
||||
|
||||
template<typename NP>
|
||||
void set_stream_precision_from_NP(std::ostream& os, const NP& np)
|
||||
{
|
||||
using parameters::get_parameter;
|
||||
using parameters::choose_parameter;
|
||||
using parameters::is_default_parameter;
|
||||
|
||||
if(!is_default_parameter<NP, internal_np::stream_precision_t>())
|
||||
{
|
||||
public:
|
||||
typedef typename internal_np::Lookup_named_param_def <
|
||||
internal_np::implementation_tag_t,
|
||||
NamedParameters,
|
||||
Alpha_expansion_boost_adjacency_list_tag
|
||||
>::type type;
|
||||
};
|
||||
|
||||
template<typename NP>
|
||||
void set_stream_precision_from_NP(std::ostream& os, const NP& np)
|
||||
{
|
||||
using parameters::get_parameter;
|
||||
using parameters::choose_parameter;
|
||||
using parameters::is_default_parameter;
|
||||
|
||||
if(!is_default_parameter<NP, internal_np::stream_precision_t>())
|
||||
{
|
||||
const int precision = choose_parameter<int>(get_parameter(np,
|
||||
internal_np::stream_precision));
|
||||
os.precision(precision);
|
||||
}
|
||||
const int precision = choose_parameter<int>(get_parameter(np,
|
||||
internal_np::stream_precision));
|
||||
os.precision(precision);
|
||||
}
|
||||
} //namespace CGAL
|
||||
}
|
||||
|
||||
} // namespace CGAL
|
||||
|
||||
#endif // CGAL_BOOST_GRAPH_NAMED_PARAMETERS_HELPERS_H
|
||||
|
|
|
|||
Loading…
Reference in New Issue