diff --git a/Filtered_kernel/include/CGAL/Lazy_kernel.h b/Filtered_kernel/include/CGAL/Lazy_kernel.h index 0e9bb380f6a..b8e5c3562ca 100644 --- a/Filtered_kernel/include/CGAL/Lazy_kernel.h +++ b/Filtered_kernel/include/CGAL/Lazy_kernel.h @@ -336,11 +336,33 @@ 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& obj = *p.ptr(); + const char* tn = typeid(obj).name(); + + if(tn == typeid(LR).name()){ + LR * lr = static_cast(p.ptr()); + if(lr->is_lazy()){ + return std::get<2>(lr->l); + } + }else{ + if(tn == 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 +388,33 @@ 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& obj = *p.ptr(); + const char* tn = typeid(obj).name(); + + if(tn == typeid(LR).name()){ + LR * lr = static_cast(p.ptr()); + if(lr->is_lazy()){ + return std::get<2>(lr->l); + } + }else{ + if(tn == 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); } @@ -413,13 +457,20 @@ public: int > LRint; - LR * lr = dynamic_cast(p.ptr()); - if(lr && (! lr->et)){ - return std::get<1>(lr->l); - } else { - LRint* lrint = dynamic_cast(p.ptr()); - if(lrint && (! lrint->et)){ - return std::get<1>(lrint->l); + auto& obj = *p.ptr(); + const char* tn = typeid(obj).name(); + + if(tn == typeid(LR).name()){ + LR * lr = static_cast(p.ptr()); + if(lr->is_lazy()){ + return std::get<1>(lr->l); + } + }else{ + if(tn == typeid(LRint).name()){ + LRint* lrint = static_cast(p.ptr()); + if(lrint->is_lazy()){ + return std::get<1>(lrint->l); + } } } @@ -465,21 +516,29 @@ public: int > LRint; + auto& obj = *p.ptr(); + const char* tn = typeid(obj).name(); - LR * lr = dynamic_cast(p.ptr()); - if(lr && (! lr->et)){ - return std::get<1>(lr->l); + if(tn == typeid(LR).name()){ + LR * lr = static_cast(p.ptr()); + if(lr->is_lazy()){ + return std::get<1>(lr->l); + } }else{ - LRint* lrint = dynamic_cast(p.ptr()); - if(lrint && (! lrint->et)){ - return std::get<1>(lrint->l); + if(tn == typeid(LRint).name()){ + LRint* lrint = static_cast(p.ptr()); + if(lrint->is_lazy()){ + return std::get<1>(lrint->l); + } } } + return BaseClass().construct_point_3_object()(p); } }; + struct Less_xyz_3 : public BaseClass::Less_xyz_3 { typedef typename Kernel_::Point_3 Point_3;