* removed cruft from lazy

* Circular_kernel_3 fixed by removing inheritance
This commit is contained in:
Philipp Möller 2011-11-25 11:20:34 +00:00
parent 9dac440ba9
commit 5b5827839b
2 changed files with 31 additions and 63 deletions

View File

@ -411,25 +411,18 @@ template < class SK > \
template < class SK > template < class SK >
class Construct_sphere_3 class Construct_sphere_3
#ifndef CGAL_CFG_MATCHING_BUG_6
: public SK::Linear_kernel::Construct_sphere_3
#endif
{ {
typedef typename SK::Circular_arc_3 Circular_arc_3; typedef typename SK::Circular_arc_3 Circular_arc_3;
public:
typedef typename SK::Linear_kernel::Construct_sphere_3::result_type result_type;
#ifndef CGAL_CFG_MATCHING_BUG_6
using SK::Linear_kernel::Construct_sphere_3::operator();
#else
typedef typename SK::Linear_kernel LK; typedef typename SK::Linear_kernel LK;
typedef typename LK::Point_3 Point_3; typedef typename LK::Point_3 Point_3;
typedef typename LK::Circle_3 Circle_3; typedef typename LK::Circle_3 Circle_3;
typedef typename LK::Sphere_3 Sphere_3; typedef typename LK::Sphere_3 Sphere_3;
typedef typename LK::Construct_sphere_3 LK_Construct_sphere_3; typedef typename LK::Construct_sphere_3 LK_Construct_sphere_3;
typedef typename LK::FT FT; typedef typename LK::FT FT;
public:
typedef typename SK::Linear_kernel::Construct_sphere_3::result_type result_type;
result_type result_type
operator()( Return_base_tag tag, const Point_3& center, const FT& squared_radius, operator()( Return_base_tag tag, const Point_3& center, const FT& squared_radius,
@ -492,11 +485,6 @@ template < class SK > \
operator() (const Circle_3 & c) const operator() (const Circle_3 & c) const
{ return LK_Construct_sphere_3()(c); } { return LK_Construct_sphere_3()(c); }
#endif
result_type result_type
operator() ( const typename SK::Polynomial_for_spheres_2_3 &eq ) operator() ( const typename SK::Polynomial_for_spheres_2_3 &eq )
{ return SphericalFunctors::construct_sphere_3<SK>(eq); } { return SphericalFunctors::construct_sphere_3<SK>(eq); }
@ -508,19 +496,8 @@ template < class SK > \
template < class SK > template < class SK >
class Construct_plane_3 class Construct_plane_3
#ifndef CGAL_CFG_MATCHING_BUG_6
: public SK::Linear_kernel::Construct_plane_3
#endif
{ {
typedef typename SK::Circular_arc_3 Circular_arc_3; typedef typename SK::Circular_arc_3 Circular_arc_3;
public:
typedef typename SK::Linear_kernel::Construct_plane_3::result_type result_type;
#ifndef CGAL_CFG_MATCHING_BUG_6
using SK::Linear_kernel::Construct_plane_3::operator();
#else
typedef typename SK::Linear_kernel LK; typedef typename SK::Linear_kernel LK;
typedef typename LK::Construct_plane_3 LK_Construct_plane_3; typedef typename LK::Construct_plane_3 LK_Construct_plane_3;
typedef typename LK::RT RT; typedef typename LK::RT RT;
@ -533,6 +510,10 @@ template < class SK > \
typedef typename LK::Plane_3 Plane_3; typedef typename LK::Plane_3 Plane_3;
typedef typename LK::Circle_3 Circle_3; typedef typename LK::Circle_3 Circle_3;
public:
typedef typename SK::Linear_kernel::Construct_plane_3::result_type result_type;
public: public:
result_type result_type
@ -599,8 +580,6 @@ template < class SK > \
operator()(const Circle_3 & c) const operator()(const Circle_3 & c) const
{ return this->operator()(Return_base_tag(), c); } { return this->operator()(Return_base_tag(), c); }
#endif
result_type result_type
operator() ( const typename SK::Polynomial_1_3 &eq ) operator() ( const typename SK::Polynomial_1_3 &eq )
{ return SphericalFunctors::construct_plane_3<SK>(eq); } { return SphericalFunctors::construct_plane_3<SK>(eq); }
@ -616,70 +595,61 @@ template < class SK > \
{ {
typedef typename SK::Line_arc_3 Line_arc_3; typedef typename SK::Line_arc_3 Line_arc_3;
typedef typename SK::Line_3 Line_3; typedef typename SK::Line_3 Line_3;
typedef typename SK::Linear_kernel::Construct_line_3::result_type forwarded_result_type;
public:
typedef typename SK::Point_3 Point_3; typedef typename SK::Point_3 Point_3;
typedef typename SK::Direction_3 Direction_3; typedef typename SK::Direction_3 Direction_3;
typedef typename SK::Vector_3 Vector_3; typedef typename SK::Vector_3 Vector_3;
typedef typename SK::Segment_3 Segment_3; typedef typename SK::Segment_3 Segment_3;
typedef typename SK::Ray_3 Ray_3; typedef typename SK::Ray_3 Ray_3;
public:
typedef typename SK::Linear_kernel::Construct_line_3 LK_Construct_line_3;
typedef typename LK_Construct_line_3::result_type result_type;
template<class> result_type
struct result {
typedef forwarded_result_type type;
};
template<typename F>
struct result<F(Line_arc_3)> {
typdef const forwarded_result_type& type;
};
forwarded_result_type
operator()(Return_base_tag, const Point_3& p, const Point_3& q) const operator()(Return_base_tag, const Point_3& p, const Point_3& q) const
{ return LK_Construct_line_3()(p, Vector_3(p, q)); } { return LK_Construct_line_3()(p, Vector_3(p, q)); }
forwarded_result_type result_type
operator()(Return_base_tag, const Point_3& p, const Direction_3& d) const operator()(Return_base_tag, const Point_3& p, const Direction_3& d) const
{ return operator()(Return_base_tag(), p, Vector_3(d.dx(), d.dy(), d.dz())); } { return operator()(Return_base_tag(), p, Vector_3(d.dx(), d.dy(), d.dz())); }
forwarded_result_type result_type
operator()(Return_base_tag, const Point_3& p, const Vector_3& v) const operator()(Return_base_tag, const Point_3& p, const Vector_3& v) const
{ return LK_Construct_line_3()(p, v); } { return LK_Construct_line_3()(p, v); }
forwarded_result_type result_type
operator()(Return_base_tag, const Segment_3& s) const operator()(Return_base_tag, const Segment_3& s) const
{ return LK_Construct_line_3()(s.source(), Vector_3(s.source(), s.target())); } { return LK_Construct_line_3()(s.source(), Vector_3(s.source(), s.target())); }
forwarded_result_type result_type
operator()(Return_base_tag, const Ray_3& r) const operator()(Return_base_tag, const Ray_3& r) const
{ return LK_Construct_line_3()(r.source(), Vector_3(r.source(), r.second_point())); } { return LK_Construct_line_3()(r.source(), Vector_3(r.source(), r.second_point())); }
forwarded_result_type result_type
operator()(const Point_3& p, const Point_3& q) const operator()(const Point_3& p, const Point_3& q) const
{ return this->operator()(Return_base_tag(), p, q); } { return this->operator()(Return_base_tag(), p, q); }
forwarded_result_type result_type
operator()(const Point_3& p, const Direction_3& d) const operator()(const Point_3& p, const Direction_3& d) const
{ return this->operator()(Return_base_tag(), p, d); } { return this->operator()(Return_base_tag(), p, d); }
forwarded_result_type result_type
operator()(const Point_3& p, const Vector_3& v) const operator()(const Point_3& p, const Vector_3& v) const
{ return this->operator()(Return_base_tag(), p, v); } { return this->operator()(Return_base_tag(), p, v); }
forwarded_result_type result_type
operator()(const Segment_3& s) const operator()(const Segment_3& s) const
{ return this->operator()(Return_base_tag(), s); } { return this->operator()(Return_base_tag(), s); }
forwarded_result_type result_type
operator()(const Ray_3& r) const operator()(const Ray_3& r) const
{ return this->operator()(Return_base_tag(), r); } { return this->operator()(Return_base_tag(), r); }
const forwarded_result_type& operator() (const Line_arc_3 & a) const const result_type&
operator() (const Line_arc_3 & a) const
{ return (a.rep().supporting_line()); } { return (a.rep().supporting_line()); }
forwarded_result_type result_type
operator() ( const typename SK::Polynomials_for_line_3 &eq ) operator() ( const typename SK::Polynomials_for_line_3 &eq )
{ return SphericalFunctors::construct_line_3<SK>(eq); } { return SphericalFunctors::construct_line_3<SK>(eq); }

View File

@ -31,6 +31,7 @@
#include <CGAL/Filtered_kernel/Cartesian_coordinate_iterator_2.h> #include <CGAL/Filtered_kernel/Cartesian_coordinate_iterator_2.h>
#include <CGAL/Filtered_kernel/Cartesian_coordinate_iterator_3.h> #include <CGAL/Filtered_kernel/Cartesian_coordinate_iterator_3.h>
#include <CGAL/Lazy.h> #include <CGAL/Lazy.h>
#include <boost/mpl/if.hpp> #include <boost/mpl/if.hpp>
#include <boost/mpl/eval_if.hpp> #include <boost/mpl/eval_if.hpp>
#include <boost/mpl/not.hpp> #include <boost/mpl/not.hpp>
@ -47,9 +48,6 @@ struct Delayed_void_result {
typedef typename T::template result<void>::type type; typedef typename T::template result<void>::type type;
}; };
template<typename T>
struct foobar;
// goes through the standard process of selecting the right // goes through the standard process of selecting the right
// Lazy_something after the kind of the return type has been // Lazy_something after the kind of the return type has been
// determined // determined
@ -76,6 +74,7 @@ class Lazy_kernel_generic_base
// TODO : Static_filters_base too ? Check performance // TODO : Static_filters_base too ? Check performance
{ {
public: public:
typedef AK_ Approximate_kernel; typedef AK_ Approximate_kernel;
typedef EK_ Exact_kernel; typedef EK_ Exact_kernel;
typedef E2A_ E2A; typedef E2A_ E2A;
@ -158,7 +157,6 @@ public:
typedef Filtered_predicate<typename Exact_kernel::P, typename Approximate_kernel::P, C2E, C2F> P; \ typedef Filtered_predicate<typename Exact_kernel::P, typename Approximate_kernel::P, C2E, C2F> P; \
P Pf() const { return P(); } P Pf() const { return P(); }
// We change the constructions. // We change the constructions.
#ifdef CGAL_INTERSECT_WITH_ITERATORS_2 #ifdef CGAL_INTERSECT_WITH_ITERATORS_2
#define CGAL_Kernel_cons(C, Cf) \ #define CGAL_Kernel_cons(C, Cf) \
@ -180,9 +178,9 @@ public:
typedef typename boost::mpl::eval_if< boost::mpl::not_< boost::is_same< typename boost::result_of< typename Approximate_kernel::C () >::type, void > >, \ typedef typename boost::mpl::eval_if< boost::mpl::not_< boost::is_same< typename boost::result_of< typename Approximate_kernel::C () >::type, void > >, \
internal::Standard_pick< typename boost::result_of<typename Approximate_kernel::C () >::type, Approximate_kernel, Exact_kernel, Kernel, typename Approximate_kernel::C, typename Exact_kernel::C >, \ internal::Standard_pick< typename boost::result_of<typename Approximate_kernel::C () >::type, Approximate_kernel, Exact_kernel, Kernel, typename Approximate_kernel::C, typename Exact_kernel::C >, \
internal::Standard_pick< typename boost::mpl::eval_if< boost::is_same< typename boost::result_of< typename Approximate_kernel::C () >::type, void >, \ internal::Standard_pick< typename boost::mpl::eval_if< boost::is_same< typename boost::result_of< typename Approximate_kernel::C () >::type, void >, \
internal::Delayed_void_result< typename Approximate_kernel::C >, \ internal::Delayed_void_result< typename Approximate_kernel::C >, \
boost::mpl::identity<void> >::type, \ boost::mpl::identity<void> >::type, \
Approximate_kernel, Exact_kernel, Kernel, typename Approximate_kernel::C, typename Exact_kernel::C > \ Approximate_kernel, Exact_kernel, Kernel, typename Approximate_kernel::C, typename Exact_kernel::C > \
>::type C; \ >::type C; \
C Cf() const { return C(); } C Cf() const { return C(); }