Moved to namespace internal,renamed HAS_DIMENSION to HAS_DIMENSION_TAG

This commit is contained in:
m.overtheil 2014-11-03 12:02:51 +01:00
parent 9a7660b6fa
commit 87aa5ad7c3
4 changed files with 67 additions and 55 deletions

View File

@ -28,30 +28,32 @@
#include <boost/mpl/has_xxx.hpp>
#ifndef HAS_DIMENSION
#define HAS_DIMENSION
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_dimension,Dimension,false);
#endif
namespace CGAL {
template <class SearchTraits>
class Euclidean_distance;
template <class SearchTraits, bool has_dim = has_dimension<SearchTraits>::value>
struct Euclidean_distance_base;
template <class SearchTraits>
struct Euclidean_distance_base<SearchTraits,true>{
typedef typename SearchTraits::Dimension Dimension;
};
template <class SearchTraits>
struct Euclidean_distance_base<SearchTraits,false>{
typedef Dynamic_dimension_tag Dimension;
};
namespace internal{
#ifndef HAS_DIMENSION_TAG
#define HAS_DIMENSION_TAG
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_dimension,Dimension,false);
#endif
template <class SearchTraits, bool has_dim = has_dimension<SearchTraits>::value>
struct Euclidean_distance_base;
template <class SearchTraits>
struct Euclidean_distance_base<SearchTraits,true>{
typedef typename SearchTraits::Dimension Dimension;
};
template <class SearchTraits>
struct Euclidean_distance_base<SearchTraits,false>{
typedef Dynamic_dimension_tag Dimension;
};
template <class SearchTraits>
struct Spatial_searching_default_distance{
typedef ::CGAL::Euclidean_distance<SearchTraits> type;
@ -69,7 +71,7 @@ namespace CGAL {
typedef typename SearchTraits::Point_d Point_d;
typedef Point_d Query_item;
typedef typename Euclidean_distance_base<SearchTraits>::Dimension D;
typedef typename internal::Euclidean_distance_base<SearchTraits>::Dimension D;
// default constructor

View File

@ -25,15 +25,18 @@
#include <boost/mpl/has_xxx.hpp>
#ifndef HAS_DIMENSION
#define HAS_DIMENSION
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_dimension,Dimension,false);
#endif
namespace CGAL {
template <class SearchTraits, class Distance,class Splitter,class Tree>
class K_neighbor_search;
namespace internal{
#ifndef HAS_DIMENSION_TAG
#define HAS_DIMENSION_TAG
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_dimension,Dimension,false);
#endif
template <class SearchTraits, bool has_dim = has_dimension<SearchTraits>::value>
struct K_neighbor_search_base;
@ -46,6 +49,7 @@ class K_neighbor_search;
struct K_neighbor_search_base<SearchTraits,false>{
typedef Dynamic_dimension_tag Dimension;
};
}//internal
template <class SearchTraits,
class Distance= typename internal::Spatial_searching_default_distance<SearchTraits>::type,
class Splitter= Sliding_midpoint<SearchTraits> ,
@ -55,7 +59,7 @@ class K_neighbor_search: public internal::K_neighbor_search<SearchTraits,Distanc
public:
typedef typename Base::FT FT;
typedef typename K_neighbor_search_base<SearchTraits>::Dimension D;
typedef typename internal::K_neighbor_search_base<SearchTraits>::Dimension D;
K_neighbor_search(const Tree& tree, const typename Base::Query_item& q,
unsigned int k=1, FT Eps=FT(0.0), bool Search_nearest=true, const Distance& d=Distance(),bool sorted=true)

View File

@ -31,32 +31,35 @@
#include <CGAL/Compact_container.h>
#include <boost/mpl/has_xxx.hpp>
#ifndef HAS_DIMENSION
#define HAS_DIMENSION
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_dimension,Dimension,false);
#endif
#ifdef CGAL_HAS_THREADS
#include <boost/thread/mutex.hpp>
#endif
namespace CGAL {
template <class SearchTraits, class Splitter_, class UseExtendedNode >
class Kd_tree;
template <class SearchTraits, bool has_dim = has_dimension<SearchTraits>::value>
struct Kd_tree_base;
namespace internal{
#ifndef HAS_DIMENSION_TAG
#define HAS_DIMENSION_TAG
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_dimension,Dimension,false);
#endif
template <class SearchTraits>
struct Kd_tree_base<SearchTraits,true>{
typedef typename SearchTraits::Dimension Dimension;
};
template <class SearchTraits, bool has_dim = has_dimension<SearchTraits>::value>
struct Kd_tree_base;
template <class SearchTraits>
struct Kd_tree_base<SearchTraits,false>{
typedef Dynamic_dimension_tag Dimension;
};
template <class SearchTraits>
struct Kd_tree_base<SearchTraits,true>{
typedef typename SearchTraits::Dimension Dimension;
};
template <class SearchTraits>
struct Kd_tree_base<SearchTraits,false>{
typedef Dynamic_dimension_tag Dimension;
};
}
//template <class SearchTraits, class Splitter_=Median_of_rectangle<SearchTraits>, class UseExtendedNode = Tag_true >
template <class SearchTraits, class Splitter_=Sliding_midpoint<SearchTraits>, class UseExtendedNode = Tag_true >
@ -85,7 +88,7 @@ public:
typedef typename Kd_tree_base<SearchTraits>::Dimension D;
typedef typename internal::Kd_tree_base<SearchTraits>::Dimension D;
private:
SearchTraits traits_;

View File

@ -30,10 +30,6 @@
#include <CGAL/Kd_tree_rectangle.h>
#include <boost/optional.hpp>
#ifndef HAS_DIMENSION
#define HAS_DIMENSION
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_dimension,Dimension,false);
#endif
@ -42,18 +38,25 @@ namespace CGAL {
template <class Traits>
class Point_container;
template <class SearchTraits, bool has_dim = has_dimension<SearchTraits>::value>
struct Point_container_base;
namespace internal{
#ifndef HAS_DIMENSION_TAG
#define HAS_DIMENSION_TAG
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_dimension,Dimension,false);
#endif
template <class SearchTraits>
struct Point_container_base<SearchTraits,true>{
typedef typename SearchTraits::Dimension Dimension;
};
template <class SearchTraits, bool has_dim = has_dimension<SearchTraits>::value>
struct Point_container_base;
template <class SearchTraits>
struct Point_container_base<SearchTraits,false>{
typedef Dynamic_dimension_tag Dimension;
};
template <class SearchTraits>
struct Point_container_base<SearchTraits,true>{
typedef typename SearchTraits::Dimension Dimension;
};
template <class SearchTraits>
struct Point_container_base<SearchTraits,false>{
typedef Dynamic_dimension_tag Dimension;
};
}
template <class Traits>
class Point_container {
@ -67,7 +70,7 @@ public:
typedef typename Point_vector::iterator iterator;
typedef typename Point_vector::const_iterator const_iterator;
typedef typename Point_container_base<Traits>::Dimension D;
typedef typename internal::Point_container_base<Traits>::Dimension D;
private:
Traits traits;
// the iterator range of the Point_container