diff --git a/AABB_tree/include/CGAL/AABB_traits.h b/AABB_tree/include/CGAL/AABB_traits.h index 0ac9791869f..4a2189c9abb 100644 --- a/AABB_tree/include/CGAL/AABB_traits.h +++ b/AABB_tree/include/CGAL/AABB_traits.h @@ -53,10 +53,10 @@ template struct AABB_traits_base{ typename Primitive::Shared_data m_primitive_data; - #ifndef CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES + #if !defined(CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES) && !defined(CGAL_CFG_NO_CPP0X_RVALUE_REFERENCE) template - void set_shared_data(T ... t){ - m_primitive_data=Primitive::construct_shared_data(t...); + void set_shared_data(T&& ... t){ + m_primitive_data=Primitive::construct_shared_data(std::forward(t)...); } #else void set_shared_data(){ @@ -64,22 +64,27 @@ struct AABB_traits_base{ } template - void set_shared_data(T1 t1){ + void set_shared_data(T1& t1){ m_primitive_data=Primitive::construct_shared_data(t1); } + template + void set_shared_data(T1& t1, T2& t2){ + m_primitive_data=Primitive::construct_shared_data(t1,t2); + } + template - void set_shared_data(T1 t1,T2 t2,T3 t3){ + void set_shared_data(T1& t1,T2& t2,T3& t3){ m_primitive_data=Primitive::construct_shared_data(t1,t2,t3); } template - void set_shared_data(T1 t1,T2 t2,T3 t3,T4 t4){ + void set_shared_data(T1& t1,T2& t2,T3& t3,T4& t4){ m_primitive_data=Primitive::construct_shared_data(t1,t2,t3,t4); } template - void set_shared_data(T1 t1,T2 t2,T3 t3,T4 t4,T5 t5){ + void set_shared_data(T1& t1,T2& t2,T3& t3,T4& t4,T5& t5){ m_primitive_data=Primitive::construct_shared_data(t1,t2,t3,t4,t5); } #endif diff --git a/AABB_tree/include/CGAL/AABB_tree.h b/AABB_tree/include/CGAL/AABB_tree.h index 9c2d43fadae..9e1cba315e6 100644 --- a/AABB_tree/include/CGAL/AABB_tree.h +++ b/AABB_tree/include/CGAL/AABB_tree.h @@ -124,22 +124,22 @@ namespace CGAL { * 5 template arguments are provided. * The tree stays empty if the memory allocation is not successful. */ - #ifndef CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES + #if !defined(CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES) && !defined(CGAL_CFG_NO_CPP0X_RVALUE_REFERENCE) template - AABB_tree(InputIterator first, InputIterator beyond,T...); + AABB_tree(InputIterator first, InputIterator beyond,T&& ...); #else template AABB_tree(InputIterator first, InputIterator beyond); template - AABB_tree(InputIterator first, InputIterator beyond,T1); + AABB_tree(InputIterator first, InputIterator beyond, T1&); template - AABB_tree(InputIterator first, InputIterator beyond,T1,T2); + AABB_tree(InputIterator first, InputIterator beyond,T1&,T2&); template - AABB_tree(InputIterator first, InputIterator beyond,T1,T2,T3); + AABB_tree(InputIterator first, InputIterator beyond,T1&,T2&,T3&); template - AABB_tree(InputIterator first, InputIterator beyond,T1,T2,T3,T4); + AABB_tree(InputIterator first, InputIterator beyond,T1&,T2&,T3&,T4&); template - AABB_tree(InputIterator first, InputIterator beyond,T1,T2,T3,T4,T5); + AABB_tree(InputIterator first, InputIterator beyond,T1&,T2&,T3&,T4&,T5&); #endif ///@} @@ -150,22 +150,22 @@ namespace CGAL { /// Equivalent to calling `clear()` and then `insert(first,last,t...)`. /// For compilers that do not support variadic templates, overloads up /// to 5 template arguments are provided. - #ifndef CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES + #if !defined(CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES) && !defined(CGAL_CFG_NO_CPP0X_RVALUE_REFERENCE) template - void rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond,T...); + void rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond,T&& ...); #else template void rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond); template - void rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond,T1); + void rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, T1&); template - void rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond,T1,T2); + void rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond,T1&,T2&); template - void rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond,T1,T2,T3); + void rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond,T1&,T2&,T3&); template - void rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond,T1,T2,T3,T4); + void rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond,T1&,T2&,T3&,T4&); template - void rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond,T1,T2,T3,T4,T5); + void rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond,T1&,T2&,T3&,T4&,T5&); #endif @@ -177,22 +177,22 @@ namespace CGAL { /// is made using the internally stored traits. /// For compilers that do not support variadic templates, /// overloads up to 5 template arguments are provided. - #ifndef CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES + #if !defined(CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES) && !defined(CGAL_CFG_NO_CPP0X_RVALUE_REFERENCE) template - void insert(InputIterator first, InputIterator beyond,T...); + void insert(InputIterator first, InputIterator beyond,T&& ...); #else template void insert(InputIterator first, InputIterator beyond); template - void insert(InputIterator first, InputIterator beyond,T1); + void insert(InputIterator first, InputIterator beyond,T1&); template - void insert(InputIterator first, InputIterator beyond,T1,T2); + void insert(InputIterator first, InputIterator beyond,T1&, T2&); template - void insert(InputIterator first, InputIterator beyond,T1,T2,T3); + void insert(InputIterator first, InputIterator beyond,T1&,T2&,T3&); template - void insert(InputIterator first, InputIterator beyond,T1,T2,T3,T4); + void insert(InputIterator first, InputIterator beyond,T1&,T2&,T3&,T4&); template - void insert(InputIterator first, InputIterator beyond,T1,T2,T3,T4,T5); + void insert(InputIterator first, InputIterator beyond,T1&,T2&,T3&,T4&,T5&); #endif /// Adds a primitive to the set of primitives of the tree. @@ -251,16 +251,16 @@ namespace CGAL { ///@} private: - #ifndef CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES + #if !defined(CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES) && !defined(CGAL_CFG_NO_CPP0X_RVALUE_REFERENCE) template void set_primitive_data_impl(CGAL::Boolean_tag,T ... ){} template - void set_primitive_data_impl(CGAL::Boolean_tag,T ... t) - {m_traits.set_shared_data(t...);} + void set_primitive_data_impl(CGAL::Boolean_tag,T&& ... t) + {m_traits.set_shared_data(std::forward(t)...);} template - void set_shared_data(T...t){ - set_primitive_data_impl(CGAL::Boolean_tag::value>(),t...); + void set_shared_data(T&& ...t){ + set_primitive_data_impl(CGAL::Boolean_tag::value>(),std::forward(t)...); } #else void set_primitive_data_impl(CGAL::Boolean_tag){} @@ -273,50 +273,50 @@ private: template void set_primitive_data_impl(CGAL::Boolean_tag,T1){} template - void set_primitive_data_impl(CGAL::Boolean_tag,T1 t1) + void set_primitive_data_impl(CGAL::Boolean_tag,T1& t1) {m_traits.set_shared_data(t1);} template - void set_shared_data(T1 t1){ + void set_shared_data(T1& t1){ set_primitive_data_impl(Boolean_tag::value>(),t1); } template void set_primitive_data_impl(CGAL::Boolean_tag,T1,T2){} template - void set_primitive_data_impl(CGAL::Boolean_tag,T1 t1,T2 t2) + void set_primitive_data_impl(CGAL::Boolean_tag,T1& t1,T2& t2) {m_traits.set_shared_data(t1,t2);} template - void set_shared_data(T1 t1,T2 t2){ + void set_shared_data(const T1& t1,const T2& t2){ set_primitive_data_impl(Boolean_tag::value>(),t1,t2); } template void set_primitive_data_impl(CGAL::Boolean_tag,T1,T2,T3){} template - void set_primitive_data_impl(CGAL::Boolean_tag,T1 t1,T2 t2,T3 t3) + void set_primitive_data_impl(CGAL::Boolean_tag,T1& t1,T2& t2,T3& t3) {m_traits.set_shared_data(t1,t2,t3);} template - void set_shared_data(T1 t1,T2 t2,T3 t3){ + void set_shared_data(T1& t1,T2& t2,T3& t3){ set_primitive_data_impl(Boolean_tag::value>(),t1,t2,t3); } template void set_primitive_data_impl(CGAL::Boolean_tag,T1,T2,T3,T4){} template - void set_primitive_data_impl(CGAL::Boolean_tag,T1 t1,T2 t2,T3 t3,T4 t4) + void set_primitive_data_impl(CGAL::Boolean_tag,T1& t1,T2& t2,T3& t3,T4& t4) {m_traits.set_shared_data(t1,t2,t3,t4);} template - void set_shared_data(T1 t1,T2 t2,T3 t3,T4 t4){ + void set_shared_data(T1& t1,T2& t2,T3& t3,T4& t4){ set_primitive_data_impl(Boolean_tag::value>(),t1,t2,t3,t4); } template void set_primitive_data_impl(CGAL::Boolean_tag,T1,T2,T3,T4,T5){} template - void set_primitive_data_impl(CGAL::Boolean_tag,T1 t1,T2 t2,T3 t3,T4 t4,T5 t5) + void set_primitive_data_impl(CGAL::Boolean_tag,T1& t1,T2& t2,T3& t3,T4& t4,T5& t5) {m_traits.set_shared_data(t1,t2,t3,t4,t5);} template - void set_shared_data(T1 t1,T2 t2,T3 t3,T4 t4,T5 t5){ + void set_shared_data(T1& t1,T2& t2,T3& t3,T4& t4,T5& t5){ set_primitive_data_impl(Boolean_tag::value>(),t1,t2,t3,t4,t5); } #endif @@ -648,12 +648,12 @@ public: , m_need_build(false) {} - #ifndef CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES + #if !defined(CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES) && !defined(CGAL_CFG_NO_CPP0X_RVALUE_REFERENCE) template template AABB_tree::AABB_tree(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T ... t) + T&& ... t) : m_traits() , m_primitives() , m_p_root_node(NULL) @@ -663,19 +663,19 @@ public: , m_need_build(false) { // Insert each primitive into tree - insert(first, beyond,t...); + insert(first, beyond,std::forward(t)...); } template template void AABB_tree::insert(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T ... t) + T&& ... t) { - set_shared_data(t...); + set_shared_data(std::forward(t)...); while(first != beyond) { - m_primitives.push_back(Primitive(first,t...)); + m_primitives.push_back(Primitive(first,std::forward(t)...)); ++first; } m_need_build = true; @@ -686,13 +686,13 @@ public: template void AABB_tree::rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T ... t) + T&& ... t) { // cleanup current tree and internal KD tree clear(); // inserts primitives - insert(first, beyond,t...); + insert(first, beyond,std::forward(t)...); build(); } @@ -718,7 +718,7 @@ public: template AABB_tree::AABB_tree(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T1 t1) + T1& t1) : m_traits() , m_primitives() , m_p_root_node(NULL) @@ -735,7 +735,7 @@ public: template AABB_tree::AABB_tree(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T1 t1,T2 t2) + T1& t1,T2& t2) : m_traits() , m_primitives() , m_p_root_node(NULL) @@ -752,7 +752,7 @@ public: template AABB_tree::AABB_tree(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T1 t1,T2 t2,T3 t3) + T1& t1,T2& t2,T3& t3) : m_traits() , m_primitives() , m_p_root_node(NULL) @@ -769,7 +769,7 @@ public: template AABB_tree::AABB_tree(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T1 t1,T2 t2,T3 t3,T4 t4) + T1& t1,T2& t2,T3& t3,T4& t4) : m_traits() , m_primitives() , m_p_root_node(NULL) @@ -786,7 +786,7 @@ public: template AABB_tree::AABB_tree(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T1 t1,T2 t2,T3 t3,T4 t4,T5 t5) + T1& t1,T2& t2,T3& t3,T4& t4,T5& t5) : m_traits() , m_primitives() , m_p_root_node(NULL) @@ -817,7 +817,7 @@ public: template void AABB_tree::insert(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T1 t1) + T1& t1) { set_shared_data(t1); while(first != beyond) @@ -832,7 +832,7 @@ public: template void AABB_tree::insert(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T1 t1,T2 t2) + T1& t1, T2& t2) { set_shared_data(t1,t2); while(first != beyond) @@ -847,7 +847,7 @@ public: template void AABB_tree::insert(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T1 t1,T2 t2,T3 t3) + T1& t1,T2& t2,T3& t3) { set_shared_data(t1,t2,t3); while(first != beyond) @@ -862,7 +862,7 @@ public: template void AABB_tree::insert(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T1 t1,T2 t2,T3 t3,T4 t4) + T1& t1,T2& t2,T3& t3,T4& t4) { set_shared_data(t1,t2,t3,t4); while(first != beyond) @@ -877,7 +877,7 @@ public: template void AABB_tree::insert(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T1 t1,T2 t2,T3 t3,T4 t4,T5 t5) + T1& t1,T2& t2,T3& t3,T4& t4,T5& t5) { set_shared_data(t1,t2,t3,t4,t5); while(first != beyond) @@ -888,7 +888,7 @@ public: m_need_build = true; } - //=============insert====================== + //=============rebuild====================== template template void AABB_tree::rebuild(ConstPrimitiveIterator first, @@ -907,7 +907,7 @@ public: template void AABB_tree::rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T1 t1) + T1& t1) { // cleanup current tree and internal KD tree clear(); @@ -922,7 +922,7 @@ public: template void AABB_tree::rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T1 t1,T2 t2) + T1& t1, T2& t2) { // cleanup current tree and internal KD tree clear(); @@ -937,7 +937,7 @@ public: template void AABB_tree::rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T1 t1,T2 t2,T3 t3) + T1& t1,T2& t2,T3& t3) { // cleanup current tree and internal KD tree clear(); @@ -952,7 +952,7 @@ public: template void AABB_tree::rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T1 t1,T2 t2,T3 t3,T4 t4) + T1& t1,T2& t2,T3& t3,T4& t4) { // cleanup current tree and internal KD tree clear(); @@ -967,7 +967,7 @@ public: template void AABB_tree::rebuild(ConstPrimitiveIterator first, ConstPrimitiveIterator beyond, - T1 t1,T2 t2,T3 t3,T4 t4,T5 t5) + T1& t1,T2& t2,T3& t3,T4& t4,T5& t5) { // cleanup current tree and internal KD tree clear();