#ifndef CGAL_KERNEL_D_CARTESIAN_COMPLETE_H #define CGAL_KERNEL_D_CARTESIAN_COMPLETE_H #include #include #include #include #include namespace CGAL { namespace internal { BOOST_MPL_HAS_XXX_TRAIT_DEF(Segment) BOOST_MPL_HAS_XXX_TRAIT_DEF(Ray) BOOST_MPL_HAS_XXX_TRAIT_DEF(Direction) BOOST_MPL_HAS_XXX_TRAIT_DEF(Line) } template struct Cartesian_complete_types : public R_ { typedef R_ Kernel_base; #define CGAL_Kernel_obj2(X) typedef typename boost::mpl::if_c::value,X##Cd,R_>::type::X X; #include }; template struct Cartesian_complete_constructors : public R_ { typedef R_ Kernel_base; template struct Construct { typedef typename Kernel_base::template Construct::type Base_functor; typedef typename boost::mpl::if_, typename Cartesian_complete_constructors::template Construct::type, Base_functor>::type type; }; }; template struct Cartesian_complete_constructors : public R_ { typedef R_ Kernel_base; template struct Construct : Kernel_base::template Construct { }; #define CGAL_Kernel_cons2(F,f) \ template struct Construct { \ typedef CartesianDKernelFunctors::F type; \ type f() const { return type(); } \ }; #include }; template struct Cartesian_complete_predicates : public R_ { typedef R_ Kernel_base; template struct Predicate { typedef typename Kernel_base::template Predicate::type Base_functor; typedef typename boost::mpl::if_, typename Cartesian_complete_predicates::template Predicate::type, Base_functor>::type type; }; }; template struct Cartesian_complete_predicates : public R_ { typedef R_ Kernel_base; template struct Predicate : Kernel_base::template Predicate { }; #define CGAL_Kernel_pred(F,f) \ template struct Predicate { \ typedef CartesianDKernelFunctors::F type; \ type f() const { return type(); } \ }; #include }; template struct Cartesian_complete_computes : public R_ { typedef R_ Kernel_base; template struct Compute { typedef typename Kernel_base::template Compute::type Base_functor; typedef typename boost::mpl::if_, typename Cartesian_complete_computes::template Compute::type, Base_functor>::type type; }; }; template struct Cartesian_complete_computes : public R_ { typedef R_ Kernel_base; template struct Compute : Kernel_base::template Compute { }; #define CGAL_Kernel_comp2(F,f) \ template struct Compute { \ typedef CartesianDKernelFunctors::F type; \ type f() const { return type(); } \ }; #include }; } #endif // CGAL_KERNEL_D_CARTESIAN_COMPLETE_H