diff --git a/Filtered_kernel/include/CGAL/Lazy_kernel.h b/Filtered_kernel/include/CGAL/Lazy_kernel.h index 5c34f27c67f..79b11054f6d 100644 --- a/Filtered_kernel/include/CGAL/Lazy_kernel.h +++ b/Filtered_kernel/include/CGAL/Lazy_kernel.h @@ -336,11 +336,32 @@ public: FT > LR; + typedef Lazy_rep_n LRint; - LR * lr = dynamic_cast(p.ptr()); - if(lr && (! lr->et)){ - return std::get<2>(lr->l); + + auto&& t = typeid(*p.ptr()); + if(t.name() == typeid(LR).name()){ + LR * lr = static_cast(p.ptr()); + if(lr->is_lazy()){ + return std::get<2>(lr->l); + } + }else{ + if(t.name() == typeid(LRint).name()){ + LRint* lrint = static_cast(p.ptr()); + if(lrint->is_lazy()){ + return std::get<2>(lrint->l); + } + } } + return BaseClass().compute_weight_2_object()(p); } @@ -366,11 +387,32 @@ public: FT > LR; + typedef Lazy_rep_n LRint; - LR * lr = dynamic_cast(p.ptr()); - if(lr && (! lr->et)){ - return std::get<2>(lr->l); + + auto&& t = typeid(*p.ptr()); + if(t.name() == typeid(LR).name()){ + LR * lr = static_cast(p.ptr()); + if(lr->is_lazy()){ + return std::get<2>(lr->l); + } + }else{ + if(t.name() == typeid(LRint).name()){ + LRint* lrint = static_cast(p.ptr()); + if(lrint->is_lazy()){ + return std::get<2>(lrint->l); + } + } } + return BaseClass().compute_weight_3_object()(p); } @@ -416,11 +458,15 @@ public: auto&& t = typeid(*p.ptr()); if(t.name() == typeid(LR).name()){ LR * lr = static_cast(p.ptr()); - return std::get<1>(lr->l); + if(lr->is_lazy()){ + return std::get<1>(lr->l); + } }else{ if(t.name() == typeid(LRint).name()){ LRint* lrint = static_cast(p.ptr()); - return std::get<1>(lrint->l); + if(lrint->is_lazy()){ + return std::get<1>(lrint->l); + } } } @@ -469,11 +515,15 @@ public: auto&& t = typeid(*p.ptr()); if(t.name() == typeid(LR).name()){ LR * lr = static_cast(p.ptr()); - return std::get<1>(lr->l); + if(lr->is_lazy()){ + return std::get<1>(lr->l); + } }else{ if(t.name() == typeid(LRint).name()){ LRint* lrint = static_cast(p.ptr()); - return std::get<1>(lrint->l); + if(lrint->is_lazy()){ + return std::get<1>(lrint->l); + } } } @@ -482,6 +532,7 @@ public: }; + struct Less_xyz_3 : public BaseClass::Less_xyz_3 { typedef typename Kernel_::Point_3 Point_3;