From 3f8448f280a4e19b0f9d31cdd97f8559d158dca2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 8 Aug 2017 12:12:29 +0200 Subject: [PATCH] avoid infinite loop in 3D and dD --- .../include/CGAL/Hilbert_sort_middle_3.h | 24 ++++++++++++------- .../include/CGAL/Hilbert_sort_middle_d.h | 12 ++++++---- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/Spatial_sorting/include/CGAL/Hilbert_sort_middle_3.h b/Spatial_sorting/include/CGAL/Hilbert_sort_middle_3.h index 01a5747b7f7..1d61a6890d1 100644 --- a/Spatial_sorting/include/CGAL/Hilbert_sort_middle_3.h +++ b/Spatial_sorting/include/CGAL/Hilbert_sort_middle_3.h @@ -141,14 +141,22 @@ public: internal::fixed_hilbert_split (m6, m8, Cmp< z, !upz> (zmed,_k)); - sort (m0, m1, zmin, xmin, ymin, zmed, xmed, ymed); - sort (m1, m2, ymin, zmed, xmin, ymed, zmax, xmed); - sort (m2, m3, ymed, zmed, xmin, ymax, zmax, xmed); - sort (m3, m4, xmin, ymax, zmed, xmed, ymed, zmin); - sort (m4, m5, xmed, ymax, zmed, xmax, ymed, zmin); - sort (m5, m6, ymax, zmed, xmax, ymed, zmax, xmed); - sort (m6, m7, ymed, zmed, xmax, ymin, zmax, xmed); - sort (m7, m8, zmed, xmax, ymin, zmin, xmed, ymed); + if (m1!=m8) + sort (m0, m1, zmin, xmin, ymin, zmed, xmed, ymed); + if (m1!=m0 || m2!=m8) + sort (m1, m2, ymin, zmed, xmin, ymed, zmax, xmed); + if (m2!=m0 || m3!=m8) + sort (m2, m3, ymed, zmed, xmin, ymax, zmax, xmed); + if (m3!=m0 || m4!=m8) + sort (m3, m4, xmin, ymax, zmed, xmed, ymed, zmin); + if (m4!=m0 || m5!=m8) + sort (m4, m5, xmed, ymax, zmed, xmax, ymed, zmin); + if (m5!=m0 || m6!=m8) + sort (m5, m6, ymax, zmed, xmax, ymed, zmax, xmed); + if (m6!=m0 || m7!=m8) + sort (m6, m7, ymed, zmed, xmax, ymin, zmax, xmed); + if (m7!=m0) + sort (m7, m8, zmed, xmax, ymin, zmin, xmed, ymed); } template diff --git a/Spatial_sorting/include/CGAL/Hilbert_sort_middle_d.h b/Spatial_sorting/include/CGAL/Hilbert_sort_middle_d.h index 4cd7b61e074..9f6dce7efe1 100644 --- a/Spatial_sorting/include/CGAL/Hilbert_sort_middle_d.h +++ b/Spatial_sorting/include/CGAL/Hilbert_sort_middle_d.h @@ -117,19 +117,22 @@ public: /////////////start recursive calls last_dir = (direction + _dimension -1) % _dimension; // first step is special - sort( places[0], places[1], start, last_dir,cmin,cmax); + if (places[1]!=end) + sort( places[0], places[1], start, last_dir,cmin,cmax); cmin[last_dir] = med[last_dir]; cmax[last_dir] = maxi[last_dir]; for(int i=1; i