mirror of https://github.com/CGAL/cgal
Rename Tag.
This commit is contained in:
parent
023eaa2270
commit
e71d7c93b1
|
|
@ -64,6 +64,8 @@ struct Cartesian_LA_base_d : public Dimension_base<Dim_>
|
|||
template<class, class=void> struct Type {};
|
||||
template<class D> struct Type< Point_tag, D> { typedef Vector_ type; };
|
||||
template<class D> struct Type<Vector_tag, D> { typedef Vector_ type; };
|
||||
template<class D> struct Type< RT_tag, D> { typedef RT type; };
|
||||
template<class D> struct Type< FT_tag, D> { typedef FT type; };
|
||||
|
||||
typedef typeset<Point_tag>
|
||||
::add<Vector_tag>::type
|
||||
|
|
|
|||
|
|
@ -48,9 +48,9 @@ struct Cartesian_change_FT_base : public
|
|||
};
|
||||
*/
|
||||
|
||||
template<class Tag,class Type_>
|
||||
template<class Tag_,class Type_>
|
||||
struct Construct_cartesian_const_iterator_ {
|
||||
typedef typename Get_functor<Kernel_base, Tag>::type Functor_base;
|
||||
typedef typename Get_functor<Kernel_base, Tag_>::type Functor_base;
|
||||
Construct_cartesian_const_iterator_(){}
|
||||
Construct_cartesian_const_iterator_(Self const&r):f(r){}
|
||||
Functor_base f;
|
||||
|
|
@ -67,9 +67,9 @@ struct Cartesian_change_FT_base : public
|
|||
typedef Construct_cartesian_const_iterator_<Construct_ttag<Point_cartesian_const_iterator_tag>,Point_cartesian_const_iterator> Construct_point_cartesian_const_iterator;
|
||||
typedef Construct_cartesian_const_iterator_<Construct_ttag<Vector_cartesian_const_iterator_tag>,Vector_cartesian_const_iterator> Construct_vector_cartesian_const_iterator;
|
||||
|
||||
template<class Tag>
|
||||
template<class Tag_>
|
||||
struct Compute_cartesian_coordinate {
|
||||
typedef typename Get_functor<Kernel_base, Tag>::type Functor_base;
|
||||
typedef typename Get_functor<Kernel_base, Tag_>::type Functor_base;
|
||||
Compute_cartesian_coordinate(){}
|
||||
Compute_cartesian_coordinate(Self const&r):f(r){}
|
||||
Functor_base f;
|
||||
|
|
|
|||
|
|
@ -10,10 +10,10 @@
|
|||
|
||||
namespace CGAL {
|
||||
namespace internal {
|
||||
template<class K,class Tag,bool=iterator_tag_traits<Tag>::is_iterator>
|
||||
struct Type_or_iter : K::template Type<Tag> {};
|
||||
template<class K,class Tag>
|
||||
struct Type_or_iter<K, Tag, true> : K::template Iterator<Tag> {};
|
||||
template<class K,class Tag_,bool=iterator_tag_traits<Tag_>::is_iterator>
|
||||
struct Type_or_iter : K::template Type<Tag_> {};
|
||||
template<class K,class Tag_>
|
||||
struct Type_or_iter<K, Tag_, true> : K::template Iterator<Tag_> {};
|
||||
}
|
||||
template<class K, class Base=K, class List=typename typeset_union<typename K::Object_list,typename K::Iterator_list>::type> struct Define_kernel_types;
|
||||
template<class K, class Base>
|
||||
|
|
|
|||
|
|
@ -52,13 +52,13 @@ template<class Final_, class K1, class K2, class List>
|
|||
class KernelD_converter_
|
||||
: public KernelD_converter_<Final_,K1,K2,typename List::tail>
|
||||
{
|
||||
typedef typename List::head Tag;
|
||||
typedef typename List::head Tag_;
|
||||
typedef typename List::tail Rest;
|
||||
typedef KernelD_converter_<Final_,K1,K2,Rest> Base;
|
||||
typedef typename Get_type<K1,Tag>::type K1_Obj;
|
||||
typedef typename Get_type<K2,Tag>::type K2_Obj;
|
||||
typedef typename Get_functor<K1, Convert_ttag<Tag> >::type K1_Conv;
|
||||
typedef KO_converter<Tag,K1,K2> KOC;
|
||||
typedef typename Get_type<K1,Tag_>::type K1_Obj;
|
||||
typedef typename Get_type<K2,Tag_>::type K2_Obj;
|
||||
typedef typename Get_functor<K1, Convert_ttag<Tag_> >::type K1_Conv;
|
||||
typedef KO_converter<Tag_,K1,K2> KOC;
|
||||
typedef BOOSTD is_same<K1_Conv, Null_functor> no_converter;
|
||||
typedef typename internal::Map_taglist_to_typelist<K1,Rest>::type::template contains<K1_Obj> duplicate;
|
||||
|
||||
|
|
@ -68,7 +68,7 @@ class KernelD_converter_
|
|||
// If Point==Vector, keep only one conversion
|
||||
duplicate::value ||
|
||||
// For iterator objects, the default is make_transforming_iterator
|
||||
(iterator_tag_traits<Tag>::is_iterator && no_converter::value),
|
||||
(iterator_tag_traits<Tag_>::is_iterator && no_converter::value),
|
||||
Do_not_use,K1_Obj>::type argument_type;
|
||||
//typedef typename KOC::argument_type K1_Obj;
|
||||
//typedef typename KOC::result_type K2_Obj;
|
||||
|
|
|
|||
|
|
@ -79,12 +79,12 @@ template <class Base_> struct Kernel_d_interface : public Base_ {
|
|||
// Kernel_d requires a common iterator type for points and vectors
|
||||
// TODO: provide this mixed functor in preKernel?
|
||||
CGAL_static_assertion((boost::is_same<typename CGAL::decay<typename boost::result_of<CVI(Vector_d,CGAL::Begin_tag)>::type>::type, result_type>::value));
|
||||
template <class Tag>
|
||||
result_type operator()(Point_d const&p, Tag t)const{
|
||||
template <class Tag_>
|
||||
result_type operator()(Point_d const&p, Tag_ t)const{
|
||||
return CPI(this->kernel())(p,t);
|
||||
}
|
||||
template <class Tag>
|
||||
result_type operator()(Vector_d const&v, Tag t)const{
|
||||
template <class Tag_>
|
||||
result_type operator()(Vector_d const&v, Tag_ t)const{
|
||||
return CVI(this->kernel())(v,t);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -41,16 +41,16 @@ namespace CGAL {
|
|||
template<class>struct Convert_ttag {};
|
||||
|
||||
template<class> struct map_functor_type { typedef Misc_tag type; };
|
||||
template<class Tag, class Obj, class Base> struct Typedef_tag_type;
|
||||
//template<class Kernel, class Tag> struct Read_tag_type {};
|
||||
template<class Tg, class Obj, class Base> struct Typedef_tag_type;
|
||||
//template<class Kernel, class Tg> struct Read_tag_type {};
|
||||
|
||||
template<class Kernel, class Tag>
|
||||
template<class Kernel, class Tg>
|
||||
struct Provides_type
|
||||
: Has_type_different_from<Get_type<Kernel, Tag>, Null_type> {};
|
||||
: Has_type_different_from<Get_type<Kernel, Tg>, Null_type> {};
|
||||
|
||||
template<class Kernel, class Tag, class O=void>
|
||||
template<class Kernel, class Tg, class O=void>
|
||||
struct Provides_functor
|
||||
: Has_type_different_from<Get_functor<Kernel, Tag, O>, Null_functor> {};
|
||||
: Has_type_different_from<Get_functor<Kernel, Tg, O>, Null_functor> {};
|
||||
|
||||
template<class K, class List, bool=boost::mpl::empty<List>::type::value>
|
||||
struct Provides_functors : boost::mpl::and_ <
|
||||
|
|
@ -67,25 +67,27 @@ namespace CGAL {
|
|||
struct Provides_types<K, List, true> : boost::true_type {};
|
||||
|
||||
namespace internal { BOOST_MPL_HAS_XXX_TEMPLATE_DEF(Type) }
|
||||
template<class Kernel, class Tag,
|
||||
template<class Kernel, class Tg,
|
||||
bool = internal::has_Type<Kernel>::value /* false */>
|
||||
struct Provides_type_i : boost::false_type {};
|
||||
template<class Kernel, class Tag>
|
||||
struct Provides_type_i <Kernel, Tag, true>
|
||||
: Has_type_different_from<typename Kernel::template Type<Tag>, Null_type> {};
|
||||
template<class Kernel, class Tg>
|
||||
struct Provides_type_i <Kernel, Tg, true>
|
||||
: Has_type_different_from<typename Kernel::template Type<Tg>, Null_type> {};
|
||||
|
||||
namespace internal { BOOST_MPL_HAS_XXX_TEMPLATE_DEF(Functor) }
|
||||
template<class Kernel, class Tag, class O=void,
|
||||
template<class Kernel, class Tg, class O=void,
|
||||
bool = internal::has_Functor<Kernel>::value /* false */>
|
||||
struct Provides_functor_i : boost::false_type {};
|
||||
template<class Kernel, class Tag, class O>
|
||||
struct Provides_functor_i <Kernel, Tag, O, true>
|
||||
: Has_type_different_from<typename Kernel::template Functor<Tag, O>, Null_type> {};
|
||||
template<class Kernel, class Tg, class O>
|
||||
struct Provides_functor_i <Kernel, Tg, O, true>
|
||||
: Has_type_different_from<typename Kernel::template Functor<Tg, O>, Null_type> {};
|
||||
|
||||
|
||||
#define DECL_OBJ(X) struct X##_tag {}; \
|
||||
#define DECL_OBJ_(X) \
|
||||
template<class Obj,class Base> \
|
||||
struct Typedef_tag_type<X##_tag, Obj, Base> : Base { typedef Obj X; };
|
||||
struct Typedef_tag_type<X##_tag, Obj, Base> : Base { typedef Obj X; }
|
||||
#define DECL_OBJ(X) struct X##_tag {}; \
|
||||
DECL_OBJ_(X)
|
||||
|
||||
//namespace has_object { BOOST_MPL_HAS_XXX_TRAIT_DEF(X) }
|
||||
//template<class Kernel>
|
||||
|
|
@ -97,6 +99,14 @@ namespace CGAL {
|
|||
DECL_OBJ(FT);
|
||||
DECL_OBJ(RT);
|
||||
|
||||
//DECL_OBJ(Boolean); // FIXME: Boolean_tag is already taken, and is a template :-(
|
||||
DECL_OBJ(Comparison_result);
|
||||
DECL_OBJ(Sign);
|
||||
DECL_OBJ(Orientation); // Note: duplicate with the functor tag!
|
||||
DECL_OBJ(Oriented_side);
|
||||
DECL_OBJ(Bounded_side);
|
||||
DECL_OBJ(Angle);
|
||||
|
||||
DECL_OBJ(Vector);
|
||||
DECL_OBJ(Point);
|
||||
DECL_OBJ(Segment);
|
||||
|
|
@ -108,6 +118,7 @@ namespace CGAL {
|
|||
DECL_OBJ(Iso_box);
|
||||
DECL_OBJ(Bbox);
|
||||
DECL_OBJ(Aff_transformation);
|
||||
#undef DECL_OBJ_
|
||||
#undef DECL_OBJ
|
||||
|
||||
template<class> struct is_NT_tag { enum { value = false }; };
|
||||
|
|
@ -140,7 +151,7 @@ namespace CGAL {
|
|||
typedef C##_tag container; \
|
||||
}; \
|
||||
template<class Obj,class Base> \
|
||||
struct Typedef_tag_type<X##_tag, Obj, Base> : Base { typedef Obj X; };
|
||||
struct Typedef_tag_type<X##_tag, Obj, Base> : Base { typedef Obj X; }
|
||||
|
||||
//namespace has_object { BOOST_MPL_HAS_XXX_TRAIT_DEF(X) }
|
||||
//template<class Kernel>
|
||||
|
|
@ -187,8 +198,10 @@ namespace CGAL {
|
|||
#endif
|
||||
|
||||
//FIXME: choose a convention: prefix with Predicate_ ?
|
||||
#define DECL_PREDICATE(X) struct X##_tag {}; \
|
||||
#define DECL_PREDICATE_(X) \
|
||||
template<>struct map_functor_type<X##_tag>{typedef Predicate_tag type;}
|
||||
#define DECL_PREDICATE(X) struct X##_tag {}; \
|
||||
DECL_PREDICATE_(X)
|
||||
DECL_PREDICATE(Less_point_cartesian_coordinate);
|
||||
DECL_PREDICATE(Compare_point_cartesian_coordinate);
|
||||
DECL_PREDICATE(Compare_distance);
|
||||
|
|
@ -196,7 +209,7 @@ namespace CGAL {
|
|||
DECL_PREDICATE(Less_lexicographically);
|
||||
DECL_PREDICATE(Less_or_equal_lexicographically);
|
||||
DECL_PREDICATE(Equal_points);
|
||||
DECL_PREDICATE(Orientation);
|
||||
DECL_PREDICATE_(Orientation); // duplicate with the type
|
||||
DECL_PREDICATE(Orientation_of_points);
|
||||
DECL_PREDICATE(Orientation_of_vectors);
|
||||
DECL_PREDICATE(Side_of_oriented_sphere);
|
||||
|
|
|
|||
|
|
@ -48,8 +48,8 @@ template <class T,class U> struct is_iterator_type_<T,U,true> :
|
|||
template <class T> struct is_iterator :
|
||||
internal::is_iterator_<typename boost::remove_cv<typename boost::remove_reference<T>::type>::type> {};
|
||||
|
||||
template <class T,class Tag> struct is_iterator_type :
|
||||
internal::is_iterator_type_<typename boost::remove_cv<typename boost::remove_reference<T>::type>::type,Tag> {};
|
||||
template <class T,class Tg> struct is_iterator_type :
|
||||
internal::is_iterator_type_<typename boost::remove_cv<typename boost::remove_reference<T>::type>::type,Tg> {};
|
||||
|
||||
template <class T,class U,bool=is_iterator<T>::value> struct is_iterator_to {
|
||||
enum { value=false };
|
||||
|
|
|
|||
|
|
@ -231,14 +231,15 @@ BOOST_PP_REPEAT_FROM_TO(1, 8, CODE, _ )
|
|||
};
|
||||
}
|
||||
|
||||
// TODO: make a Cartesian-only variant
|
||||
#define CGAL_STRIP_PAREN_(...) __VA_ARGS__
|
||||
#define CGAL_STRIP_PAREN(...) CGAL_STRIP_PAREN_ __VA_ARGS__
|
||||
// What to do with O? pass it down to other functors or drop it?
|
||||
#define CGAL_KD_DEFAULT_FUNCTOR(Tag,Name,ReqTyp,ReqFun) \
|
||||
#define CGAL_KD_DEFAULT_FUNCTOR(Tg,Name,ReqTyp,ReqFun) \
|
||||
template <class K, class O> \
|
||||
struct Get_functor<K, Tag, O, \
|
||||
struct Get_functor<K, Tg, O, \
|
||||
typename boost::mpl::if_c< \
|
||||
Provides_functor_i<K, Tag, O>::value \
|
||||
Provides_functor_i<K, Tg, O>::value \
|
||||
|| !Provides_types<K, boost::mpl::vector<CGAL_STRIP_PAREN_ ReqTyp> >::value \
|
||||
|| !Provides_functors<K, boost::mpl::vector<CGAL_STRIP_PAREN_ ReqFun> >::value \
|
||||
, int, void>::type> \
|
||||
|
|
@ -247,11 +248,11 @@ BOOST_PP_REPEAT_FROM_TO(1, 8, CODE, _ )
|
|||
}
|
||||
|
||||
// Not used yet, may need some changes.
|
||||
#define CGAL_KD_DEFAULT_TYPE(Tag,Name,ReqTyp,ReqFun) \
|
||||
#define CGAL_KD_DEFAULT_TYPE(Tg,Name,ReqTyp,ReqFun) \
|
||||
template <class K> \
|
||||
struct Get_type<K, Tag, \
|
||||
struct Get_type<K, Tg, \
|
||||
typename boost::mpl::if_c< \
|
||||
Provides_type_i<K, Tag>::value \
|
||||
Provides_type_i<K, Tg>::value \
|
||||
|| !Provides_types<K, boost::mpl::vector<CGAL_STRIP_PAREN_ ReqTyp> >::value \
|
||||
|| !Provides_functors<K, boost::mpl::vector<CGAL_STRIP_PAREN_ ReqFun> >::value \
|
||||
, int, void>::type> \
|
||||
|
|
|
|||
Loading…
Reference in New Issue