From dcfe23867b11b050e0b62f04ea82a78d292e8a49 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Fri, 13 Apr 2012 13:01:32 +0000 Subject: [PATCH 01/47] Add some \ccHtmlNoLinksFrom --- .../doc_tex/Triangulation_2/triangulation_user.tex | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Triangulation_2/doc_tex/Triangulation_2/triangulation_user.tex b/Triangulation_2/doc_tex/Triangulation_2/triangulation_user.tex index 18368831f49..e9fbf24047d 100644 --- a/Triangulation_2/doc_tex/Triangulation_2/triangulation_user.tex +++ b/Triangulation_2/doc_tex/Triangulation_2/triangulation_user.tex @@ -788,11 +788,11 @@ The class \ccc{Regular_triangulation_2} is designed to maintain the regular triangulation of a set of $2d$ weighted points. It derives from the class \ccc{Triangulation_2}. -The functions \ccc{insert} and +The functions \ccHtmlNoLinksFrom{\ccc{insert}} and \ccc{remove} are overwritten to handle weighted points and maintain the regular property. -In current version, function \ccc{move} is not +The function \ccHtmlNoLinksFrom{\ccc{move}} is not overwritten and thus does not preserve the regular property. The vertices of the regular triangulation of a set of weighted points ${PW}$ correspond only to a subset @@ -968,7 +968,7 @@ overrides the insertion and removal of a point to take care of the information about constrained edges. The class also allows inline insertion of a new constraint, given by its two endpoints or the removal of a constraint. -In current version, function \ccc{move} is not +In current version, function \ccHtmlNoLinksFrom{\ccc{move}} is not overwritten and thus does not take care of the constraints. \subsubsection{The Geometric Traits} @@ -1221,7 +1221,7 @@ classes. The class \ccc{Triangulation_hierarchy_2} inherits from the triangulation type passed as template parameter \ccc{Tr}. -The \ccc{insert}, \ccc{move}, and \ccc{remove} member functions +The \ccHtmlNoLinksFrom{\ccc{insert}}, \ccHtmlNoLinksFrom{\ccc{move}}, and \ccc{remove} member functions are overwritten to update the data structure at each operation. The locate queries are also overwritten to take advantage of the data structure for a fast processing. @@ -1382,7 +1382,7 @@ of the corresponding point given in the range. \subsubsection{Using an Iterator Over Pairs} Each point and its information are gathered into a pair. We provide -the \ccc{insert} function of the triangulation with a range of such pairs. +the \ccHtmlNoLinksFrom{\ccc{insert}} function of the triangulation with a range of such pairs. \ccIncludeExampleCode{Triangulation_2/info_insert_with_pair_iterator_2.cpp} From 9d041ed59ae9e34479168d6543a0686e39fe4494 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 16 Apr 2012 12:48:50 +0000 Subject: [PATCH 02/47] Better testing of CGAL::is_streamable --- STL_Extension/test/STL_Extension/test_is_streamable.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/STL_Extension/test/STL_Extension/test_is_streamable.cpp b/STL_Extension/test/STL_Extension/test_is_streamable.cpp index 8e18e004489..2a8ebfcbecc 100644 --- a/STL_Extension/test/STL_Extension/test_is_streamable.cpp +++ b/STL_Extension/test/STL_Extension/test_is_streamable.cpp @@ -5,6 +5,8 @@ struct A {}; struct B {}; +struct C {}; +struct D {}; using std::ostream; using std::istream; @@ -12,6 +14,9 @@ using std::istream; ostream& operator<<(ostream& os, const B&) { return os; } istream& operator>>(istream& is, const B&) { return is; } +ostream& operator<<(ostream& os, const C&) { return os; } +istream& operator>>(istream& is, const D&) { return is; } + int main() { typedef std::vector::const_iterator vector_it; typedef int* int_p; @@ -19,6 +24,8 @@ int main() { CGAL_static_assertion(!is_streamable::value); CGAL_static_assertion(is_streamable::value); + CGAL_static_assertion(!is_streamable::value); + CGAL_static_assertion(!is_streamable::value); CGAL_static_assertion(is_streamable::value); CGAL_static_assertion(is_streamable::value); CGAL_static_assertion(! (is_streamable >::value) ); From b3822e9b85d809386d3fbe6e8dca045ad34a96be Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 16 Apr 2012 13:49:19 +0000 Subject: [PATCH 03/47] Extend the test, again That time, one checks that boost::tuple has I/O operators. --- STL_Extension/test/STL_Extension/test_is_streamable.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/STL_Extension/test/STL_Extension/test_is_streamable.cpp b/STL_Extension/test/STL_Extension/test_is_streamable.cpp index 2a8ebfcbecc..c969eb94cbe 100644 --- a/STL_Extension/test/STL_Extension/test_is_streamable.cpp +++ b/STL_Extension/test/STL_Extension/test_is_streamable.cpp @@ -2,6 +2,8 @@ #include #include #include // std::pair +#include +#include struct A {}; struct B {}; @@ -29,4 +31,5 @@ int main() { CGAL_static_assertion(is_streamable::value); CGAL_static_assertion(is_streamable::value); CGAL_static_assertion(! (is_streamable >::value) ); + CGAL_static_assertion( (is_streamable >::value) ); } From 5e15466696d36df6cdf4eef4f9c08fb657c6f31c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20M=C3=B6ller?= Date: Mon, 16 Apr 2012 14:36:03 +0000 Subject: [PATCH 04/47] BUGFIX: Memory leak in Parameterization_mesh_feature_extractor Parameterization_mesh_feature_extractor wasn't cleaning up the BorderS it allocated. --- .../include/CGAL/Parameterization_mesh_feature_extractor.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Surface_mesh_parameterization/include/CGAL/Parameterization_mesh_feature_extractor.h b/Surface_mesh_parameterization/include/CGAL/Parameterization_mesh_feature_extractor.h index 6942c73b5f5..b0c240174c0 100644 --- a/Surface_mesh_parameterization/include/CGAL/Parameterization_mesh_feature_extractor.h +++ b/Surface_mesh_parameterization/include/CGAL/Parameterization_mesh_feature_extractor.h @@ -98,7 +98,12 @@ public: m_nb_borders = -1; m_genus = -1; } - virtual ~Parameterization_mesh_feature_extractor() {} + + virtual ~Parameterization_mesh_feature_extractor() { + for (typename Skeleton::iterator iter = m_skeleton.begin(); + iter != m_skeleton.end(); ++iter) + delete *iter; + } /// Get number of borders. int get_nb_borders() From 5eb0734d02a91cf5e68ed7931146b881624492b9 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 16 Apr 2012 15:24:14 +0000 Subject: [PATCH 05/47] Remove a warning: var set but not used --- .../include/CGAL/Parameterization_polyhedron_adaptor_3.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Surface_mesh_parameterization/include/CGAL/Parameterization_polyhedron_adaptor_3.h b/Surface_mesh_parameterization/include/CGAL/Parameterization_polyhedron_adaptor_3.h index caa07bfbbb6..20ece77181c 100644 --- a/Surface_mesh_parameterization/include/CGAL/Parameterization_polyhedron_adaptor_3.h +++ b/Surface_mesh_parameterization/include/CGAL/Parameterization_polyhedron_adaptor_3.h @@ -441,7 +441,7 @@ public: int index = 0; for (Vertex_iterator it=mesh_vertices_begin(); it!=mesh_vertices_end(); it++) { - Point_3 position = get_vertex_position(it); + // Point_3 position = get_vertex_position(it); /*#ifdef DEBUG_TRACE fprintf(stderr, " %d=(%f,%f,%f)\n", index, From 0c5b3fcf8586cf6ebb9edf4f3dcb33010d3e3cac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20M=C3=B6ller?= Date: Mon, 16 Apr 2012 16:21:21 +0000 Subject: [PATCH 06/47] WARNINGFIX: Nef_2 is no longer triggering a "suggest parenthesis" --- Nef_2/include/CGAL/Nef_2/PM_checker.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Nef_2/include/CGAL/Nef_2/PM_checker.h b/Nef_2/include/CGAL/Nef_2/PM_checker.h index a22caee7723..339baf0d0ad 100644 --- a/Nef_2/include/CGAL/Nef_2/PM_checker.h +++ b/Nef_2/include/CGAL/Nef_2/PM_checker.h @@ -174,9 +174,9 @@ check_forward_prefix_condition(Vertex_const_handle v) const error_status << " el_forward = " << el_forward; error_status << " is_left_turn = " << is_left_turn; CGAL_assertion_msg( (ef == el || - ef_forward && !el_forward || - ef_forward && el_forward && is_left_turn || - !ef_forward && !el_forward && is_left_turn) , + (ef_forward && !el_forward) || + (ef_forward && el_forward && is_left_turn) || + (!ef_forward && !el_forward && is_left_turn)) , error_status.str().c_str()); } From 3889dc2d7f26dae06cae6462db51cc01affca53e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20M=C3=B6ller?= Date: Tue, 17 Apr 2012 12:03:00 +0000 Subject: [PATCH 07/47] BUGFIX Fixed the leak of an empty memory block. --- .../include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Arrangement_on_surface_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h b/Arrangement_on_surface_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h index f34e7549469..76b9601f05d 100644 --- a/Arrangement_on_surface_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h +++ b/Arrangement_on_surface_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h @@ -218,9 +218,12 @@ void Basic_sweep_line_2::_init_structures() { CGAL_assertion(m_queue->empty()); CGAL_assertion((m_statusLine.size() == 0)); - - // Allocate all of the Subcurve objects as one block. - m_subCurves = m_subCurveAlloc.allocate(m_num_of_subCurves); + + // Allocate all of the Subcurve objects as one block. Don't allocate + // anything when there are no subcurves. + if (m_num_of_subCurves > 0) { + m_subCurves = m_subCurveAlloc.allocate(m_num_of_subCurves); + } return; } From cdf47795ba551093b1d3d03525dffe21d9eb682c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20M=C3=B6ller?= Date: Tue, 17 Apr 2012 12:17:23 +0000 Subject: [PATCH 08/47] Fixed a small memory leak in one of the testcases. --- .../test/Triangulation_2/include/CGAL/_test_cls_hierarchy_2.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_hierarchy_2.h b/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_hierarchy_2.h index fdc73205eb5..7fc3279c2cb 100644 --- a/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_hierarchy_2.h +++ b/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_hierarchy_2.h @@ -135,6 +135,8 @@ _test_cls_hierarchy_2() h.remove_constraint(v[3],v[4]); // h.print(); + for(int i=0; i <10; i++) { delete v[i];} + return; } From 03ac39132a6c46207000064ae18c7f312a9096ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 17 Apr 2012 17:37:53 +0000 Subject: [PATCH 10/47] remove unused var warning --- Nef_3/include/CGAL/Nef_3/ID_support_handler.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Nef_3/include/CGAL/Nef_3/ID_support_handler.h b/Nef_3/include/CGAL/Nef_3/ID_support_handler.h index 46116622d73..975f2fb3889 100644 --- a/Nef_3/include/CGAL/Nef_3/ID_support_handler.h +++ b/Nef_3/include/CGAL/Nef_3/ID_support_handler.h @@ -45,7 +45,7 @@ class ID_support_handler { ID_support_handler() {} int get_hash(int) { return 0; } - template void initialize_hash(Handle h) {} + template void initialize_hash(Handle /*h*/) {} void initialize_hash(int i) {} void handle_support(SVertex_handle , SHalfedge_const_handle , From 24070082f6979de962353a136626e4326365bcf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 17 Apr 2012 18:18:09 +0000 Subject: [PATCH 11/47] *deprecate the use of geninfo *naive replacement of void* and geninfo by boost::any. *old code can be used if CGAL_I_DO_WANT_TO_USE_GENINFO is defined *info was printed, I simply ignored that for boost::any (it probably made sense why the old implementation of geninfo that was using placement new to write inside the void*) *some sizeof(void*) was used in SNC_structure.h for printing the size of something. I guessed this was related to the void* used as info. I left that code untouched. *testsuite is OK on my machine except Nef_3/example/Nef_3/polygon_construction which also does not work with next on my machine --- Nef_2/include/CGAL/Nef_2/HDS_items.h | 45 +++++- Nef_2/include/CGAL/Nef_2/PM_const_decorator.h | 15 +- Nef_2/include/CGAL/Nef_2/PM_decorator.h | 4 + Nef_2/include/CGAL/Nef_2/PM_overlayer.h | 110 +++++++++++++-- Nef_2/include/CGAL/Nef_2/PM_point_locator.h | 65 ++++++++- Nef_2/include/CGAL/Nef_2/gen_point_location.h | 48 ++++++- Nef_2/include/CGAL/Nef_2/geninfo.h | 5 + Nef_3/include/CGAL/Nef_3/Halfedge.h | 14 +- Nef_3/include/CGAL/Nef_3/SFace.h | 8 ++ Nef_3/include/CGAL/Nef_3/SHalfedge.h | 14 +- Nef_3/include/CGAL/Nef_3/SNC_FM_decorator.h | 29 +++- Nef_3/include/CGAL/Nef_3/SNC_SM_overlayer.h | 4 + .../include/CGAL/Nef_3/SNC_const_decorator.h | 8 ++ Nef_3/include/CGAL/Nef_3/SNC_decorator.h | 8 ++ Nef_3/include/CGAL/Nef_3/SNC_io_parser.h | 8 ++ Nef_3/include/CGAL/Nef_3/SNC_ray_shooter.h | 8 ++ Nef_3/include/CGAL/Nef_3/SNC_structure.h | 6 +- Nef_3/include/CGAL/Nef_3/Vertex.h | 8 ++ .../include/CGAL/Nef_S2/SM_const_decorator.h | 8 ++ Nef_S2/include/CGAL/Nef_S2/SM_decorator.h | 7 + Nef_S2/include/CGAL/Nef_S2/SM_items.h | 45 +++++- Nef_S2/include/CGAL/Nef_S2/SM_overlayer.h | 131 +++++++++++++++--- Nef_S2/include/CGAL/Nef_S2/SM_point_locator.h | 4 + Nef_S2/include/CGAL/Nef_S2/SM_triangulator.h | 69 +++++++-- 24 files changed, 600 insertions(+), 71 deletions(-) diff --git a/Nef_2/include/CGAL/Nef_2/HDS_items.h b/Nef_2/include/CGAL/Nef_2/HDS_items.h index 213e191b90c..ac11eea2930 100644 --- a/Nef_2/include/CGAL/Nef_2/HDS_items.h +++ b/Nef_2/include/CGAL/Nef_2/HDS_items.h @@ -26,6 +26,9 @@ #include #include #include +#ifndef CGAL_I_DO_WANT_TO_USE_GENINFO +#include +#endif namespace CGAL { @@ -61,7 +64,11 @@ public: typedef typename Refs::Face_const_handle Face_const_handle; typedef typename Refs::Halfedge Halfedge; typedef typename Refs::Face Face; - typedef void* GenPtr; + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + typedef void* GenPtr; + #else + typedef boost::any GenPtr; + #endif typedef typename Traits::Point Point; // geometric embedding typedef typename Traits::Mark Mark; // information @@ -76,12 +83,20 @@ private: GenPtr _i; public: - Nef_vertex_2() : _h(),_f(),_ivit(),_m(0),_i((GenPtr)0xABCD) {} + Nef_vertex_2() : _h(),_f(),_ivit(),_m(0) + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + ,_i((GenPtr)0xABCD) + #endif + {} // constructs an uninitialized vertex concerning embedding // and mark. All links are initialized by their default value. Nef_vertex_2( const Point& p) : - _h(),_f(),_p(p),_ivit(),_m(0),_i((GenPtr)0xABCD) {} + _h(),_f(),_p(p),_ivit(),_m(0) + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + ,_i((GenPtr)0xABCD) + #endif + {} // constructs a vertex with embedding |p| and mark |m|. // All links are initialized by their default value. @@ -138,7 +153,11 @@ public: typedef typename Refs::Face_const_handle Face_const_handle; typedef typename Refs::Vertex Vertex; typedef typename Refs::Face Face; - typedef void* GenPtr; + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + typedef void* GenPtr; + #else + typedef boost::any GenPtr; + #endif typedef typename std::list::iterator fc_iterator; @@ -154,7 +173,11 @@ protected: public: Nef_halfedge_2() : - opp(),prv(),nxt(),_v(),_f(),_fcit(),_m(0),_i((GenPtr)0xABCD) {} + opp(),prv(),nxt(),_v(),_f(),_fcit(),_m(0) + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + ,_i((GenPtr)0xABCD) + #endif + {} /*{\Mcreate constructs an uninitialized halfedge concerning embedding and mark. All links are initialized by their default value.}*/ @@ -227,7 +250,11 @@ public: typedef typename Refs::Face_const_handle Face_const_handle; typedef typename Refs::Vertex Vertex; typedef typename Refs::Halfedge Halfedge; - typedef void* GenPtr; + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + typedef void* GenPtr; + #else + typedef boost::any GenPtr; + #endif typedef typename Traits::Mark Mark; // mark information @@ -300,7 +327,11 @@ private: GenPtr _i; public: - Nef_face_2() : _e(),_m(0),_i((GenPtr)0xABCD) {} + Nef_face_2() : _e(),_m(0) + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + ,_i((GenPtr)0xABCD) + #endif + {} /*{\Mcreate constructs an uninitialized face with undefined mark, empty face cycle list, and empty isolated vertices list.}*/ diff --git a/Nef_2/include/CGAL/Nef_2/PM_const_decorator.h b/Nef_2/include/CGAL/Nef_2/PM_const_decorator.h index e0f6245e4d8..946f3313e3e 100644 --- a/Nef_2/include/CGAL/Nef_2/PM_const_decorator.h +++ b/Nef_2/include/CGAL/Nef_2/PM_const_decorator.h @@ -32,6 +32,10 @@ #define CGAL_NEF_DEBUG 7 #include +#ifndef CGAL_I_DO_WANT_TO_USE_GENINFO +#include +#endif + namespace CGAL { template @@ -132,8 +136,13 @@ typedef typename Traits::Mark Mark; /*{\Mtypemember All objects (vertices, edges, faces) are attributed by a |Mark| object.}*/ typedef size_t Size_type; +#ifdef CGAL_I_DO_WANT_TO_USE_GENINFO /*{\Mtypemember The size type.}*/ typedef void* GenPtr; +#else +typedef boost::any GenPtr; +#endif + typedef typename HDS::Vertex Vertex; @@ -403,7 +412,11 @@ std::string PE(HH e) { std::ostringstream os; if (e==HH()) return "nil"; os << "[" << PV(e->opposite()->vertex()) << "," - << PV(e->vertex()) << " " << e->info() << "]"; + << PV(e->vertex()) << " " + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + << e->info() + #endif + << "]"; return os.str(); } diff --git a/Nef_2/include/CGAL/Nef_2/PM_decorator.h b/Nef_2/include/CGAL/Nef_2/PM_decorator.h index d4b0df31fcb..61a791c47dd 100644 --- a/Nef_2/include/CGAL/Nef_2/PM_decorator.h +++ b/Nef_2/include/CGAL/Nef_2/PM_decorator.h @@ -21,7 +21,11 @@ #ifndef CGAL_PM_DECORATOR_H #define CGAL_PM_DECORATOR_H #include +#ifdef CGAL_I_DO_WANT_TO_USE_GENINFO #include +#else +#include +#endif #include #include diff --git a/Nef_2/include/CGAL/Nef_2/PM_overlayer.h b/Nef_2/include/CGAL/Nef_2/PM_overlayer.h index 3e5827408d7..9703b10b272 100644 --- a/Nef_2/include/CGAL/Nef_2/PM_overlayer.h +++ b/Nef_2/include/CGAL/Nef_2/PM_overlayer.h @@ -25,7 +25,11 @@ #include #include #include +#ifdef CGAL_I_DO_WANT_TO_USE_GENINFO #include +#else +#include +#endif #undef CGAL_NEF_DEBUG #define CGAL_NEF_DEBUG 13 #include @@ -49,7 +53,11 @@ struct PMO_from_segs { Vertex_handle new_vertex(const Point& p) { Vertex_handle v = G.new_vertex(p); + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO geninfo::create(G.info(v)); + #else + G.info(v)=Halfedge_handle(); + #endif return v; } @@ -78,15 +86,32 @@ struct PMO_from_segs { { D.ending_segment(v,it); } void halfedge_below(Vertex_handle v, Halfedge_handle e) const - { geninfo::access(G.info(v)) = e; } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::access(G.info(v)) = e; + #else + *boost::any_cast(&G.info(v)) = e; + #endif + } Halfedge_handle halfedge_below(Vertex_handle v) const - { return geninfo::access(G.info(v)); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + return geninfo::access(G.info(v)); + #else + return + boost::any_cast(G.info(v)); + #endif + } void clear_temporary_vertex_info() const { Vertex_handle v; for(v = G.vertices_begin(); v!= G.vertices_end(); ++v) + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO geninfo::clear(G.info(v)); + #else + G.info(v)=boost::any(); + #endif } @@ -634,13 +659,32 @@ struct vertex_info { }; void assoc_info(Vertex_handle v) const -{ geninfo::create(info(v)); } +{ + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::create(info(v)); + #else + info(v)=vertex_info(); + #endif +} void discard_info(Vertex_handle v) const -{ geninfo::clear(info(v)); } +{ + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::clear(info(v)); + #else + info(v)=boost::any(); + #endif +} vertex_info& ginfo(Vertex_handle v) const -{ return geninfo::access(info(v)); } +{ + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + return geninfo::access(info(v)); + #else + return + *boost::any_cast(&info(v)); + #endif +} Mark& mark(Vertex_handle v, int i) const { return ginfo(v).m[i]; } @@ -667,15 +711,36 @@ struct halfedge_info { }; void assoc_info(Halfedge_handle e) const -{ geninfo::create(info(e)); - geninfo::create(info(twin(e))); } +{ + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::create(info(e)); + geninfo::create(info(twin(e))); + #else + info(e)=halfedge_info(); + info(twin(e))=halfedge_info(); + #endif +} void discard_info(Halfedge_handle e) const -{ geninfo::clear(info(e)); - geninfo::clear(info(twin(e))); } +{ + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::clear(info(e)); + geninfo::clear(info(twin(e))); + #else + info(e)=boost::any(); + info(twin(e))=boost::any(); + #endif +} halfedge_info& ginfo(Halfedge_handle e) const -{ return geninfo::access(info(e)); } +{ + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + return geninfo::access(info(e)); + #else + return + *boost::any_cast(&info(e)); + #endif +} Mark& mark(Halfedge_handle e, int i) const // uedge information we store in the smaller one @@ -702,13 +767,32 @@ struct face_info { }; void assoc_info(Face_handle f) const -{ geninfo::create(info(f)); } +{ + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::create(info(f)); + #else + info(f)=face_info(); + #endif +} void discard_info(Face_handle f) const -{ geninfo::clear(info(f)); } +{ + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::clear(info(f)); + #else + info(f)=boost::any(); + #endif +} face_info& ginfo(Face_handle f) const -{ return geninfo::access(info(f)); } +{ + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + return geninfo::access(info(f)); + #else + return + *boost::any_cast(&info(f)); + #endif +} Mark& mark(Face_handle f, int i) const { return ginfo(f).m[i]; } diff --git a/Nef_2/include/CGAL/Nef_2/PM_point_locator.h b/Nef_2/include/CGAL/Nef_2/PM_point_locator.h index 2898d35fc71..e5a85a57dc8 100644 --- a/Nef_2/include/CGAL/Nef_2/PM_point_locator.h +++ b/Nef_2/include/CGAL/Nef_2/PM_point_locator.h @@ -29,7 +29,11 @@ #undef CGAL_NEF_DEBUG #define CGAL_NEF_DEBUG 17 #include +#ifdef CGAL_I_DO_WANT_TO_USE_GENINFO #include +#else +#include +#endif #ifdef CGAL_USE_LEDA #include @@ -468,27 +472,57 @@ public: void operator()(Vertex_handle vn, Vertex_const_handle vo) const { Face_const_handle f; if ( Po.is_isolated(vo) ) f = Po.face(vo); + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO geninfo::create(info(vn)); geninfo::access(info(vn)) = VF_pair(vo,f); + #else + info(vn) = VF_pair(vo,f); + #endif CGAL_NEF_TRACEN("linking to org "<::create(info(hn)); + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::create(info(hn)); geninfo::access(info(hn)) = EF_pair(ho,Po.face(ho)); + #else + info(hn) = EF_pair(ho,Po.face(ho)); + #endif CGAL_NEF_TRACEN("linking to org "<::const_access(CT.info(v)).first; } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + return geninfo::const_access(CT.info(v)).first; + #else + return + boost::any_cast(CT.info(v)).first; + #endif + } Halfedge_const_handle input_halfedge(Halfedge_const_handle e) const - { return geninfo::const_access(CT.info(e)).first; } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + return geninfo::const_access(CT.info(e)).first; + #else + return + boost::any_cast(CT.info(e)).first; + #endif + } Face_const_handle input_face(Halfedge_const_handle e) const - { return geninfo::const_access(CT.info(e)).second; } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + return geninfo::const_access(CT.info(e)).second; + #else + return + boost::any_cast(CT.info(e)).second; + #endif + } Object_handle input_object(Vertex_const_handle v) const @@ -547,10 +581,19 @@ protected: { Halfedge_handle e_from = previous(e); Face_const_handle f; if ( is_closed_at_source(e) ) // source(e) was isolated before + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO f = geninfo::access(info(source(e))).second; else - f = geninfo::access(info(e_from)).second; + f = geninfo::access(info(e_from)).second; + #else + f = + boost::any_cast(info(source(e))).second; + else + f = + boost::any_cast(info(e_from)).second; + #endif mark(e) = _DP.mark(f); + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO geninfo::create(info(e)); geninfo::create(info(twin(e))); @@ -560,6 +603,10 @@ protected: geninfo::access(info(e)).second = geninfo::access(info(twin(e))).second = f; + #else + info(e)=EF_pair(Halfedge_const_handle(),f); + info(twin(e))=EF_pair(Halfedge_const_handle(),f); + #endif CGAL_NEF_TRACEN("CT_new_edge "<:: { CGAL_NEF_TRACEN("clear_static_point_locator"); Vertex_iterator vit, vend = CT.vertices_end(); for (vit = CT.vertices_begin(); vit != vend; ++vit) { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO geninfo::clear(CT.info(vit)); + #else + CT.info(vit)=boost::any(); + #endif } Halfedge_iterator eit, eend = CT.halfedges_end(); for (eit = CT.halfedges_begin(); eit != eend; ++eit) { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO geninfo::clear(CT.info(eit)); + #else + CT.info(eit)=boost::any(); + #endif } CT.clear(); delete &(CT.plane_map()); diff --git a/Nef_2/include/CGAL/Nef_2/gen_point_location.h b/Nef_2/include/CGAL/Nef_2/gen_point_location.h index a9bbd396554..536ada6426c 100644 --- a/Nef_2/include/CGAL/Nef_2/gen_point_location.h +++ b/Nef_2/include/CGAL/Nef_2/gen_point_location.h @@ -33,7 +33,12 @@ #include #include #include +#ifdef CGAL_I_DO_WANT_TO_USE_GENINFO #include +#else +#include +#endif + #undef CGAL_NEF_DEBUG #define CGAL_NEF_DEBUG 17 @@ -56,7 +61,11 @@ class GenericLocation { point location. It can store a node or an edge of a graph or the special value |nil| which is used to signal that no node or edge could be found. }*/ - typedef void* GenPtr; + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + typedef void* GenPtr; + #else + typedef boost::any GenPtr; + #endif public: /*{\Mtypes}*/ enum Type { NIL, NODE, EDGE }; @@ -85,7 +94,12 @@ public: if (type != NODE) CGAL_LEDA_SCOPE::error_handler(1, "Location: not convertible to node"); #endif + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO return geninfo::const_access(value); + #else + return + *boost::any_cast(&value); + #endif } /*{\Mconversion converts |\Mvar| into a node.\\ \precond |\Mvar| represents a node.}*/ @@ -96,7 +110,12 @@ public: if (type != EDGE) CGAL_LEDA_SCOPE::error_handler(1, "Location: not convertible to edge"); #endif + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO return geninfo::const_access(value); + #else + return + *boost::any_cast(&value); + #endif } /*{\Mconversion converts |\Mvar| into an edge.\\ \precond |\Mvar| represents an edge.}*/ @@ -125,20 +144,33 @@ public: void init() { type = NIL; } void init(Node n) { type = NODE; + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO geninfo::create(value); - geninfo::access(value) = n; + geninfo::access(value) = n; + #else + value=n; + #endif } void init(Edge e) { type = EDGE; + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO geninfo::create(value); - geninfo::access(value) = e; + geninfo::access(value) = e; + #else + value=e; + #endif } void clear() { switch(type) { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO case NODE: geninfo::clear(value); break; case EDGE: geninfo::clear(value); break; + #else + case NODE: value=boost::any(); break; + case EDGE: value=boost::any(); break; + #endif case NIL: break; } } @@ -148,10 +180,18 @@ public: type = L.type; switch(type) { case NODE: - geninfo::access(value) = geninfo::const_access(L.value); + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::access(value) = geninfo::const_access(L.value); + #else + *boost_any_cast(&value) = boost::any_cast(L.value); + #endif break; case EDGE: + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO geninfo::access(value) = geninfo::const_access(L.value); + #else + *boost::any_cast(&value) = boost::any_cast(L.value); + #endif break; case NIL: break; } diff --git a/Nef_2/include/CGAL/Nef_2/geninfo.h b/Nef_2/include/CGAL/Nef_2/geninfo.h index f27c85eb19e..1a26b4fe7cf 100644 --- a/Nef_2/include/CGAL/Nef_2/geninfo.h +++ b/Nef_2/include/CGAL/Nef_2/geninfo.h @@ -21,6 +21,11 @@ #ifndef CGAL_NEF_2_GENINFO_H #define CGAL_NEF_2_GENINFO_H + +//This file is deprecated and something like boost::any or boost::variant should +//be used instead +#include + #include #include diff --git a/Nef_3/include/CGAL/Nef_3/Halfedge.h b/Nef_3/include/CGAL/Nef_3/Halfedge.h index b92186a7bdf..795578b10ca 100644 --- a/Nef_3/include/CGAL/Nef_3/Halfedge.h +++ b/Nef_3/include/CGAL/Nef_3/Halfedge.h @@ -34,12 +34,20 @@ #define CGAL_NEF_DEBUG 83 #include +#ifndef CGAL_I_DO_WANT_TO_USE_GENINFO +#include +#endif + namespace CGAL { template class Halfedge_base { // == Halfedge + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO typedef void* GenPtr; + #else + typedef boost::any GenPtr; + #endif typedef typename Refs::Mark Mark; typedef typename Refs::Vector_3 Vector_3; typedef typename Refs::Sphere_point Sphere_point; @@ -131,7 +139,11 @@ class Halfedge_base std::string debug() const { std::stringstream os; set_pretty_mode(os); - os<<"sv [ "< +#ifndef CGAL_I_DO_WANT_TO_USE_GENINFO +#include +#endif + namespace CGAL { template class SFace_base { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO typedef void* GenPtr; + #else + typedef boost::any GenPtr; + #endif typedef typename Refs::Mark Mark; typedef typename Refs::Vertex_handle Vertex_handle; typedef typename Refs::Vertex_const_handle Vertex_const_handle; diff --git a/Nef_3/include/CGAL/Nef_3/SHalfedge.h b/Nef_3/include/CGAL/Nef_3/SHalfedge.h index 1ee884bdc3a..b5a882a4040 100644 --- a/Nef_3/include/CGAL/Nef_3/SHalfedge.h +++ b/Nef_3/include/CGAL/Nef_3/SHalfedge.h @@ -33,11 +33,19 @@ #define CGAL_NEF_DEBUG 83 #include +#ifndef CGAL_I_DO_WANT_TO_USE_GENINFO +#include +#endif + namespace CGAL { template class SHalfedge_base { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO typedef void* GenPtr; + #else + typedef boost::any GenPtr; + #endif typedef typename Refs::Mark Mark; typedef typename Refs::Sphere_circle Sphere_circle; @@ -199,7 +207,11 @@ class SHalfedge_base { { std::stringstream os; set_pretty_mode(os); os <<"e[ "<debug()<<", " - <source_->debug()<<" "<source_->debug() + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + <<" "< +#else +#include +#endif #include #include #include @@ -123,7 +126,12 @@ std::vector& Support; unsigned edge_number; Vertex_handle new_vertex(const Point& p) const -{ geninfo::create(p.vertex()->info()); +{ + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::create(p.vertex()->info()); + #else + p.vertex()->info()=unsigned(); + #endif return p.vertex(); } Halfedge_handle new_halfedge_pair_at_source(Vertex_handle v) @@ -135,7 +143,12 @@ void supporting_segment(Halfedge_handle e, I it) void halfedge_below(Vertex_handle v, Halfedge_handle e) { CGAL_NEF_TRACEN("halfedge_below point "<< v->point() <<": " << e); - geninfo::access(v->info()) = e; } + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::access(v->info()) = e; + #else + v->info() = e; + #endif +} // all empty, no update necessary void link_as_target_and_append(Vertex_handle, Halfedge_handle) @@ -396,7 +409,11 @@ protected: int fc = FacetCycle[e]; SHalfedge_handle e_min = MinimalEdge[fc]; SHalfedge_handle e_below = + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO Edge_of[geninfo::access(info(e_min->twin()->source()->twin()->source()))]; + #else + Edge_of[ boost::any_cast(info(e_min->twin()->source()->twin()->source())) ]; + #endif CGAL_assertion( e_below != SHalfedge_handle() ); CGAL_NEF_TRACEN(" edge below " << debug(e_below)); Halffacet_handle f = e_below->facet(); @@ -631,7 +648,11 @@ create_facet_objects(const Plane_3& plane_supporting_facet, CGAL_forall_iterators(lit,SHalfloops) { l=*lit; SHalfedge_handle e_below = - Edge_of[geninfo::access(info(l->incident_sface()->center_vertex()))]; + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + Edge_of[geninfo::access(info(l->incident_sface()->center_vertex()))]; + #else + Edge_of[ boost::any_cast(info(l->incident_sface()->center_vertex())) ]; + #endif CGAL_assertion( e_below != SHalfedge_handle() ); CGAL_NEF_TRACEN("link sloop at vertex "<< l->incident_sface()->center_vertex()->point()); diff --git a/Nef_3/include/CGAL/Nef_3/SNC_SM_overlayer.h b/Nef_3/include/CGAL/Nef_3/SNC_SM_overlayer.h index 4d32ec743a7..f3c3c5a7806 100644 --- a/Nef_3/include/CGAL/Nef_3/SNC_SM_overlayer.h +++ b/Nef_3/include/CGAL/Nef_3/SNC_SM_overlayer.h @@ -25,7 +25,11 @@ #include #include #include +#ifdef CGAL_I_DO_WANT_TO_USE_GENINFO #include +#else +#include +#endif #include #include #include diff --git a/Nef_3/include/CGAL/Nef_3/SNC_const_decorator.h b/Nef_3/include/CGAL/Nef_3/SNC_const_decorator.h index 0bbeeae7f86..d556791b5cb 100644 --- a/Nef_3/include/CGAL/Nef_3/SNC_const_decorator.h +++ b/Nef_3/include/CGAL/Nef_3/SNC_const_decorator.h @@ -36,6 +36,10 @@ #define CGAL_NEF_DEBUG 191 #include +#ifndef CGAL_I_DO_WANT_TO_USE_GENINFO +#include +#endif + namespace CGAL { template class SM_const_decorator; @@ -116,7 +120,11 @@ public: SHalfedge_around_sface_const_circulator; public: + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO typedef void* GenPtr; + #else + typedef boost::any GenPtr; + #endif SNC_const_decorator() : sncp_(0) {} SNC_const_decorator(const SNC_structure& W) : sncp_(&W) {} diff --git a/Nef_3/include/CGAL/Nef_3/SNC_decorator.h b/Nef_3/include/CGAL/Nef_3/SNC_decorator.h index 7cda2e5eb80..e70fcd38e6e 100644 --- a/Nef_3/include/CGAL/Nef_3/SNC_decorator.h +++ b/Nef_3/include/CGAL/Nef_3/SNC_decorator.h @@ -40,6 +40,10 @@ #define CGAL_NEF_DEBUG 19 #include +#ifndef CGAL_I_DO_WANT_TO_USE_GENINFO +#include +#endif + namespace CGAL { template @@ -155,7 +159,11 @@ class SNC_decorator : public SNC_const_decorator { enum {NO_SNC, WITH_SNC}; public: + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO typedef void* GenPtr; + #else + typedef boost::any GenPtr; + #endif SNC_decorator() : Base(), sncp_() {} SNC_decorator(SNC_structure& W) diff --git a/Nef_3/include/CGAL/Nef_3/SNC_io_parser.h b/Nef_3/include/CGAL/Nef_3/SNC_io_parser.h index 2b5d9beb8b7..031349c7d2c 100644 --- a/Nef_3/include/CGAL/Nef_3/SNC_io_parser.h +++ b/Nef_3/include/CGAL/Nef_3/SNC_io_parser.h @@ -39,6 +39,10 @@ #define CGAL_NEF_DEBUG 293 #include +#ifndef CGAL_I_DO_WANT_TO_USE_GENINFO +#include +#endif + namespace CGAL { template @@ -889,7 +893,11 @@ public: typedef typename Infi_box::Standard_vector Standard_vector; typedef typename Infi_box::Standard_plane Standard_plane; + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO typedef void* GenPtr; + #else + typedef boost::any GenPtr; + #endif using Base::visit_shell_objects; diff --git a/Nef_3/include/CGAL/Nef_3/SNC_ray_shooter.h b/Nef_3/include/CGAL/Nef_3/SNC_ray_shooter.h index b55aa9769e5..0a94a198b88 100644 --- a/Nef_3/include/CGAL/Nef_3/SNC_ray_shooter.h +++ b/Nef_3/include/CGAL/Nef_3/SNC_ray_shooter.h @@ -42,6 +42,10 @@ #define CGAL_NEF_DEBUG 37 #include +#ifndef CGAL_I_DO_WANT_TO_USE_GENINFO +#include +#endif + namespace CGAL { // ---------------------------------------------------------------------------- @@ -87,7 +91,11 @@ public: typedef typename SNC_structure::Mark Mark; + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO typedef void* GenPtr; + #else + typedef boost::any GenPtr; + #endif SNC_ray_shooter() {} void initialize(SNC_structure* W) { *this = SNC_ray_shooter(*W);} diff --git a/Nef_3/include/CGAL/Nef_3/SNC_structure.h b/Nef_3/include/CGAL/Nef_3/SNC_structure.h index 4977f1f5d7e..7f767760b84 100644 --- a/Nef_3/include/CGAL/Nef_3/SNC_structure.h +++ b/Nef_3/include/CGAL/Nef_3/SNC_structure.h @@ -1212,7 +1212,8 @@ public: sfaces_.erase(h); put_sface_node(&*h); } - + //SL: in the following function, I guess the sizeof(void*) is related to the void* info that was + //used together with geninfo to store an arbitrary type. I replaced that with any and did not changed that std::size_t bytes() { // bytes used for the SNC_structure @@ -1253,7 +1254,8 @@ public: return result; } - + //SL: in the following function, I guess the sizeof(void*) is related to the void* info that was + //used together with geninfo to store an arbitrary type. I replaced that with any and did not changed that std::size_t bytes_reduced() { // bytes used for the SNC_structure diff --git a/Nef_3/include/CGAL/Nef_3/Vertex.h b/Nef_3/include/CGAL/Nef_3/Vertex.h index 11c5c8bfd60..1e9792c009e 100644 --- a/Nef_3/include/CGAL/Nef_3/Vertex.h +++ b/Nef_3/include/CGAL/Nef_3/Vertex.h @@ -33,12 +33,20 @@ #define CGAL_NEF_DEBUG 83 #include +#ifndef CGAL_I_DO_WANT_TO_USE_GENINFO +#include +#endif + namespace CGAL { template class Vertex_base { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO typedef void* GenPtr; + #else + typedef boost::any GenPtr; + #endif typedef typename Refs::Mark Mark; typedef typename Refs::Point_3 Point_3; diff --git a/Nef_S2/include/CGAL/Nef_S2/SM_const_decorator.h b/Nef_S2/include/CGAL/Nef_S2/SM_const_decorator.h index e7a1dae22ae..b674c70f59a 100644 --- a/Nef_S2/include/CGAL/Nef_S2/SM_const_decorator.h +++ b/Nef_S2/include/CGAL/Nef_S2/SM_const_decorator.h @@ -36,6 +36,9 @@ #undef CGAL_NEF_DEBUG #define CGAL_NEF_DEBUG 67 #include +#ifndef CGAL_I_DO_WANT_TO_USE_GENINFO +#include +#endif namespace CGAL { @@ -74,7 +77,12 @@ typedef typename Map::Mark Mark; typedef size_t Size_type; /*{\Mtypemember size type.}*/ +#ifdef CGAL_I_DO_WANT_TO_USE_GENINFO typedef void* GenPtr; +#else +typedef boost::any GenPtr; +#endif + // typedef typename Map::Constructor_const_parameter Constructor_parameter; typedef typename Map::SVertex_const_handle SVertex_const_handle; diff --git a/Nef_S2/include/CGAL/Nef_S2/SM_decorator.h b/Nef_S2/include/CGAL/Nef_S2/SM_decorator.h index b6c4a6b0939..7f418b32a75 100644 --- a/Nef_S2/include/CGAL/Nef_S2/SM_decorator.h +++ b/Nef_S2/include/CGAL/Nef_S2/SM_decorator.h @@ -35,6 +35,9 @@ #include #include #include +#ifndef CGAL_I_DO_WANT_TO_USE_GENINFO +#include +#endif namespace CGAL { @@ -83,7 +86,11 @@ enum { BEFORE = -1, AFTER = 1 }; typedef typename Sphere_kernel::Aff_transformation_3 Aff_transformation_3; +#ifdef CGAL_I_DO_WANT_TO_USE_GENINFO typedef void* GenPtr; +#else +typedef boost::any GenPtr; +#endif typedef typename Map::SVertex SVertex; typedef typename Map::SVertex_handle SVertex_handle; typedef typename Map::SVertex_iterator SVertex_iterator; diff --git a/Nef_S2/include/CGAL/Nef_S2/SM_items.h b/Nef_S2/include/CGAL/Nef_S2/SM_items.h index a07bd316b0c..efd63d54c3f 100644 --- a/Nef_S2/include/CGAL/Nef_S2/SM_items.h +++ b/Nef_S2/include/CGAL/Nef_S2/SM_items.h @@ -31,6 +31,9 @@ #include #include #include +#ifndef CGAL_I_DO_WANT_TO_USE_GENINFO +#include +#endif namespace CGAL { @@ -44,7 +47,11 @@ public: template class SVertex { - typedef void* GenPtr; + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + typedef void* GenPtr; + #else + typedef boost::any GenPtr; + #endif typedef typename Refs::Mark Mark; typedef typename Refs::Sphere_point Sphere_point; typedef typename Refs::SVertex_handle SVertex_handle; @@ -108,7 +115,11 @@ public: public: std::string debug() const { std::ostringstream os; set_pretty_mode(os); - os<<"V"< class SHalfedge { - typedef void* GenPtr; + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + typedef void* GenPtr; + #else + typedef boost::any GenPtr; + #endif typedef typename Refs::Mark Mark; typedef typename Refs::Sphere_circle Sphere_circle; typedef typename Refs::SVertex_handle SVertex_handle; @@ -202,7 +217,11 @@ public: std::string debug() const { std::ostringstream os; set_pretty_mode(os); os <<"e["<debug()<<", " - <source_->debug()<<" "<source_->debug()<< + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + " "<< info_ << + #endif + "]"<<'\0'; std::string res(os.str()); return res; } @@ -211,7 +230,11 @@ public: template class SHalfloop { - typedef void* GenPtr; + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + typedef void* GenPtr; + #else + typedef boost::any GenPtr; + #endif typedef typename Refs::Mark Mark; typedef typename Refs::Sphere_circle Sphere_circle; typedef typename Refs::SHalfloop_handle SHalfloop_handle; @@ -272,7 +295,11 @@ public: std::string debug() const { std::ostringstream os; set_pretty_mode(os); - os<<"l"< class SFace { - typedef void* GenPtr; + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + typedef void* GenPtr; + #else + typedef boost::any GenPtr; + #endif typedef typename Refs::Mark Mark; typedef typename Refs::Object_handle Object_handle; typedef typename Refs::Object_list Object_list; diff --git a/Nef_S2/include/CGAL/Nef_S2/SM_overlayer.h b/Nef_S2/include/CGAL/Nef_S2/SM_overlayer.h index 881bd5b22b4..3870444d656 100644 --- a/Nef_S2/include/CGAL/Nef_S2/SM_overlayer.h +++ b/Nef_S2/include/CGAL/Nef_S2/SM_overlayer.h @@ -25,7 +25,11 @@ #include #include #include +#ifdef CGAL_I_DO_WANT_TO_USE_GENINFO #include +#else +#include +#endif #include #include #include @@ -56,7 +60,11 @@ struct SMO_from_segs { Vertex_handle new_vertex(const Point& p) { Vertex_handle v = G.new_svertex(p); + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO geninfo::create(G.info(v)); + #else + G.info(v)=Halfedge_handle(); + #endif return v; } @@ -85,16 +93,35 @@ struct SMO_from_segs { { if ( M[it] ) v->mark() = true; } void halfedge_below(Vertex_handle v, Halfedge_handle e) const - { geninfo::access(G.info(v)) = e; } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::access(G.info(v)) = e; + #else + G.info(v)=e; + #endif + } Halfedge_handle halfedge_below(Vertex_handle v) const - { return geninfo::access(G.info(v)); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + return geninfo::access(G.info(v)); + #else + return + boost::any_cast( G.info(v) ); + #endif + } void assert_equal_marks(Vertex_handle v1, Vertex_handle v2) const { CGAL_assertion(v1->mark()==v2->mark()); } void discard_info(Vertex_handle v) const - { geninfo::clear(G.info(v)); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::clear(G.info(v)); + #else + G.info(v)=boost::any(); + #endif + } void assert_equal_marks(Halfedge_handle e1, Halfedge_handle e2) const { CGAL_assertion(e1->mark()==e2->mark()); } @@ -104,7 +131,12 @@ struct SMO_from_segs { void clear_temporary_vertex_info() const { Vertex_handle v; CGAL_forall_svertices(v,G) + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO geninfo::clear(G.info(v)); + #else + G.info(v)=boost::any(); + #endif + } @@ -500,13 +532,32 @@ public: }; // vertex_info void assoc_info(SVertex_handle v) const - { geninfo::create(info(v)); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::create(info(v)); + #else + info(v)=vertex_info(); + #endif + } void discard_info(SVertex_handle v) const - { geninfo::clear(info(v)); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::clear(info(v)); + #else + info(v)=boost::any(); + #endif + } vertex_info& ginfo(SVertex_handle v) const - { return geninfo::access(info(v)); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + return geninfo::access(info(v)); + #else + return + *boost::any_cast(&info(v)); + #endif + } Mark& mark(SVertex_handle v, int i) const { return ginfo(v).m[i]; } @@ -532,15 +583,36 @@ public: }; void assoc_info(SHalfedge_handle e) const - { geninfo::create(info(e)); - geninfo::create(info(e->twin())); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::create(info(e)); + geninfo::create(info(e->twin())); + #else + info(e)=edge_info(); + info(e->twin())=edge_info(); + #endif + } void discard_info(SHalfedge_handle e) const - { geninfo::clear(info(e)); - geninfo::clear(info(e->twin())); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::clear(info(e)); + geninfo::clear(info(e->twin())); + #else + info(e)=boost::any(); + info(e->twin())=boost::any(); + #endif + } edge_info& ginfo(SHalfedge_handle e) const - { return geninfo::access(info(e)); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + return geninfo::access(info(e)); + #else + return + *boost::any_cast(&info(e)); + #endif + } Mark& mark(SHalfedge_handle e, int i) const { return ginfo(e).m[i]; } @@ -567,13 +639,32 @@ public: }; void assoc_info(SFace_handle f) const - { geninfo::create(info(f)); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::create(info(f)); + #else + info(f)=face_info(); + #endif + } void discard_info(SFace_handle f) const - { geninfo::clear(info(f)); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::clear(info(f)); + #else + info(f)=boost::any(); + #endif + } face_info& ginfo(SFace_handle f) const - { return geninfo::access(info(f)); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + return geninfo::access(info(f)); + #else + return + *boost::any_cast(&info(f)); + #endif + } Mark& mark(SFace_handle f, int i) const { return ginfo(f).m[i]; } @@ -1395,7 +1486,10 @@ subdivide(const Map* M0, const Map* M1, CGAL_assertion_code(SVertex_iterator svi); CGAL_assertion_code( for(svi=this->svertices_begin(); svi!=this->svertices_end(); svi++) { - CGAL_NEF_TRACEN("vertex "<point()<<" info "<point()<<" info "<< + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + info(svi)<< + #endif " marks "<svertices_begin(); svi!=this->svertices_end(); svi++) { - CGAL_NEF_TRACEN("vertex "<point()<<" info "<point() + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + <<" info "< #include #include +#ifdef CGAL_I_DO_WANT_TO_USE_GENINFO #include +#else +#include +#endif #include #include #undef CGAL_NEF_DEBUG diff --git a/Nef_S2/include/CGAL/Nef_S2/SM_triangulator.h b/Nef_S2/include/CGAL/Nef_S2/SM_triangulator.h index 65f1e280a9a..824eb5f1a3e 100644 --- a/Nef_S2/include/CGAL/Nef_S2/SM_triangulator.h +++ b/Nef_S2/include/CGAL/Nef_S2/SM_triangulator.h @@ -24,7 +24,11 @@ #include #include #include +#ifdef CGAL_I_DO_WANT_TO_USE_GENINFO #include +#else +#include +#endif #include #include #include @@ -201,13 +205,32 @@ public: }; void assoc_info(SVertex_handle v) const - { geninfo::create(info(v)); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::create(info(v)); + #else + info(v)=vertex_info(); + #endif + } void discard_info(SVertex_handle v) const - { geninfo::clear(info(v)); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::clear(info(v)); + #else + info(v)=boost::any(); + #endif + } vertex_info& ginfo(SVertex_handle v) const - { return geninfo::access(info(v)); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + return geninfo::access(info(v)); + #else + return + *boost::any_cast(&info(v)); + #endif + } Object_handle& support(SVertex_handle v) const { return ginfo(v).o_; } @@ -224,15 +247,36 @@ public: }; void assoc_info(SHalfedge_handle e) const - { geninfo::create(info(e)); - geninfo::create(info(e->twin())); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::create(info(e)); + geninfo::create(info(e->twin())); + #else + info(e)=edge_info(); + info(e->twin())=edge_info(); + #endif + } void discard_info(SHalfedge_handle e) const - { geninfo::clear(info(e)); - geninfo::clear(info(e->twin())); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + geninfo::clear(info(e)); + geninfo::clear(info(e->twin())); + #else + info(e)=boost::any(); + info(e->twin())=boost::any(); + #endif + } edge_info& ginfo(SHalfedge_handle e) const - { return geninfo::access(info(e)); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + return geninfo::access(info(e)); + #else + return + *boost::any_cast(&info(e)); + #endif + } Object_handle& support(SHalfedge_handle e) const // uedge information we store in the smaller one @@ -244,7 +288,14 @@ public: { return ginfo(e).m_left_; } const edge_info& ginfo(SHalfedge_const_handle e) const - { return geninfo::const_access(info(e)); } + { + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO + return geninfo::const_access(info(e)); + #else + return + *boost::any_cast(&info(e)); + #endif + } const Mark& incident_mark(SHalfedge_const_handle e) const { return ginfo(e).m_left_; } From 44853585b7f483bc956695fb0e4746eb1ba55a78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 18 Apr 2012 06:59:22 +0000 Subject: [PATCH 12/47] too naive replacement: do not use nested macros --- Nef_S2/include/CGAL/Nef_S2/SM_overlayer.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Nef_S2/include/CGAL/Nef_S2/SM_overlayer.h b/Nef_S2/include/CGAL/Nef_S2/SM_overlayer.h index 3870444d656..93ad2afa3c2 100644 --- a/Nef_S2/include/CGAL/Nef_S2/SM_overlayer.h +++ b/Nef_S2/include/CGAL/Nef_S2/SM_overlayer.h @@ -1486,11 +1486,11 @@ subdivide(const Map* M0, const Map* M1, CGAL_assertion_code(SVertex_iterator svi); CGAL_assertion_code( for(svi=this->svertices_begin(); svi!=this->svertices_end(); svi++) { - CGAL_NEF_TRACEN("vertex "<point()<<" info "<< #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO - info(svi)<< + CGAL_NEF_TRACEN("vertex "<point()<<" info "<< info(svi)<< " marks "<point()<< " marks "<svertices_begin(); svi!=this->svertices_end(); svi++) { - CGAL_NEF_TRACEN("vertex "<point() #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO - <<" info "<point() <<" info "<point() << " marks "< Date: Wed, 18 Apr 2012 08:57:31 +0000 Subject: [PATCH 13/47] Fix an error in URL Maybe we would like to encode the version number in the URL, but that would yet another generated file in CGAL... --- Installation/INSTALL | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/INSTALL b/Installation/INSTALL index f35323a25a2..4b5b45a7f1d 100644 --- a/Installation/INSTALL +++ b/Installation/INSTALL @@ -11,7 +11,7 @@ are for the most common use cases, and cover the command line tools. For further information, or in case of problems, please see the detailed installation instructions, which can be found in this distribution in the file ./doc_html/index.html or on the CGAL website -http://www.cgal.org/Manual/beta/doc_html/cgal_manual/Installation/Chapter_main.html +http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Installation/Chapter_main.html The documentation of CGAL is available in PDF and HTML formats. It is not bundled with the software but can be downloaded separately From 147ca74939c5ea69233ef753d032168d8801deca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 18 Apr 2012 12:37:23 +0000 Subject: [PATCH 14/47] add precondition to ensure the polygon is simple --- Straight_skeleton_2/include/CGAL/create_straight_skeleton_2.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Straight_skeleton_2/include/CGAL/create_straight_skeleton_2.h b/Straight_skeleton_2/include/CGAL/create_straight_skeleton_2.h index 7994b531c21..ded63d4ab9f 100644 --- a/Straight_skeleton_2/include/CGAL/create_straight_skeleton_2.h +++ b/Straight_skeleton_2/include/CGAL/create_straight_skeleton_2.h @@ -135,6 +135,7 @@ boost::shared_ptr< Straight_skeleton_2 > inline create_interior_straight_skeleton_2 ( Polygon const& aOutContour, K const& k ) { + CGAL_precondition(aOutContour.is_simple() || !"The input polygon is not simple."); return create_interior_straight_skeleton_2(CGAL_SS_i::vertices_begin(aOutContour) ,CGAL_SS_i::vertices_end(aOutContour) ,k @@ -221,6 +222,7 @@ boost::shared_ptr< Straight_skeleton_2 > inline create_exterior_straight_skeleton_2 ( FT const& aMaxOffset, Polygon const& aPoly, K const& k ) { + CGAL_precondition(aPoly.is_simple() || !"The input polygon is not simple."); return create_exterior_straight_skeleton_2(aMaxOffset ,CGAL_SS_i::vertices_begin(aPoly) ,CGAL_SS_i::vertices_end (aPoly) From 52d230565c7ae384a869d69c73c235028b2f3f28 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 18 Apr 2012 13:43:24 +0000 Subject: [PATCH 15/47] Remove files added but not used --- .../include/CGAL/IO/File_header_gocad.h | 61 -------------- .../include/CGAL/IO/File_writer_gocad.h | 83 ------------------- 2 files changed, 144 deletions(-) delete mode 100644 Stream_support/include/CGAL/IO/File_header_gocad.h delete mode 100644 Stream_support/include/CGAL/IO/File_writer_gocad.h diff --git a/Stream_support/include/CGAL/IO/File_header_gocad.h b/Stream_support/include/CGAL/IO/File_header_gocad.h deleted file mode 100644 index 620b6e23c56..00000000000 --- a/Stream_support/include/CGAL/IO/File_header_gocad.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2009 GeometryFactory All rights reserved. -// -// This file is part of CGAL (www.cgal.org); you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation; either version 3 of the License, -// or (at your option) any later version. -// -// Licensees holding a valid commercial license may use this file in -// accordance with the commercial license agreement provided with the software. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// -// $URL$ -// $Id$ -// -// -// Author(s) : Andreas Fabri - - -#ifndef CGAL_IO_FILE_HEADER_GOCAD_H -#define CGAL_IO_FILE_HEADER_GOCAD_H 1 - -#include -#include - -namespace CGAL { - -class File_header_gocad { -private: - std::string m_fname; - std::string m_color; -public: -explicit File_header_gocad(std::string fname, std::string color) : m_fname(fname), m_color(color) {} - - std::string fname() const - { - return m_fname; - } - - std::string color() const - { - return m_color; - } - - -}; - -// Write header. -inline std::ostream& operator<<( std::ostream& out, const File_header_gocad& h){ - - return out << "GOCAD TSurf 1\n" - "HEADER {\n" - "name:" << h.fname() << "\n" - "*solid*color:" << h.color() << "\n" - "}\n" - "TFACE\n"; -} - -} //namespace CGAL -#endif // CGAL_IO_FILE_HEADER_GOCAD_H diff --git a/Stream_support/include/CGAL/IO/File_writer_gocad.h b/Stream_support/include/CGAL/IO/File_writer_gocad.h deleted file mode 100644 index 2267c66e3a5..00000000000 --- a/Stream_support/include/CGAL/IO/File_writer_gocad.h +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 1997 -// Utrecht University (The Netherlands), -// ETH Zurich (Switzerland), -// INRIA Sophia-Antipolis (France), -// Max-Planck-Institute Saarbruecken (Germany), -// and Tel-Aviv University (Israel). All rights reserved. -// -// This file is part of CGAL (www.cgal.org); you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation; either version 3 of the License, -// or (at your option) any later version. -// -// Licensees holding a valid commercial license may use this file in -// accordance with the commercial license agreement provided with the software. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// -// $URL$ -// $Id$ -// -// -// Author(s) : Lutz Kettner - -#ifndef CGAL_IO_FILE_WRITER_GOCAD_H -#define CGAL_IO_FILE_WRITER_GOCAD_H 1 - -#include -#include -#include -#include - -namespace CGAL { - -class File_writer_gocad { - int m_vertex_index; - std::ostream* m_out; - File_header_gocad m_header; -public: - File_writer_gocad(std::string fname, std::string color) : m_vertex_index(0), m_header(fname, color) {} - File_writer_gocad( const File_header_gocad& h) : m_vertex_index(0), m_header( h) {} - - std::ostream& out() { return *m_out; } - File_header_gocad& header() { return m_header; } - const File_header_gocad& header() const { return m_header; } - - void write_header( std::ostream& o, - std::size_t vertices, - std::size_t halfedges, - std::size_t facets, - bool normals = false) - { - m_out = &o; - out() << header(); - } - - - void write_footer() - {} - - void write_vertex( const double& x, const double& y, const double& z) { - out() << "VRTX " << m_vertex_index++ << ' ' << x << ' ' << y << ' ' << z << '\n'; - } - - void write_facet_header() { - out() << '\n'; - } - - void write_facet_begin( std::size_t no) { - CGAL_assertion(no == 3); - out() << "TRGL " << ' '; - } - void write_facet_vertex_index( std::size_t index) { - out() << ' ' << index; - } - void write_facet_end() { - out() << '\n'; - } -}; - -} //namespace CGAL -#endif // CGAL_IO_FILE_WRITER_GOCAD_H // -// EOF // From a4e2f8d4f5a28f8cb713f5b9eace340b5e87d721 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 18 Apr 2012 15:33:14 +0000 Subject: [PATCH 16/47] Bug fixes in Mesh_3 documentation 1/ The requirement on the constructor of Polyhedral_mesh_domain_with_features_3 was wrong: the argument must be convertible to Mesh_polyhedron_3, and not to Polyhedron_3. 2/ The geom traits of Mesh_polyhedron_3 must be model of PolyhedronTraits_3 *and* of IntersectionGeometricTraits_3. (That patch passes the manual testsuite.) --- Mesh_3/doc_tex/Mesh_3_ref/Mesh_polyhedron_3.tex | 10 ++++++---- .../Polyhedral_mesh_domain_with_features_3.tex | 4 ++-- Mesh_3/doc_tex/Mesh_3_ref/intro.tex | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Mesh_3/doc_tex/Mesh_3_ref/Mesh_polyhedron_3.tex b/Mesh_3/doc_tex/Mesh_3_ref/Mesh_polyhedron_3.tex index 836aff7874a..d88a91a6168 100644 --- a/Mesh_3/doc_tex/Mesh_3_ref/Mesh_polyhedron_3.tex +++ b/Mesh_3/doc_tex/Mesh_3_ref/Mesh_polyhedron_3.tex @@ -12,7 +12,7 @@ % +------------------------------------------------------------------------+ -\begin{ccRefClass}{Mesh_polyhedron_3} %% add template arg's if necessary +\begin{ccRefClass}{Mesh_polyhedron_3} %% add template arg's if necessary %% \ccHtmlCrossLink{} %% add further rules for cross referencing links %% \ccHtmlIndexC[class]{} %% add further index entries @@ -28,16 +28,18 @@ detection algorithm. \ccParameters -Template parameter \ccc{Gt} stands for the geometric traits associated -to the meshing process. It should be a model of concept \ccc{PolyhedronTraits_3}. +Template parameter \ccc{IGT} stands for the geometric traits associated +to the meshing process. It should be a model of the two concepts +\ccc{PolyhedronTraits_3} and \ccc{IntersectionGeometricTraits_3}. \ccTypes -\ccNestedType{type}{\ccc{CGAL::Polyhedron_3} type with customized \ccc{PolyhedronItems_3} +\ccNestedType{type}{\ccc{CGAL::Polyhedron_3} type with customized \ccc{PolyhedronItems_3} designed to handle sharp feature detection.} \ccSeeAlso +\ccRefIdfierPage{CGAL::Polyhedron_3} \ccRefIdfierPage{CGAL::Polyhedral_mesh_domain_with_features_3} \end{ccRefClass} diff --git a/Mesh_3/doc_tex/Mesh_3_ref/Polyhedral_mesh_domain_with_features_3.tex b/Mesh_3/doc_tex/Mesh_3_ref/Polyhedral_mesh_domain_with_features_3.tex index 3c7ccb9f9cf..ff07014507c 100644 --- a/Mesh_3/doc_tex/Mesh_3_ref/Polyhedral_mesh_domain_with_features_3.tex +++ b/Mesh_3/doc_tex/Mesh_3_ref/Polyhedral_mesh_domain_with_features_3.tex @@ -53,7 +53,7 @@ instantiated with a model of the concept \ccc{IntersectionGeometricTraits_3}. \ccConstructor{template Polyhedral_mesh_domain_with_features_3(const Polyhedron& p);}{ Constructs a \ccc{Polyhedral_mesh_domain_with_features_3} from a \ccc{Polyhedron}. -The only requirement on type \ccc{Polyhedron} is that \ccc{CGAL::Polyhedron_3} should +The only requirement on type \ccc{Polyhedron} is that \ccc{CGAL::Mesh_polyhedron_3::type} should be constructible from \ccc{Polyhedron}. No feature detection is done at this level. Note that a copy of \ccc{p} will be done.} @@ -73,7 +73,7 @@ those triangles is a feature edge.} \ccRefConceptPage{MeshDomainWithFeatures_3} \\ \ccRefIdfierPage{CGAL::Mesh_domain_with_polyline_features_3} \\ \ccRefIdfierPage{CGAL::Polyhedral_mesh_domain_3} \\ -\ccRefConceptPage{Mesh_polyhedron_3} +\ccRefIdfierPage{CGAL::Mesh_polyhedron_3} \end{ccRefClass} diff --git a/Mesh_3/doc_tex/Mesh_3_ref/intro.tex b/Mesh_3/doc_tex/Mesh_3_ref/intro.tex index dd1b5e63f7f..62b6ec7868c 100644 --- a/Mesh_3/doc_tex/Mesh_3_ref/intro.tex +++ b/Mesh_3/doc_tex/Mesh_3_ref/intro.tex @@ -51,7 +51,7 @@ and their associated classes: \ccRefIdfierPage{CGAL::Polyhedral_mesh_domain_with_features_3} \\ \ccRefIdfierPage{CGAL::Labeled_image_mesh_domain_3} \\ \ccRefIdfierPage{CGAL::Mesh_domain_with_polyline_features_3} \\ -\ccRefIdfierPage{CGAL::Mesh_polyhedron_3} \\ +\ccRefIdfierPage{CGAL::Mesh_polyhedron_3} \\ \ccRefIdfierPage{CGAL::Triangle_accessor_3,K>} \\ From 8bb75c05863ff50293158a80d7f0ee191c2a4be7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 19 Apr 2012 07:06:00 +0000 Subject: [PATCH 17/47] actually there was two nested macros... --- Nef_S2/include/CGAL/Nef_S2/SM_overlayer.h | 26 +++++++++++++++-------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/Nef_S2/include/CGAL/Nef_S2/SM_overlayer.h b/Nef_S2/include/CGAL/Nef_S2/SM_overlayer.h index 93ad2afa3c2..f4277148e8b 100644 --- a/Nef_S2/include/CGAL/Nef_S2/SM_overlayer.h +++ b/Nef_S2/include/CGAL/Nef_S2/SM_overlayer.h @@ -1484,16 +1484,19 @@ subdivide(const Map* M0, const Map* M1, // DEBUG CODE: to do: have all svertices a halfedge below associated? CGAL_NEF_TRACEN("Vertex info after swep"); CGAL_assertion_code(SVertex_iterator svi); + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO CGAL_assertion_code( for(svi=this->svertices_begin(); svi!=this->svertices_end(); svi++) { - #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO CGAL_NEF_TRACEN("vertex "<point()<<" info "<< info(svi)<< " marks "<point()<< " marks "<svertices_begin(); svi!=this->svertices_end(); svi++) { + CGAL_NEF_TRACEN("vertex "<point()<< " marks "<svertices_begin(),v,O); else @@ -1777,15 +1780,20 @@ subdivide(const Map* M0, const Map* M1, // DEBUG CODE: to do: have all svertices a halfedge below associated? CGAL_NEF_TRACEN("Vertex info after swep"); CGAL_assertion_code(SVertex_iterator svi); + #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO CGAL_assertion_code( for(svi=this->svertices_begin(); svi!=this->svertices_end(); svi++) { - #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO CGAL_NEF_TRACEN("vertex "<point() <<" info "<point() << " marks "<svertices_begin(); svi!=this->svertices_end(); svi++) { + CGAL_NEF_TRACEN("vertex "<point() << " marks "< Date: Thu, 19 Apr 2012 11:59:24 +0000 Subject: [PATCH 18/47] Fix a bug in test of equality operator of CGAL::cpp0x::tuple Do not test equality between default initialized tuples, because GNU/g++ version 4.1.2 does not default-initialize correctly std::tr1::tuple. --- STL_Extension/test/STL_Extension/test_stl_extension.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/STL_Extension/test/STL_Extension/test_stl_extension.cpp b/STL_Extension/test/STL_Extension/test_stl_extension.cpp index a7ab589d457..142fbd51689 100644 --- a/STL_Extension/test/STL_Extension/test_stl_extension.cpp +++ b/STL_Extension/test/STL_Extension/test_stl_extension.cpp @@ -8115,8 +8115,13 @@ void test_tuple(){ CGAL_assertion( CGAL::cpp0x::get<0>(t1)==i1 ); CGAL_assertion( CGAL::cpp0x::get<1>(t1)==i2 ); CGAL_assertion(t1==t1_2); // test the equality operator - T2 t2 = T2(); - CGAL_assertion( t2 == T2() ); + + // T2 t2 = T2(); + // CGAL_assertion( t2 == T2() ); + // + // Do not test equality between default initialized tuples, because + // GNU/g++ version 4.1.2 does not default-initialize correctly + // std::tr1::tuple. } void test_prev_next() From a40c0bf6a889f3343244565a19353f6d1aa4152b Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 19 Apr 2012 12:28:12 +0000 Subject: [PATCH 19/47] A branch to extend the CGAL::cpp0x::get function template in --- .../doc_tex/STL_Extension_ref/tuple.tex | 3 +- STL_Extension/include/CGAL/tuple.h | 52 +++++++++++++++++-- .../test/STL_Extension/test_stl_extension.cpp | 21 ++++++-- 3 files changed, 66 insertions(+), 10 deletions(-) diff --git a/STL_Extension/doc_tex/STL_Extension_ref/tuple.tex b/STL_Extension/doc_tex/STL_Extension_ref/tuple.tex index b366e999da4..8689874bea1 100644 --- a/STL_Extension/doc_tex/STL_Extension_ref/tuple.tex +++ b/STL_Extension/doc_tex/STL_Extension_ref/tuple.tex @@ -33,7 +33,8 @@ is taken from Boost. Some free functions part of the standard interface of \ccc{tuple} are also brought in namespace \ccc{CGAL::cpp0x} with using declarations, these are \ccc{make_tuple}, -\ccc{get}, \ccc{tie}. +\ccc{get}, \ccc{tie}. Like in C++0x, the \ccc{get} function template is +specialized so that it can take \ccc{std::pair} as argument. Two standard helper classes are also provided for convenience (\ccc{tuple_size} and \ccc{tuple_element}). \end{ccRefClass} diff --git a/STL_Extension/include/CGAL/tuple.h b/STL_Extension/include/CGAL/tuple.h index 65699b3c76e..c1ab51bde52 100644 --- a/STL_Extension/include/CGAL/tuple.h +++ b/STL_Extension/include/CGAL/tuple.h @@ -27,12 +27,14 @@ #ifndef CGAL_CFG_NO_CPP0X_TUPLE # include -#elif !defined CGAL_CFG_NO_TR1_TUPLE -# include -#else -# include -# include #endif +#ifndef CGAL_CFG_NO_TR1_TUPLE +# include +#endif + +#include +#include +#include namespace CGAL { @@ -68,6 +70,46 @@ struct tuple_element: public boost::tuples::element{}; #endif + +#if defined(CGAL_CFG_NO_CPP0X_TUPLE) // if not C++11 tuple + +//////////////////////////////////////////////////////////// +// // +// Allow CGAL::cpp0x::get(std::pair), if N==0 or N==1. // +// // +// That is already in C++11, but not in TR1 or in Boost // +// // +//////////////////////////////////////////////////////////// +template +struct pair_get; + +template +struct pair_get<0, T1, T2> { + static T1& get(std::pair& pair) { return pair.first; } + static const T1& get(const std::pair& pair) { return pair.first; } +}; // end specialization struct pair_get<0, T2, T2> + +template +struct pair_get<1, T1, T2> { + static T2& get(std::pair& pair) { return pair.second; } + static const T2& get(const std::pair& pair) { return pair.second; } +}; // end specialization struct pair_get<0, T2, T2> + +template +inline typename boost::tuples::element >::type& +get(std::pair& pair) { + return pair_get::get(pair); +} + +template +inline const typename boost::tuples::element >::type& +get(const std::pair& pair) { + return pair_get::get(pair); +} + +#endif // end if not C++11 tuple + + } // cpp0x #ifndef CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES diff --git a/STL_Extension/test/STL_Extension/test_stl_extension.cpp b/STL_Extension/test/STL_Extension/test_stl_extension.cpp index 142fbd51689..75e8bbbb05e 100644 --- a/STL_Extension/test/STL_Extension/test_stl_extension.cpp +++ b/STL_Extension/test/STL_Extension/test_stl_extension.cpp @@ -8110,10 +8110,7 @@ void test_tuple(){ T1 t1=CGAL::cpp0x::make_tuple(1,2); T1 t1_2=CGAL::cpp0x::make_tuple(1,2); - int i1=-1,i2=-1; - CGAL::cpp0x::tie(i1,i2)=t1; - CGAL_assertion( CGAL::cpp0x::get<0>(t1)==i1 ); - CGAL_assertion( CGAL::cpp0x::get<1>(t1)==i2 ); + CGAL_assertion(t1==t1_2); // test the equality operator // T2 t2 = T2(); @@ -8122,6 +8119,22 @@ void test_tuple(){ // Do not test equality between default initialized tuples, because // GNU/g++ version 4.1.2 does not default-initialize correctly // std::tr1::tuple. + + // Test CGAL::cpp0x::tie + int i1=-1,i2=-1; + CGAL::cpp0x::tie(i1,i2)=t1; + CGAL_assertion( CGAL::cpp0x::get<0>(t1)==i1 ); + CGAL_assertion( CGAL::cpp0x::get<1>(t1)==i2 ); + + // Test CGAL::cpp0x::get for a pair + double d = 1; + std::pair pair(-3, &d); + const std::pair const_pair(2, &d); + + assert(CGAL::cpp0x::get<0>(pair) == -3); + assert(CGAL::cpp0x::get<1>(pair) == &d); + assert(CGAL::cpp0x::get<0>(const_pair) == 2); + assert(CGAL::cpp0x::get<1>(const_pair) == &d); } void test_prev_next() From 8d62b4b093827bcd210017dc26b5a144f628b2da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 19 Apr 2012 14:22:41 +0000 Subject: [PATCH 20/47] update changes --- Installation/changes.html | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Installation/changes.html b/Installation/changes.html index 02f0bc7250d..59a783aaeae 100644 --- a/Installation/changes.html +++ b/Installation/changes.html @@ -144,6 +144,12 @@ since CGAL-4.0:

could lead to wrong result when meshing from a 3D image. +

3D Boolean Operations on Nef Polygons Embedded on the Sphere

+
    +
  • Fix a memory leak due to the usage of an internal mechanism that has been replaced by boost::any. This also influences the packages +2D Boolean Operations on Nef Polygons, 3D Boolean Operations on Nef Polyhedra, Convex Decomposition of Polyhedra, and +3D Minkowski Sum of Polyhedra. +

Release 4.0

From 7cc00d2449896f8c2eca48d20ae808e8de4741e1 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 20 Apr 2012 09:29:56 +0000 Subject: [PATCH 21/47] SVG version of the euler fig --- .gitattributes | 1 + .../doc_tex/Polyhedron_ref/fig/euler.svg | 319 ++++++++++++++++++ 2 files changed, 320 insertions(+) create mode 100644 Polyhedron/doc_tex/Polyhedron_ref/fig/euler.svg diff --git a/.gitattributes b/.gitattributes index fa0e3ffdd7b..d689dcc997f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3219,6 +3219,7 @@ Polyhedron/doc_tex/Polyhedron_ref/fig/add_facet.pdf -text svneol=unset#applicati Polyhedron/doc_tex/Polyhedron_ref/fig/add_facet1.gif -text svneol=unset#image/gif Polyhedron/doc_tex/Polyhedron_ref/fig/add_facet2.gif -text svneol=unset#image/gif Polyhedron/doc_tex/Polyhedron_ref/fig/euler.pdf -text svneol=unset#application/pdf +Polyhedron/doc_tex/Polyhedron_ref/fig/euler.svg -text Polyhedron/doc_tex/Polyhedron_ref/fig/euler_center.gif -text svneol=unset#image/gif Polyhedron/doc_tex/Polyhedron_ref/fig/euler_center.pdf -text svneol=unset#application/pdf Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.gif -text svneol=unset#image/gif diff --git a/Polyhedron/doc_tex/Polyhedron_ref/fig/euler.svg b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler.svg new file mode 100644 index 00000000000..84dbd660f59 --- /dev/null +++ b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler.svg @@ -0,0 +1,319 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 41cef5c422b8120d80e41de27d03c1dd7a836a4e Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 20 Apr 2012 09:33:43 +0000 Subject: [PATCH 22/47] Vectorial versions --- .gitattributes | 4 + .../Polyhedron_ref/fig/euler-facet.pdf | Bin 0 -> 9313 bytes .../Polyhedron_ref/fig/euler-facet.svg | 929 +++++++++++++++++ .../Polyhedron_ref/fig/euler-vertex.pdf | Bin 0 -> 10814 bytes .../Polyhedron_ref/fig/euler-vertex.svg | 938 ++++++++++++++++++ 5 files changed, 1871 insertions(+) create mode 100644 Polyhedron/doc_tex/Polyhedron_ref/fig/euler-facet.pdf create mode 100644 Polyhedron/doc_tex/Polyhedron_ref/fig/euler-facet.svg create mode 100644 Polyhedron/doc_tex/Polyhedron_ref/fig/euler-vertex.pdf create mode 100644 Polyhedron/doc_tex/Polyhedron_ref/fig/euler-vertex.svg diff --git a/.gitattributes b/.gitattributes index d689dcc997f..fc340aa0b41 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3218,6 +3218,10 @@ Polyhedron/doc_tex/Polyhedron/idraw/polyhedron.ips -text svneol=unset#applicatio Polyhedron/doc_tex/Polyhedron_ref/fig/add_facet.pdf -text svneol=unset#application/pdf Polyhedron/doc_tex/Polyhedron_ref/fig/add_facet1.gif -text svneol=unset#image/gif Polyhedron/doc_tex/Polyhedron_ref/fig/add_facet2.gif -text svneol=unset#image/gif +Polyhedron/doc_tex/Polyhedron_ref/fig/euler-facet.pdf -text svneol=unset#application/pdf +Polyhedron/doc_tex/Polyhedron_ref/fig/euler-facet.svg -text +Polyhedron/doc_tex/Polyhedron_ref/fig/euler-vertex.pdf -text svneol=unset#application/pdf +Polyhedron/doc_tex/Polyhedron_ref/fig/euler-vertex.svg -text Polyhedron/doc_tex/Polyhedron_ref/fig/euler.pdf -text svneol=unset#application/pdf Polyhedron/doc_tex/Polyhedron_ref/fig/euler.svg -text Polyhedron/doc_tex/Polyhedron_ref/fig/euler_center.gif -text svneol=unset#image/gif diff --git a/Polyhedron/doc_tex/Polyhedron_ref/fig/euler-facet.pdf b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler-facet.pdf new file mode 100644 index 0000000000000000000000000000000000000000..259c5fb3a4822b7944105a7e2597f60423d9aeaf GIT binary patch literal 9313 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 literal 0 HcmV?d00001 diff --git a/Polyhedron/doc_tex/Polyhedron_ref/fig/euler-facet.svg b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler-facet.svg new file mode 100644 index 00000000000..cde3e4a3371 --- /dev/null +++ b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler-facet.svg @@ -0,0 +1,929 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Polyhedron/doc_tex/Polyhedron_ref/fig/euler-vertex.pdf b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler-vertex.pdf new file mode 100644 index 0000000000000000000000000000000000000000..baca524996d78608871a466ea83a55b7d83aff77 GIT binary patch literal 10814 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 Cia50Z literal 0 HcmV?d00001 diff --git a/Polyhedron/doc_tex/Polyhedron_ref/fig/euler-vertex.svg b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler-vertex.svg new file mode 100644 index 00000000000..5201ecd87e1 --- /dev/null +++ b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler-vertex.svg @@ -0,0 +1,938 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 579a606a752d626d3575921d26ec81ace943fa97 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 20 Apr 2012 09:35:35 +0000 Subject: [PATCH 23/47] Rename - to _, to have same naming scheme as .gif files --- .gitattributes | 8 ++++---- .../fig/{euler-facet.pdf => euler_facet.pdf} | Bin .../fig/{euler-facet.svg => euler_facet.svg} | 0 .../fig/{euler-vertex.pdf => euler_vertex.pdf} | Bin .../fig/{euler-vertex.svg => euler_vertex.svg} | 0 5 files changed, 4 insertions(+), 4 deletions(-) rename Polyhedron/doc_tex/Polyhedron_ref/fig/{euler-facet.pdf => euler_facet.pdf} (100%) rename Polyhedron/doc_tex/Polyhedron_ref/fig/{euler-facet.svg => euler_facet.svg} (100%) rename Polyhedron/doc_tex/Polyhedron_ref/fig/{euler-vertex.pdf => euler_vertex.pdf} (100%) rename Polyhedron/doc_tex/Polyhedron_ref/fig/{euler-vertex.svg => euler_vertex.svg} (100%) diff --git a/.gitattributes b/.gitattributes index fc340aa0b41..38d7151d460 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3218,18 +3218,18 @@ Polyhedron/doc_tex/Polyhedron/idraw/polyhedron.ips -text svneol=unset#applicatio Polyhedron/doc_tex/Polyhedron_ref/fig/add_facet.pdf -text svneol=unset#application/pdf Polyhedron/doc_tex/Polyhedron_ref/fig/add_facet1.gif -text svneol=unset#image/gif Polyhedron/doc_tex/Polyhedron_ref/fig/add_facet2.gif -text svneol=unset#image/gif -Polyhedron/doc_tex/Polyhedron_ref/fig/euler-facet.pdf -text svneol=unset#application/pdf -Polyhedron/doc_tex/Polyhedron_ref/fig/euler-facet.svg -text -Polyhedron/doc_tex/Polyhedron_ref/fig/euler-vertex.pdf -text svneol=unset#application/pdf -Polyhedron/doc_tex/Polyhedron_ref/fig/euler-vertex.svg -text Polyhedron/doc_tex/Polyhedron_ref/fig/euler.pdf -text svneol=unset#application/pdf Polyhedron/doc_tex/Polyhedron_ref/fig/euler.svg -text Polyhedron/doc_tex/Polyhedron_ref/fig/euler_center.gif -text svneol=unset#image/gif Polyhedron/doc_tex/Polyhedron_ref/fig/euler_center.pdf -text svneol=unset#application/pdf Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.gif -text svneol=unset#image/gif +Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.pdf -text svneol=unset#application/pdf +Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.svg -text Polyhedron/doc_tex/Polyhedron_ref/fig/euler_loop.gif -text svneol=unset#image/gif Polyhedron/doc_tex/Polyhedron_ref/fig/euler_loop.pdf -text svneol=unset#application/pdf Polyhedron/doc_tex/Polyhedron_ref/fig/euler_vertex.gif -text svneol=unset#image/gif +Polyhedron/doc_tex/Polyhedron_ref/fig/euler_vertex.pdf -text svneol=unset#application/pdf +Polyhedron/doc_tex/Polyhedron_ref/fig/euler_vertex.svg -text Polyhedron/doc_tex/Polyhedron_ref/fig/halfedge.gif -text svneol=unset#image/gif Polyhedron/doc_tex/Polyhedron_ref/fig/halfedge.pdf -text svneol=unset#application/pdf Polyhedron/doc_tex/Polyhedron_ref/fig/halfedge_small.gif -text svneol=unset#image/gif diff --git a/Polyhedron/doc_tex/Polyhedron_ref/fig/euler-facet.pdf b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.pdf similarity index 100% rename from Polyhedron/doc_tex/Polyhedron_ref/fig/euler-facet.pdf rename to Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.pdf diff --git a/Polyhedron/doc_tex/Polyhedron_ref/fig/euler-facet.svg b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.svg similarity index 100% rename from Polyhedron/doc_tex/Polyhedron_ref/fig/euler-facet.svg rename to Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.svg diff --git a/Polyhedron/doc_tex/Polyhedron_ref/fig/euler-vertex.pdf b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler_vertex.pdf similarity index 100% rename from Polyhedron/doc_tex/Polyhedron_ref/fig/euler-vertex.pdf rename to Polyhedron/doc_tex/Polyhedron_ref/fig/euler_vertex.pdf diff --git a/Polyhedron/doc_tex/Polyhedron_ref/fig/euler-vertex.svg b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler_vertex.svg similarity index 100% rename from Polyhedron/doc_tex/Polyhedron_ref/fig/euler-vertex.svg rename to Polyhedron/doc_tex/Polyhedron_ref/fig/euler_vertex.svg From 66ec3ee6b8e5f3e06a952f5288ececf0977a7159 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 20 Apr 2012 10:30:10 +0000 Subject: [PATCH 24/47] I was wrong: get(std::pair) was already in TR1. Strange that it is not in Boost. --- STL_Extension/include/CGAL/tuple.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/STL_Extension/include/CGAL/tuple.h b/STL_Extension/include/CGAL/tuple.h index c1ab51bde52..8088806b939 100644 --- a/STL_Extension/include/CGAL/tuple.h +++ b/STL_Extension/include/CGAL/tuple.h @@ -71,13 +71,14 @@ struct tuple_element: public boost::tuples::element{}; #endif -#if defined(CGAL_CFG_NO_CPP0X_TUPLE) // if not C++11 tuple +#if defined(CGAL_CFG_NO_CPP0X_TUPLE) && defined(CGAL_CFG_NO_TR1_TUPLE) +// If not TR1 or C++11 tuple, we need to add get(std::pair). //////////////////////////////////////////////////////////// // // // Allow CGAL::cpp0x::get(std::pair), if N==0 or N==1. // // // -// That is already in C++11, but not in TR1 or in Boost // +// That is already in TR1 and C++11, but not in Boost. // // // //////////////////////////////////////////////////////////// template From 4c186e9417da06202cad8d1c77f8ae0ef95c9865 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 20 Apr 2012 10:34:06 +0000 Subject: [PATCH 25/47] Oops: std::tr1::get(std::pair) is in --- STL_Extension/include/CGAL/tuple.h | 1 + 1 file changed, 1 insertion(+) diff --git a/STL_Extension/include/CGAL/tuple.h b/STL_Extension/include/CGAL/tuple.h index 8088806b939..698df419e55 100644 --- a/STL_Extension/include/CGAL/tuple.h +++ b/STL_Extension/include/CGAL/tuple.h @@ -30,6 +30,7 @@ #endif #ifndef CGAL_CFG_NO_TR1_TUPLE # include +# include #endif #include From 2f06819c2eb7e2f6d1b95ba732b4ed87f8b42f58 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Fri, 20 Apr 2012 10:52:33 +0000 Subject: [PATCH 26/47] Fix typo --- .../Triangulation_2_ref/Constrained_triangulation_plus_2.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Triangulation_2/doc_tex/Triangulation_2_ref/Constrained_triangulation_plus_2.tex b/Triangulation_2/doc_tex/Triangulation_2_ref/Constrained_triangulation_plus_2.tex index dc6a281517c..71555e721e8 100644 --- a/Triangulation_2/doc_tex/Triangulation_2_ref/Constrained_triangulation_plus_2.tex +++ b/Triangulation_2/doc_tex/Triangulation_2_ref/Constrained_triangulation_plus_2.tex @@ -102,7 +102,7 @@ is \ccc{Context}.} \ccConstructor{Constrained_triangulation_plus_2(const Constrained_triangulation_plus_2& ct);}{Copy constructor.} -\ccConstructor{Constrained_triangulation_plus_2(std::list& lc, +\ccConstructor{Constrained_triangulation_plus_2(std::list& lc, const Geom_traits& t = Geom_traits())} {Introduces and builds a constrained triangulation from the list of constraints \ccc{lc}.} From 7611a198039ebcd724cd0529e4482b7ddb25f7b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 23 Apr 2012 08:13:43 +0000 Subject: [PATCH 27/47] more verbose test --- Number_types/test/Number_types/Root_of_traits.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Number_types/test/Number_types/Root_of_traits.cpp b/Number_types/test/Number_types/Root_of_traits.cpp index 86d1ef54716..a9cb2f5c2a2 100644 --- a/Number_types/test/Number_types/Root_of_traits.cpp +++ b/Number_types/test/Number_types/Root_of_traits.cpp @@ -46,6 +46,7 @@ void test_root_of_traits_for_set(Integer, Rational, FWS){ } int main(){ + std::cout << "Testing with double" << std::endl; CGAL::Test::test_root_of_traits< double , double , double >(); try{// just compile and try to get as far as you can go. @@ -56,6 +57,7 @@ int main(){ #ifdef CGAL_HAS_GMP_ARITHMETIC_KERNEL //TODO: switch to Gmpq { + std::cout << "Testing with GMP" << std::endl; typedef CGAL::GMP_arithmetic_kernel AK; typedef AK::Integer Integer; typedef AK::Rational Rational; @@ -65,6 +67,7 @@ int main(){ #endif #ifdef CGAL_HAS_LEDA_ARITHMETIC_KERNEL { + std::cout << "Testing with LEDA" << std::endl; typedef CGAL::LEDA_arithmetic_kernel AK; typedef AK::Integer Integer; typedef AK::Rational Rational; @@ -74,6 +77,7 @@ int main(){ #endif #ifdef CGAL_HAS_CORE_ARITHMETIC_KERNEL { + std::cout << "Testing with CORE" << std::endl; typedef CGAL::CORE_arithmetic_kernel AK; typedef AK::Integer Integer; typedef AK::Rational Rational; @@ -82,6 +86,7 @@ int main(){ } #endif { + std::cout << "Testing with MP_Float" << std::endl; typedef CGAL::MP_Float_arithmetic_kernel AK; typedef AK::Integer Integer; typedef AK::Rational Rational; From 4fabccd1115341a9c2306280e59e6c9a71052e88 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 23 Apr 2012 13:18:04 +0000 Subject: [PATCH 28/47] updated crontab (automated commit) --- .../infrastructure/cgal.geometryfactory.com/crontab | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Maintenance/infrastructure/cgal.geometryfactory.com/crontab b/Maintenance/infrastructure/cgal.geometryfactory.com/crontab index 175d6bc0540..259c5732ad1 100644 --- a/Maintenance/infrastructure/cgal.geometryfactory.com/crontab +++ b/Maintenance/infrastructure/cgal.geometryfactory.com/crontab @@ -11,7 +11,7 @@ # Update testsuite result pages -5,15,25,35,45,55 * * * * cd $HOME/CGAL/collect_and_public_testresults; ./treat_result_collection +#5,15,25,35,45,55 * * * * cd $HOME/CGAL/collect_and_public_testresults; ./treat_result_collection # Create internal release # The script also updates the manual tools. @@ -20,7 +20,7 @@ 0 21 * * Fri cd $HOME/CGAL/create_internal_release; $HOME/bin/create_release $HOME/CGAL/next --public --do-it # "next" + candidates -0 21 * * Mon,Tue,Wed,Thu,Sun cd $HOME/CGAL/create_internal_release; $HOME/bin/create_release $HOME/CGAL/next $HOME/CGAL/candidate-packages --public --do-it +#0 21 * * Mon,Tue,Wed,Thu,Sun cd $HOME/CGAL/create_internal_release; $HOME/bin/create_release $HOME/CGAL/next $HOME/CGAL/candidate-packages --public --do-it # - on trunk #0 21 * * Sat cd $HOME/CGAL/create_internal_release; $HOME/bin/create_release $HOME/CGAL/trunk --public --do-it @@ -31,10 +31,10 @@ #30 21 * * * grep 'conflicts with' $HOME/CGAL/create_internal_release/create_release.log.`date '+%Y-%m-%d'`* --no-filename # Try to launch the test suite, every 10mn, from 21:00 to 22:50 -*/10 21-22 * * * $HOME/CGAL/Scripts/developer_scripts/autotest_cgal_with_cmake +#*/10 21-22 * * * $HOME/CGAL/Scripts/developer_scripts/autotest_cgal_with_cmake # Manual Test suite, at 9:40pm -40 21 * * * cd $HOME/CGAL/releases-and-testsuites-with-cmake/CGAL-I/doc_tex; nice -19 $HOME/bin/cgal_manual -testsuite || true +#40 21 * * * cd $HOME/CGAL/releases-and-testsuites-with-cmake/CGAL-I/doc_tex; nice -19 $HOME/bin/cgal_manual -testsuite || true # Dump the crontab to SVN every hour at minute 18 18 * * * * $HOME/bin/dump_crontab From 5acc79e554415fe4385926e2b0e8699db6dc388d Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 23 Apr 2012 16:54:47 +0000 Subject: [PATCH 29/47] Add comments to explain what happens with the use of Default Dt_3 --- Triangulation_3/include/CGAL/Delaunay_triangulation_3.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Triangulation_3/include/CGAL/Delaunay_triangulation_3.h b/Triangulation_3/include/CGAL/Delaunay_triangulation_3.h index 79a8a521374..894fee0afbe 100644 --- a/Triangulation_3/include/CGAL/Delaunay_triangulation_3.h +++ b/Triangulation_3/include/CGAL/Delaunay_triangulation_3.h @@ -47,12 +47,18 @@ namespace CGAL { +// Here is the declaration of a class template with three arguments, one +// having a default value. There is no definition of that class template. template < class Gt, class Tds_ = Default, class Location_policy = Default > class Delaunay_triangulation_3; +// There is a specialization Delaunay_triangulation_3 +// defined in . +// Here is the specialization Delaunay_triangulation_3, with two +// arguments, that is if Location_policy being the default value 'Default'. template < class Gt, class Tds_ > class Delaunay_triangulation_3 : public Triangulation_3 From a8473dfe083418d42bea7eb37474c6e170202988 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 23 Apr 2012 18:03:14 +0000 Subject: [PATCH 30/47] Document the destructor is ugly and useless --- .../Constrained_triangulation_plus_2.tex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Triangulation_2/doc_tex/Triangulation_2_ref/Constrained_triangulation_plus_2.tex b/Triangulation_2/doc_tex/Triangulation_2_ref/Constrained_triangulation_plus_2.tex index 71555e721e8..2f8d4476d4b 100644 --- a/Triangulation_2/doc_tex/Triangulation_2_ref/Constrained_triangulation_plus_2.tex +++ b/Triangulation_2/doc_tex/Triangulation_2_ref/Constrained_triangulation_plus_2.tex @@ -119,9 +119,9 @@ $\left[\right.$\ccc{first}, \ccc{last}$\left.\right)$. is \ccc{Constraint}. } -\ccFunction{void ~ctp();} -{Destructor. All vertices and faces are deleted. -The constraint hierarchy is deleted.} +%\ccFunction{void ~ctp();} +%{Destructor. All vertices and faces are deleted. +%The constraint hierarchy is deleted.} From a4be5cfc47202b7b5ab8cf3fd8cacefa01de9198 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 23 Apr 2012 18:18:04 +0000 Subject: [PATCH 31/47] updated crontab (automated commit) --- .../infrastructure/cgal.geometryfactory.com/crontab | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Maintenance/infrastructure/cgal.geometryfactory.com/crontab b/Maintenance/infrastructure/cgal.geometryfactory.com/crontab index 259c5732ad1..756c3bdd46d 100644 --- a/Maintenance/infrastructure/cgal.geometryfactory.com/crontab +++ b/Maintenance/infrastructure/cgal.geometryfactory.com/crontab @@ -16,11 +16,10 @@ # Create internal release # The script also updates the manual tools. # "next" alone -#0 21 * * Mon,Tue,Wed,Thu,Fri,Sun cd $HOME/CGAL/create_internal_release; $HOME/bin/create_release $HOME/CGAL/next --public --do-it +0 21 * * Fri,Sat cd $HOME/CGAL/create_internal_release; $HOME/bin/create_release $HOME/CGAL/next --public --do-it -0 21 * * Fri cd $HOME/CGAL/create_internal_release; $HOME/bin/create_release $HOME/CGAL/next --public --do-it # "next" + candidates -#0 21 * * Mon,Tue,Wed,Thu,Sun cd $HOME/CGAL/create_internal_release; $HOME/bin/create_release $HOME/CGAL/next $HOME/CGAL/candidate-packages --public --do-it +0 21 * * Mon,Tue,Wed,Thu,Sun cd $HOME/CGAL/create_internal_release; $HOME/bin/create_release $HOME/CGAL/next $HOME/CGAL/candidate-packages --public --do-it # - on trunk #0 21 * * Sat cd $HOME/CGAL/create_internal_release; $HOME/bin/create_release $HOME/CGAL/trunk --public --do-it @@ -28,13 +27,13 @@ #0 21 * * Sat cd $HOME/CGAL/create_internal_release-3.9-branch; $HOME/bin/create_release $HOME/CGAL/CGAL-3.9-branch --public --do-it # A test that does not work -#30 21 * * * grep 'conflicts with' $HOME/CGAL/create_internal_release/create_release.log.`date '+%Y-%m-%d'`* --no-filename +30 21 * * * grep 'conflicts with' $HOME/CGAL/create_internal_release/create_release.log.`date '+%Y-%m-%d'`* --no-filename # Try to launch the test suite, every 10mn, from 21:00 to 22:50 -#*/10 21-22 * * * $HOME/CGAL/Scripts/developer_scripts/autotest_cgal_with_cmake +*/10 21-22 * * * $HOME/CGAL/Scripts/developer_scripts/autotest_cgal_with_cmake # Manual Test suite, at 9:40pm -#40 21 * * * cd $HOME/CGAL/releases-and-testsuites-with-cmake/CGAL-I/doc_tex; nice -19 $HOME/bin/cgal_manual -testsuite || true +40 21 * * * cd $HOME/CGAL/releases-and-testsuites-with-cmake/CGAL-I/doc_tex; nice -19 $HOME/bin/cgal_manual -testsuite || true # Dump the crontab to SVN every hour at minute 18 18 * * * * $HOME/bin/dump_crontab From 6c705ab777725d0aa6e5e8b57277003d6ac04e59 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 23 Apr 2012 22:17:15 +0000 Subject: [PATCH 32/47] Fix the test One cannot expect exact intersections computations results when the kernel is not. This patch fixes the test: the equality between the result and the expected result is tested with an epsilon unless the kernel has exact constructions. --- .../triangle_other_intersection_test.cpp | 273 +++++++++--------- 1 file changed, 139 insertions(+), 134 deletions(-) diff --git a/Intersections_3/test/Intersections_3/triangle_other_intersection_test.cpp b/Intersections_3/test/Intersections_3/triangle_other_intersection_test.cpp index 016e772b0b5..6f29a180e18 100644 --- a/Intersections_3/test/Intersections_3/triangle_other_intersection_test.cpp +++ b/Intersections_3/test/Intersections_3/triangle_other_intersection_test.cpp @@ -216,15 +216,20 @@ void random_test() // Precomputed results test // ----------------------------------- template -bool test_aux(const Triangle t, +bool test_aux(bool is_kernel_exact, + const Triangle t, const Query& q, const std::string& name, - const Result& expected) + const Result& expected, + double sq_espilon = 1e-20) { CGAL::Object object = CGAL::intersection(t,q); const Result* pr = CGAL::object_cast(&object); - if ( (NULL != pr) && (expected == *pr) ) + if ( (NULL != pr) && + (is_kernel_exact ? + (expected == *pr) : + CGAL::to_double(CGAL::squared_distance(expected, *pr)) < sq_espilon ) ) { return true; } @@ -243,7 +248,7 @@ bool test_aux(const Triangle t, } template -bool test() +bool test(bool is_kernel_exact = true) { // types typedef typename K::FT FT; @@ -281,10 +286,10 @@ bool test() Segment s32(p3,p2); Segment s31(p3,p1); - bool b = test_aux(t,s12,"t-s12",s12); - b &= test_aux(t,s21,"t-s21",s21); - b &= test_aux(t,s13,"t-s13",s13); - b &= test_aux(t,s23,"t-s23",s23); + bool b = test_aux(is_kernel_exact,t,s12,"t-s12",s12); + b &= test_aux(is_kernel_exact,t,s21,"t-s21",s21); + b &= test_aux(is_kernel_exact,t,s13,"t-s13",s13); + b &= test_aux(is_kernel_exact,t,s23,"t-s23",s23); // Inside points Point p4(FT(0.5), FT(0.5), FT(0.)); @@ -318,30 +323,30 @@ bool test() Segment s78(p7,p8); Segment s87(p8,p7); - b &= test_aux(t,s14,"t-s14",s14); - b &= test_aux(t,s41,"t-s41",s41); - b &= test_aux(t,s24,"t-s24",s24); - b &= test_aux(t,s42,"t-s42",s42); - b &= test_aux(t,s15,"t-s15",s15); - b &= test_aux(t,s25,"t-s25",s25); - b &= test_aux(t,s34,"t-s34",s34); - b &= test_aux(t,s35,"t-s35",s35); - b &= test_aux(t,s36,"t-s36",s36); - b &= test_aux(t,s45,"t-s45",s45); - b &= test_aux(t,s16,"t-s16",s16); - b &= test_aux(t,s26,"t-s26",s26); - b &= test_aux(t,s62,"t-s62",s62); - b &= test_aux(t,s46,"t-s46",s46); - b &= test_aux(t,s65,"t-s65",s65); - b &= test_aux(t,s64,"t-s64",s64); - b &= test_aux(t,s48,"t-s48",s48); - b &= test_aux(t,s56,"t-s56",s56); - b &= test_aux(t,s17,"t-t17",s17); - b &= test_aux(t,s67,"t-t67",s67); - b &= test_aux(t,s68,"t-s68",s68); - b &= test_aux(t,s86,"t-s86",s86); - b &= test_aux(t,s78,"t-t78",s78); - b &= test_aux(t,s87,"t-t87",s87); + b &= test_aux(is_kernel_exact,t,s14,"t-s14",s14); + b &= test_aux(is_kernel_exact,t,s41,"t-s41",s41); + b &= test_aux(is_kernel_exact,t,s24,"t-s24",s24); + b &= test_aux(is_kernel_exact,t,s42,"t-s42",s42); + b &= test_aux(is_kernel_exact,t,s15,"t-s15",s15); + b &= test_aux(is_kernel_exact,t,s25,"t-s25",s25); + b &= test_aux(is_kernel_exact,t,s34,"t-s34",s34); + b &= test_aux(is_kernel_exact,t,s35,"t-s35",s35); + b &= test_aux(is_kernel_exact,t,s36,"t-s36",s36); + b &= test_aux(is_kernel_exact,t,s45,"t-s45",s45); + b &= test_aux(is_kernel_exact,t,s16,"t-s16",s16); + b &= test_aux(is_kernel_exact,t,s26,"t-s26",s26); + b &= test_aux(is_kernel_exact,t,s62,"t-s62",s62); + b &= test_aux(is_kernel_exact,t,s46,"t-s46",s46); + b &= test_aux(is_kernel_exact,t,s65,"t-s65",s65); + b &= test_aux(is_kernel_exact,t,s64,"t-s64",s64); + b &= test_aux(is_kernel_exact,t,s48,"t-s48",s48); + b &= test_aux(is_kernel_exact,t,s56,"t-s56",s56); + b &= test_aux(is_kernel_exact,t,s17,"t-t17",s17); + b &= test_aux(is_kernel_exact,t,s67,"t-t67",s67); + b &= test_aux(is_kernel_exact,t,s68,"t-s68",s68); + b &= test_aux(is_kernel_exact,t,s86,"t-s86",s86); + b &= test_aux(is_kernel_exact,t,s78,"t-t78",s78); + b &= test_aux(is_kernel_exact,t,s87,"t-t87",s87); // Outside points (in triangle plane) Point pA(FT(-0.5), FT(1.), FT(0.5)); @@ -362,17 +367,17 @@ bool test() Segment s1F(p1,pF); Segment sF6(pF,p6); - b &= test_aux(t,sAB,"t-sAB",p2); - b &= test_aux(t,sBC,"t-sBC",s46); - b &= test_aux(t,s2E,"t-s2E",s26); - b &= test_aux(t,sE2,"t-sE2",s62); - b &= test_aux(t,s2A,"t-s2A",p2); - b &= test_aux(t,s6E,"t-s6E",p6); - b &= test_aux(t,sB8,"t-sB8",s48); - b &= test_aux(t,sC8,"t-sC8",s68); - b &= test_aux(t,s8C,"t-s8C",s86); - b &= test_aux(t,s1F,"t-s1F",s13); - b &= test_aux(t,sF6,"t-sF6",s36); + b &= test_aux(is_kernel_exact,t,sAB,"t-sAB",p2); + b &= test_aux(is_kernel_exact,t,sBC,"t-sBC",s46); + b &= test_aux(is_kernel_exact,t,s2E,"t-s2E",s26); + b &= test_aux(is_kernel_exact,t,sE2,"t-sE2",s62); + b &= test_aux(is_kernel_exact,t,s2A,"t-s2A",p2); + b &= test_aux(is_kernel_exact,t,s6E,"t-s6E",p6); + b &= test_aux(is_kernel_exact,t,sB8,"t-sB8",s48); + b &= test_aux(is_kernel_exact,t,sC8,"t-sC8",s68); + b &= test_aux(is_kernel_exact,t,s8C,"t-s8C",s86); + b &= test_aux(is_kernel_exact,t,s1F,"t-s1F",s13); + b &= test_aux(is_kernel_exact,t,sF6,"t-sF6",s36); // Outside triangle plane Point pa(FT(0.), FT(0.), FT(0.)); @@ -386,11 +391,11 @@ bool test() Segment sa8(pa,p8); Segment sb2(pb,p2); - b &= test_aux(t,sab,"t-sab",p1); - b &= test_aux(t,sac,"t-sac",p6); - b &= test_aux(t,sae,"t-sae",p8); - b &= test_aux(t,sa8,"t-sa8",p8); - b &= test_aux(t,sb2,"t-sb2",p2); + b &= test_aux(is_kernel_exact,t,sab,"t-sab",p1); + b &= test_aux(is_kernel_exact,t,sac,"t-sac",p6); + b &= test_aux(is_kernel_exact,t,sae,"t-sae",p8); + b &= test_aux(is_kernel_exact,t,sa8,"t-sa8",p8); + b &= test_aux(is_kernel_exact,t,sb2,"t-sb2",p2); // ----------------------------------- // ray queries @@ -401,10 +406,10 @@ bool test() Ray r13(p1,p3); Ray r23(p2,p3); - b &= test_aux(t,r12,"t-r12",s12); - b &= test_aux(t,r21,"t-r21",s21); - b &= test_aux(t,r13,"t-r13",s13); - b &= test_aux(t,r23,"t-r23",s23); + b &= test_aux(is_kernel_exact,t,r12,"t-r12",s12); + b &= test_aux(is_kernel_exact,t,r21,"t-r21",s21); + b &= test_aux(is_kernel_exact,t,r13,"t-r13",s13); + b &= test_aux(is_kernel_exact,t,r23,"t-r23",s23); // In triangle Point p9_(FT(0.), FT(0.5), FT(0.5)); @@ -432,26 +437,26 @@ bool test() Ray r68(p6,p8); Segment r89_res(p8,p9_); - b &= test_aux(t,r14,"t-r14",s12); - b &= test_aux(t,r41,"t-r41",s41); - b &= test_aux(t,r24,"t-r24",s21); - b &= test_aux(t,r42,"t-r42",s42); - b &= test_aux(t,r15,"t-r15",s15); - b &= test_aux(t,r25,"t-r25",s23); - b &= test_aux(t,r34,"t-r34",s34); - b &= test_aux(t,r35,"t-r35",s32); - b &= test_aux(t,r36,"t-r36",s31); - b &= test_aux(t,r45,"t-r45",s45); - b &= test_aux(t,r16,"t-r16",s13); - b &= test_aux(t,r26,"t-r26",s26); - b &= test_aux(t,r62,"t-r62",s62); - b &= test_aux(t,r46,"t-r46",s46); - b &= test_aux(t,r48,"t-r48",s46); - b &= test_aux(t,r56,"t-r56",s56); - b &= test_aux(t,r47,"t-r47",s45); - b &= test_aux(t,r89,"t-t89",r89_res); - b &= test_aux(t,r68,"t-r68",s64); - b &= test_aux(t,r86,"t-r86",s86); + b &= test_aux(is_kernel_exact,t,r14,"t-r14",s12); + b &= test_aux(is_kernel_exact,t,r41,"t-r41",s41); + b &= test_aux(is_kernel_exact,t,r24,"t-r24",s21); + b &= test_aux(is_kernel_exact,t,r42,"t-r42",s42); + b &= test_aux(is_kernel_exact,t,r15,"t-r15",s15); + b &= test_aux(is_kernel_exact,t,r25,"t-r25",s23); + b &= test_aux(is_kernel_exact,t,r34,"t-r34",s34); + b &= test_aux(is_kernel_exact,t,r35,"t-r35",s32); + b &= test_aux(is_kernel_exact,t,r36,"t-r36",s31); + b &= test_aux(is_kernel_exact,t,r45,"t-r45",s45); + b &= test_aux(is_kernel_exact,t,r16,"t-r16",s13); + b &= test_aux(is_kernel_exact,t,r26,"t-r26",s26); + b &= test_aux(is_kernel_exact,t,r62,"t-r62",s62); + b &= test_aux(is_kernel_exact,t,r46,"t-r46",s46); + b &= test_aux(is_kernel_exact,t,r48,"t-r48",s46); + b &= test_aux(is_kernel_exact,t,r56,"t-r56",s56); + b &= test_aux(is_kernel_exact,t,r47,"t-r47",s45); + b &= test_aux(is_kernel_exact,t,r89,"t-t89",r89_res); + b &= test_aux(is_kernel_exact,t,r68,"t-r68",s64); + b &= test_aux(is_kernel_exact,t,r86,"t-r86",s86); // Outside points (in triangre prane) @@ -467,17 +472,17 @@ bool test() Ray r1F(p1,pF); Ray rF6(pF,p6); - b &= test_aux(t,rAB,"t-rAB",p2); - b &= test_aux(t,rBC,"t-rBC",s46); - b &= test_aux(t,r2E,"t-r2E",s26); - b &= test_aux(t,rE2,"t-rE2",s62); - b &= test_aux(t,r2A,"t-r2A",p2); - b &= test_aux(t,r6E,"t-r6E",p6); - b &= test_aux(t,rB8,"t-rB8",s46); - b &= test_aux(t,rC8,"t-rC8",s64); - b &= test_aux(t,r8C,"t-r8C",s86); - b &= test_aux(t,r1F,"t-r1F",s13); - b &= test_aux(t,rF6,"t-rF6",s31); + b &= test_aux(is_kernel_exact,t,rAB,"t-rAB",p2); + b &= test_aux(is_kernel_exact,t,rBC,"t-rBC",s46); + b &= test_aux(is_kernel_exact,t,r2E,"t-r2E",s26); + b &= test_aux(is_kernel_exact,t,rE2,"t-rE2",s62); + b &= test_aux(is_kernel_exact,t,r2A,"t-r2A",p2); + b &= test_aux(is_kernel_exact,t,r6E,"t-r6E",p6); + b &= test_aux(is_kernel_exact,t,rB8,"t-rB8",s46); + b &= test_aux(is_kernel_exact,t,rC8,"t-rC8",s64); + b &= test_aux(is_kernel_exact,t,r8C,"t-r8C",s86); + b &= test_aux(is_kernel_exact,t,r1F,"t-r1F",s13); + b &= test_aux(is_kernel_exact,t,rF6,"t-rF6",s31); // Outside triangle plane Ray rab(pa,pb); @@ -486,11 +491,11 @@ bool test() Ray ra8(pa,p8); Ray rb2(pb,p2); - b &= test_aux(t,rab,"t-rab",p1); - b &= test_aux(t,rac,"t-rac",p6); - b &= test_aux(t,rae,"t-rae",p8); - b &= test_aux(t,ra8,"t-ra8",p8); - b &= test_aux(t,rb2,"t-rb2",p2); + b &= test_aux(is_kernel_exact,t,rab,"t-rab",p1); + b &= test_aux(is_kernel_exact,t,rac,"t-rac",p6); + b &= test_aux(is_kernel_exact,t,rae,"t-rae",p8); + b &= test_aux(is_kernel_exact,t,ra8,"t-ra8",p8); + b &= test_aux(is_kernel_exact,t,rb2,"t-rb2",p2); // ----------------------------------- // Line queries @@ -501,10 +506,10 @@ bool test() Line l13(p1,p3); Line l23(p2,p3); - b &= test_aux(t,l12,"t-l12",s12); - b &= test_aux(t,l21,"t-l21",s21); - b &= test_aux(t,l13,"t-l13",s13); - b &= test_aux(t,l23,"t-l23",s23); + b &= test_aux(is_kernel_exact,t,l12,"t-l12",s12); + b &= test_aux(is_kernel_exact,t,l21,"t-l21",s21); + b &= test_aux(is_kernel_exact,t,l13,"t-l13",s13); + b &= test_aux(is_kernel_exact,t,l23,"t-l23",s23); // In triangle Line l14(p1,p4); @@ -530,26 +535,26 @@ bool test() Segment l89_res(p1,p9_); - b &= test_aux(t,l14,"t-l14",s12); - b &= test_aux(t,l41,"t-l41",s21); - b &= test_aux(t,l24,"t-l24",s21); - b &= test_aux(t,l42,"t-l42",s12); - b &= test_aux(t,l15,"t-l15",s15); - b &= test_aux(t,l25,"t-l25",s23); - b &= test_aux(t,l34,"t-l34",s34); - b &= test_aux(t,l35,"t-l35",s32); - b &= test_aux(t,l36,"t-l36",s31); - b &= test_aux(t,l45,"t-l45",s45); - b &= test_aux(t,l16,"t-l16",s13); - b &= test_aux(t,l26,"t-l26",s26); - b &= test_aux(t,l62,"t-l62",s62); - b &= test_aux(t,l46,"t-l46",s46); - b &= test_aux(t,l48,"t-l48",s46); - b &= test_aux(t,l56,"t-l56",s56); - b &= test_aux(t,l47,"t-l47",s45); - b &= test_aux(t,l89,"t-t89",l89_res); - b &= test_aux(t,l68,"t-l68",s64); - b &= test_aux(t,l86,"t-l86",s46); + b &= test_aux(is_kernel_exact,t,l14,"t-l14",s12); + b &= test_aux(is_kernel_exact,t,l41,"t-l41",s21); + b &= test_aux(is_kernel_exact,t,l24,"t-l24",s21); + b &= test_aux(is_kernel_exact,t,l42,"t-l42",s12); + b &= test_aux(is_kernel_exact,t,l15,"t-l15",s15); + b &= test_aux(is_kernel_exact,t,l25,"t-l25",s23); + b &= test_aux(is_kernel_exact,t,l34,"t-l34",s34); + b &= test_aux(is_kernel_exact,t,l35,"t-l35",s32); + b &= test_aux(is_kernel_exact,t,l36,"t-l36",s31); + b &= test_aux(is_kernel_exact,t,l45,"t-l45",s45); + b &= test_aux(is_kernel_exact,t,l16,"t-l16",s13); + b &= test_aux(is_kernel_exact,t,l26,"t-l26",s26); + b &= test_aux(is_kernel_exact,t,l62,"t-l62",s62); + b &= test_aux(is_kernel_exact,t,l46,"t-l46",s46); + b &= test_aux(is_kernel_exact,t,l48,"t-l48",s46); + b &= test_aux(is_kernel_exact,t,l56,"t-l56",s56); + b &= test_aux(is_kernel_exact,t,l47,"t-l47",s45); + b &= test_aux(is_kernel_exact,t,l89,"t-t89",l89_res); + b &= test_aux(is_kernel_exact,t,l68,"t-l68",s64); + b &= test_aux(is_kernel_exact,t,l86,"t-l86",s46); // Outside points (in triangle plane) @@ -565,17 +570,17 @@ bool test() Line l1F(p1,pF); Line lF6(pF,p6); - b &= test_aux(t,lAB,"t-lAB",p2); - b &= test_aux(t,lBC,"t-lBC",s46); - b &= test_aux(t,l2E,"t-l2E",s26); - b &= test_aux(t,lE2,"t-lE2",s62); - b &= test_aux(t,l2A,"t-l2A",p2); - b &= test_aux(t,l6E,"t-l6E",s26); - b &= test_aux(t,lB8,"t-lB8",s46); - b &= test_aux(t,lC8,"t-lC8",s64); - b &= test_aux(t,l8C,"t-l8C",s46); - b &= test_aux(t,l1F,"t-l1F",s13); - b &= test_aux(t,lF6,"t-lF6",s31); + b &= test_aux(is_kernel_exact,t,lAB,"t-lAB",p2); + b &= test_aux(is_kernel_exact,t,lBC,"t-lBC",s46); + b &= test_aux(is_kernel_exact,t,l2E,"t-l2E",s26); + b &= test_aux(is_kernel_exact,t,lE2,"t-lE2",s62); + b &= test_aux(is_kernel_exact,t,l2A,"t-l2A",p2); + b &= test_aux(is_kernel_exact,t,l6E,"t-l6E",s26); + b &= test_aux(is_kernel_exact,t,lB8,"t-lB8",s46); + b &= test_aux(is_kernel_exact,t,lC8,"t-lC8",s64); + b &= test_aux(is_kernel_exact,t,l8C,"t-l8C",s46); + b &= test_aux(is_kernel_exact,t,l1F,"t-l1F",s13); + b &= test_aux(is_kernel_exact,t,lF6,"t-lF6",s31); // Outside triangle plane Line lab(pa,pb); @@ -584,11 +589,11 @@ bool test() Line la8(pa,p8); Line lb2(pb,p2); - b &= test_aux(t,lab,"t-lab",p1); - b &= test_aux(t,lac,"t-lac",p6); - b &= test_aux(t,lae,"t-lae",p8); - b &= test_aux(t,la8,"t-la8",p8); - b &= test_aux(t,lb2,"t-lb2",p2); + b &= test_aux(is_kernel_exact,t,lab,"t-lab",p1); + b &= test_aux(is_kernel_exact,t,lac,"t-lac",p6); + b &= test_aux(is_kernel_exact,t,lae,"t-lae",p8); + b &= test_aux(is_kernel_exact,t,la8,"t-la8",p8); + b &= test_aux(is_kernel_exact,t,lb2,"t-lb2",p2); return b; @@ -606,22 +611,22 @@ int main() // ----------------------------------- std::cout << "Test precomputed intersection results" << std::endl; std::cout << "\tTesting with Simple_cartesian..." << std::endl ; - bool b = test(); + bool b = test(false); std::cout << "\tTesting with Simple_cartesian..." << std::endl ; - b &= test(); + b &= test(false); std::cout << "\tTesting with Cartesian..." << std::endl ; - b &= test(); + b &= test(false); std::cout << "\tTesting with Cartesian..." << std::endl ; - b &= test(); + b &= test(false); std::cout << "\tTesting with Exact_predicates_inexact_constructions_kernel..." << std::endl ; - b &= test(); + b &= test(false); std::cout << "\tTesting with Exact_predicates_exact_constructions_kernel..." << std::endl ; - b &= test(); + b &= test(true); //test with a coplanar segment b &= CGAL::intersection( Epec::Segment_3(Epec::Point_3(0.125, 0, -0.125),Epec::Point_3(0.25, 0, -0.125) ), From f2ed350303600e624fe912be8750c7460ce68eb8 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 23 Apr 2012 22:18:02 +0000 Subject: [PATCH 33/47] updated crontab (automated commit) --- Maintenance/infrastructure/cgal.geometryfactory.com/crontab | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maintenance/infrastructure/cgal.geometryfactory.com/crontab b/Maintenance/infrastructure/cgal.geometryfactory.com/crontab index 756c3bdd46d..19e04f3930f 100644 --- a/Maintenance/infrastructure/cgal.geometryfactory.com/crontab +++ b/Maintenance/infrastructure/cgal.geometryfactory.com/crontab @@ -27,7 +27,7 @@ #0 21 * * Sat cd $HOME/CGAL/create_internal_release-3.9-branch; $HOME/bin/create_release $HOME/CGAL/CGAL-3.9-branch --public --do-it # A test that does not work -30 21 * * * grep 'conflicts with' $HOME/CGAL/create_internal_release/create_release.log.`date '+%Y-%m-%d'`* --no-filename +#30 21 * * * grep 'conflicts with' $HOME/CGAL/create_internal_release/create_release.log.`date '+%Y-%m-%d'`* --no-filename # Try to launch the test suite, every 10mn, from 21:00 to 22:50 */10 21-22 * * * $HOME/CGAL/Scripts/developer_scripts/autotest_cgal_with_cmake From 00b8a700d946e9196683bb3748d4345f44a0536f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20M=C3=B6ller?= Date: Tue, 24 Apr 2012 15:46:04 +0000 Subject: [PATCH 34/47] Added the two packages with fixed memory leaks, this also covers the geninfo leak. --- Installation/changes.html | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Installation/changes.html b/Installation/changes.html index 02f0bc7250d..bfd5047e00c 100644 --- a/Installation/changes.html +++ b/Installation/changes.html @@ -108,6 +108,16 @@ David A. Wheeler's 'SLOCCount'
, restricted to the include/CGAL/
  • Minor bugfix.
+ +

Surface Mesh Parameterization

+
    +
  • Fixed a memory leak.
  • +
+ +

2D Arrangement

+
    +
  • Fixed several memory leaks.
  • +

Release 4.0.1

From f7e9319d4cee6a5216f678b14977d45300fed172 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 24 Apr 2012 16:00:09 +0000 Subject: [PATCH 35/47] Move Philip's additions to the section about 4.0.1 --- Installation/changes.html | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/Installation/changes.html b/Installation/changes.html index 0f8b011f391..8b6a253da3f 100644 --- a/Installation/changes.html +++ b/Installation/changes.html @@ -109,17 +109,6 @@ David A. Wheeler's 'SLOCCount', restricted to the include/CGAL/
  • Minor bugfix.
  • -

    Surface Mesh Parameterization

    -
      -
    • Fixed a memory leak.
    • -
    - -

    2D Arrangement

    -
      -
    • Fixed several memory leaks.
    • -
    - -

    Release 4.0.1

    @@ -160,6 +149,18 @@ since CGAL-4.0:

    2D Boolean Operations on Nef Polygons, 3D Boolean Operations on Nef Polyhedra, Convex Decomposition of Polyhedra, and 3D Minkowski Sum of Polyhedra. + +

    Surface Mesh Parameterization

    +
      +
    • Fixed a memory leak.
    • +
    + +

    2D Arrangement

    +
      +
    • Fixed several memory leaks.
    • +
    +
    +

    Release 4.0

    From 05864a04d36ae2ee293dcfd05d0363f48078d82d Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 25 Apr 2012 11:48:29 +0000 Subject: [PATCH 36/47] Trivially add compatibility with Boost Meta-Programming Library (MPL) Boost MPL "Metafunction" concept just requires the nested type named "type". --- Kernel_23/include/CGAL/Kernel_traits.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Kernel_23/include/CGAL/Kernel_traits.h b/Kernel_23/include/CGAL/Kernel_traits.h index 065b32dd94a..2ab73d5a12a 100644 --- a/Kernel_23/include/CGAL/Kernel_traits.h +++ b/Kernel_23/include/CGAL/Kernel_traits.h @@ -31,6 +31,7 @@ template struct Kernel_traits { typedef typename T::R Kernel; + typedef Kernel type; }; } // end namespace CGAL From 3268028b2b6b346aea3b8136dab8ad06f85dda87 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 1 May 2012 08:39:22 +0000 Subject: [PATCH 37/47] fix whitespace --- .../doc_tex/Surface_reconstruction_points_3/PkgDescription.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/PkgDescription.tex b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/PkgDescription.tex index 08859fd7c30..d2a19d5f902 100644 --- a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/PkgDescription.tex +++ b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/PkgDescription.tex @@ -2,7 +2,7 @@ \ccPkgHowToCiteCgal{cgal:asg-srps-12} \ccPkgSummary{ This \cgal\ package implements a surface reconstruction method: Poisson Surface Reconstruction. It takes as input a set of points with oriented normals and computes an implicit function. The \cgal\ surface mesh generator can then be used to extract an iso-surface from this function. } % -\ccPkgDependsOn{\ccThirdPartyEigen or \ccThirdPartyTaucs} +\ccPkgDependsOn{\ccThirdPartyEigen\ or \ccThirdPartyTaucs} \ccPkgIntroducedInCGAL{3.5} \ccPkgLicense{\ccLicenseGPL} \ccPkgDemo{Surface Reconstruction}{surface_reconstruction_points_3.zip} From 8ea761f6e065859ce4a91b977bd3b02a02557676 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 1 May 2012 10:45:49 +0000 Subject: [PATCH 38/47] example use eigen by default instead of Taucs --- .../CMakeLists.txt | 27 +++------- .../poisson_reconstruction.cpp | 50 ++++++++++++------- 2 files changed, 41 insertions(+), 36 deletions(-) diff --git a/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/CMakeLists.txt b/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/CMakeLists.txt index c52d576622a..2ed2390944e 100644 --- a/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/CMakeLists.txt +++ b/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/CMakeLists.txt @@ -55,35 +55,24 @@ if ( CGAL_FOUND ) find_package(Eigen3 3.0.91) #(requires 3.1.0-alpha1 or greater) - if (NOT EIGEN3_FOUND) - find_package(TAUCS) - if(TAUCS_FOUND) - include( ${TAUCS_USE_FILE} ) - endif(TAUCS_FOUND) - else() + if (EIGEN3_FOUND) include( ${EIGEN3_USE_FILE} ) endif() + find_package(TAUCS) + if(TAUCS_FOUND) + include( ${TAUCS_USE_FILE} ) + endif(TAUCS_FOUND) + if (EIGEN3_FOUND OR TAUCS_FOUND) # Executables that require Eigen 3 or TAUCS create_single_source_cgal_program( "poisson_reconstruction_example.cpp" ) + create_single_source_cgal_program( "poisson_reconstruction.cpp" ) else() - message(STATUS "NOTICE: Example poisson_reconstruction_example.cpp needs Eigen 3.1 (or greater) or the TAUCS library and will not be compiled.") + message(STATUS "NOTICE: The examples needs Eigen 3.1 (or greater) or the TAUCS library and will not be compiled.") endif() - if (EIGEN3_FOUND) - # Link with BLAS, LAPACK and TAUCS (optional) - find_package(TAUCS) - endif() - if(TAUCS_FOUND) - include( ${TAUCS_USE_FILE} ) - # Executables that require TAUCS - create_single_source_cgal_program( "poisson_reconstruction.cpp" ) - else(TAUCS_FOUND) - message(STATUS "NOTICE: Some of the executables in this directory need the TAUCS library and will not be compiled.") - endif(TAUCS_FOUND) - else() message(STATUS "NOTICE: This program requires the CGAL library, and will not be compiled.") diff --git a/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/poisson_reconstruction.cpp b/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/poisson_reconstruction.cpp index c9c9decd1e8..4e185deeacc 100644 --- a/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/poisson_reconstruction.cpp +++ b/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/poisson_reconstruction.cpp @@ -25,8 +25,9 @@ #include #include #include +#ifdef CGAL_TAUCS_ENABLED #include -//#include +#endif #include "compute_normal.h" @@ -92,7 +93,10 @@ int main(int argc, char * argv[]) std::cerr << "Options:\n"; std::cerr << " -sm_radius Radius upper bound (default=100 * average spacing)\n"; std::cerr << " -sm_distance Distance upper bound (default=0.25 * average spacing)\n"; - // std::cerr << " -solver taucs|mkl Sparse linear solver (default=TAUCS)\n"; + #if defined(CGAL_EIGEN3_ENABLED) && defined(CGAL_TAUCS_ENABLED) + std::cerr << " -solver eigen|taucs Sparse linear solver (default=eigen)\n"; + #endif + return EXIT_FAILURE; } @@ -100,7 +104,15 @@ int main(int argc, char * argv[]) FT sm_angle = 20.0; // Min triangle angle (degrees). FT sm_radius = 100; // Max triangle size w.r.t. point set average spacing. FT sm_distance = 0.25; // Approximation error w.r.t. point set average spacing. - std::string solver_name = "taucs"; // Sparse linear solver name. + #ifdef CGAL_EIGEN3_ENABLED + std::string solver_name = "eigen"; // Sparse linear solver name. + #else + #ifdef CGAL_TAUCS_ENABLED + std::string solver_name = "taucs"; // Sparse linear solver name. + #else + std::string solver_name = "no_solver_available"; + #endif + #endif // decode parameters std::string input_filename = argv[1]; @@ -217,6 +229,7 @@ int main(int argc, char * argv[]) points.begin(), points.end(), CGAL::make_normal_of_point_with_normal_pmap(points.begin())); + #ifdef CGAL_TAUCS_ENABLED if (solver_name == "taucs") { std::cerr << "Use TAUCS out-of-core Multifrontal Supernodal Cholesky Factorization\n"; @@ -242,29 +255,32 @@ int main(int argc, char * argv[]) return EXIT_FAILURE; } } - /* - else if (solver_name == "mkl") + else + #endif + #ifdef CGAL_EIGEN3_ENABLED { - std::cerr << "Use MKL Pardiso\n"; - - // Creates sparse linear solver: MKL Pardiso - //CGAL::MKL_symmetric_solver_traits solver; - CGAL::MKL_symmetric_solver_traits solver; - - // Computes the Poisson indicator function f() - // at each vertex of the triangulation. - if ( ! function.compute_implicit_function(solver) ) + if (solver_name == "eigen") { - std::cerr << "Error: cannot compute implicit function" << std::endl; + std::cerr << "Use Eigen 3\n"; + if ( ! function.compute_implicit_function() ) + { + std::cerr << "Error: cannot compute implicit function" << std::endl; + return EXIT_FAILURE; + } + } + else + { + std::cerr << "Error: invalid solver " << solver_name << "\n"; return EXIT_FAILURE; } } - */ - else + #else { std::cerr << "Error: invalid solver " << solver_name << "\n"; return EXIT_FAILURE; } + #endif + // Prints status std::cerr << "Total implicit function (triangulation+refinement+solver): " << task_timer.time() << " seconds\n"; From a1a1a75441cfb109e50e69e145414cad2ae137c4 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 1 May 2012 12:07:40 +0000 Subject: [PATCH 39/47] Remove a \bf --- .../Poisson_reconstruction_function.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/Poisson_reconstruction_function.tex b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/Poisson_reconstruction_function.tex index 8d135f4d2f8..c3cdfda0a12 100644 --- a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/Poisson_reconstruction_function.tex +++ b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/Poisson_reconstruction_function.tex @@ -108,7 +108,7 @@ Creates a Poisson implicit function from the [first, beyond) range of points. \ccCommentHeading{Template Parameters} \\ \ccc{InputIterator}: iterator over input points. \ccc{PointPMap}: is a model of \ccc{boost::ReadablePropertyMap} with a \ccc{value_type} = \ccc{Point_3}. It can be omitted if \ccc{InputIterator} \ccc{value_type} is convertible to \ccc{Point_3}. \ccc{NormalPMap}: is a model of \ccc{boost::ReadablePropertyMap} with a \ccc{value_type} = \ccc{Vector_3}. \ccCommentHeading{Parameters} \\ -\ccc{first}: iterator over the first input point. \ccc{beyond}: past-the-end iterator over the input points. \ccc{point_pmap}: property map to access the position of an input point. \ccc{normal_pmap}: property map to access the {\bf oriented} normal of an input point. +\ccc{first}: iterator over the first input point. \ccc{beyond}: past-the-end iterator over the input points. \ccc{point_pmap}: property map to access the position of an input point. \ccc{normal_pmap}: property map to access the oriented normal of an input point. } \ccGlue From a521599052da74a0f81b9813f235dfa5350319f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 2 May 2012 10:22:28 +0000 Subject: [PATCH 40/47] sort 2D intersection primitive lexicographically (like I done in 3D) --- .../doc_tex/Kernel_23_ref/intersection.tex | 185 +++++++++--------- 1 file changed, 93 insertions(+), 92 deletions(-) diff --git a/Kernel_23/doc_tex/Kernel_23_ref/intersection.tex b/Kernel_23/doc_tex/Kernel_23_ref/intersection.tex index 8cd6320dbdd..4a79aca670e 100644 --- a/Kernel_23/doc_tex/Kernel_23_ref/intersection.tex +++ b/Kernel_23/doc_tex/Kernel_23_ref/intersection.tex @@ -37,27 +37,41 @@ following: \hline type A & type B & \parbox{4 cm}{\vspace{1 mm}{return type}} \\ \hline +\ccStyle{Iso_rectangle_2} & \ccStyle{Iso_rectangle_2} & \parbox{4 cm}{\vspace{1 mm} + \ccStyle{Iso_rectangle_2} + \vspace{1 mm}} \\ +\hline +\ccStyle{Iso_rectangle_2} & \ccStyle{Line_2} & \parbox{4 cm}{\vspace{1 mm} + \ccStyle{Point_2} + \\ \ccStyle{Segment_2} + \vspace{1 mm}} \\ +\hline +\ccStyle{Iso_rectangle_2} & \ccStyle{Ray_2} & \parbox{4 cm}{\vspace{1 mm} + \ccStyle{Point_2} + \\ \ccStyle{Segment_2} + \vspace{1 mm}} \\ +\hline +\ccStyle{Iso_rectangle_2} & \ccStyle{Segment_2} & \parbox{4 cm}{\vspace{1 mm} + \ccStyle{Point_2} + \\ \ccStyle{Segment_2} + \vspace{1 mm}} \\ +\hline \ccStyle{Line_2} & \ccStyle{Line_2} & \parbox{4 cm}{\vspace{1 mm} \ccStyle{Point_2} \\ \ccStyle{Line_2} \vspace{1 mm}} \\ \hline -\ccStyle{Segment_2} & \ccStyle{Line_2} & \parbox{4 cm}{\vspace{1 mm} - \ccStyle{Point_2} - \\ \ccStyle{Segment_2} - \vspace{1 mm}} \\ -\hline -\ccStyle{Segment_2} & \ccStyle{Segment_2} & \parbox{4 cm}{\vspace{1 mm} - \ccStyle{Point_2} - \\ \ccStyle{Segment_2} - \vspace{1 mm}} \\ -\hline -\ccStyle{Ray_2} & \ccStyle{Line_2} & \parbox{4 cm}{\vspace{1 mm} +\ccStyle{Line_2} & \ccStyle{Ray_2} & \parbox{4 cm}{\vspace{1 mm} \ccStyle{Point_2} \\ \ccStyle{Ray_2} \vspace{1 mm}} \\ \hline -\ccStyle{Ray_2} & \ccStyle{Segment_2} & \parbox{4 cm}{\vspace{1 mm} +\ccStyle{Line_2} & \ccStyle{Segment_2} & \parbox{4 cm}{\vspace{1 mm} + \ccStyle{Point_2} + \\ \ccStyle{Segment_2} + \vspace{1 mm}} \\ +\hline +\ccStyle{Line_2} & \ccStyle{Triangle_2} & \parbox{4 cm}{\vspace{1 mm} \ccStyle{Point_2} \\ \ccStyle{Segment_2} \vspace{1 mm}} \\ @@ -68,17 +82,22 @@ type A & type B & \parbox{4 cm}{\vspace{1 mm}{return type}} \\ \\ \ccStyle{Ray_2} \vspace{1 mm}} \\ \hline -\ccStyle{Triangle_2} & \ccStyle{Line_2} & \parbox{4 cm}{\vspace{1 mm} +\ccStyle{Ray_2} & \ccStyle{Segment_2} & \parbox{4 cm}{\vspace{1 mm} \ccStyle{Point_2} \\ \ccStyle{Segment_2} \vspace{1 mm}} \\ \hline -\ccStyle{Triangle_2} & \ccStyle{Segment_2} & \parbox{4 cm}{\vspace{1 mm} +\ccStyle{Ray_2} & \ccStyle{Triangle_2} & \parbox{4 cm}{\vspace{1 mm} \ccStyle{Point_2} \\ \ccStyle{Segment_2} \vspace{1 mm}} \\ \hline -\ccStyle{Triangle_2} & \ccStyle{Ray_2} & \parbox{4 cm}{\vspace{1 mm} +\ccStyle{Segment_2} & \ccStyle{Segment_2} & \parbox{4 cm}{\vspace{1 mm} + \ccStyle{Point_2} + \\ \ccStyle{Segment_2} + \vspace{1 mm}} \\ +\hline +\ccStyle{Segment_2} & \ccStyle{Triangle_2} & \parbox{4 cm}{\vspace{1 mm} \ccStyle{Point_2} \\ \ccStyle{Segment_2} \vspace{1 mm}} \\ @@ -90,25 +109,6 @@ type A & type B & \parbox{4 cm}{\vspace{1 mm}{return type}} \\ \\ \ccStyle{std::vector} \vspace{1 mm}} \\ \hline -\ccStyle{Iso_rectangle_2} & \ccStyle{Line_2} & \parbox{4 cm}{\vspace{1 mm} - \ccStyle{Point_2} - \\ \ccStyle{Segment_2} - \vspace{1 mm}} \\ -\hline -\ccStyle{Iso_rectangle_2} & \ccStyle{Segment_2} & \parbox{4 cm}{\vspace{1 mm} - \ccStyle{Point_2} - \\ \ccStyle{Segment_2} - \vspace{1 mm}} \\ -\hline -\ccStyle{Iso_rectangle_2} & \ccStyle{Ray_2} & \parbox{4 cm}{\vspace{1 mm} - \ccStyle{Point_2} - \\ \ccStyle{Segment_2} - \vspace{1 mm}} \\ -\hline -\ccStyle{Iso_rectangle_2} & \ccStyle{Iso_rectangle_2} & \parbox{4 cm}{\vspace{1 mm} - \ccStyle{Iso_rectangle_2} - \vspace{1 mm}} \\ -\hline {\ccStyle{Line_3}} & {\ccStyle{Line_3}} & \parbox{4 cm}{\vspace{1 mm} \ccStyle{Point_3} \\ \ccStyle{Line_3} @@ -209,6 +209,38 @@ type A & type B & \parbox{4 cm}{\vspace{1 mm}{return type}} \\ type B return type + + Iso_rectangle_2 + Iso_rectangle_2 + + +
    Iso_rectangle_2
    + + + + Iso_rectangle_2 + Line_2 + + + +
    Point_2
    Segment_2
    + + + Iso_rectangle_2 + Ray_2 + + + +
    Point_2
    Segment_2
    + + + Iso_rectangle_2 + Segment_2 + + + +
    Point_2
    Segment_2
    + Line_2 Line_2 @@ -218,37 +250,29 @@ type A & type B & \parbox{4 cm}{\vspace{1 mm}{return type}} \\ - Segment_2 Line_2 - - - -
    Point_2
    Segment_2
    - - - Segment_2 - Segment_2 - - - -
    Point_2
    Segment_2
    - - Ray_2 - Line_2
    Point_2
    Ray_2
    - Ray_2 + Line_2 Segment_2
    Point_2
    Segment_2
    + + Line_2 + Triangle_2 + + + +
    Point_2
    Segment_2
    + Ray_2 Ray_2 @@ -259,15 +283,7 @@ type A & type B & \parbox{4 cm}{\vspace{1 mm}{return type}} \\ - Triangle_2 - Line_2 - - - -
    Point_2
    Segment_2
    - - - Triangle_2 + Ray_2 Segment_2 @@ -275,8 +291,24 @@ type A & type B & \parbox{4 cm}{\vspace{1 mm}{return type}} \\
    Point_2
    - Triangle_2 Ray_2 + Triangle_2 + + + +
    Point_2
    Segment_2
    + + + Segment_2 + Segment_2 + + + +
    Point_2
    Segment_2
    + + + Segment_2 + Triangle_2 @@ -292,37 +324,6 @@ type A & type B & \parbox{4 cm}{\vspace{1 mm}{return type}} \\
    Point_2
    Segment_2
    std::vector<Point_2>
    - - Iso_rectangle_2 - Line_2 - - - -
    Point_2
    Segment_2
    - - - Iso_rectangle_2 - Segment_2 - - - -
    Point_2
    Segment_2
    - - - Iso_rectangle_2 - Ray_2 - - - -
    Point_2
    Segment_2
    - - - Iso_rectangle_2 - Iso_rectangle_2 - - -
    Iso_rectangle_2
    - Line_3 Line_3 From aad2dfdde080b43a3c5de880ea75c0c26577bf4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 2 May 2012 10:27:45 +0000 Subject: [PATCH 41/47] doc bug fix: In the doc page of Intersect_2, intersection for Iso_rectangle_2 and Triangle_2 is documented while in the doc page of intersection, it is not (and all is implemented). --- .../doc_tex/Kernel_23_ref/intersection.tex | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Kernel_23/doc_tex/Kernel_23_ref/intersection.tex b/Kernel_23/doc_tex/Kernel_23_ref/intersection.tex index 4a79aca670e..0e6ddab751e 100644 --- a/Kernel_23/doc_tex/Kernel_23_ref/intersection.tex +++ b/Kernel_23/doc_tex/Kernel_23_ref/intersection.tex @@ -56,6 +56,13 @@ type A & type B & \parbox{4 cm}{\vspace{1 mm}{return type}} \\ \\ \ccStyle{Segment_2} \vspace{1 mm}} \\ \hline +\ccStyle{Iso_rectangle_2} & \ccStyle{Triangle_2} & \parbox{4 cm}{\vspace{1 mm} + \ccStyle{Point_2} + \\ \ccStyle{Segment_2} + \\ \ccStyle{Triangle_2} + \\ \ccStyle{std::vector} + \vspace{1 mm}} \\ +\hline \ccStyle{Line_2} & \ccStyle{Line_2} & \parbox{4 cm}{\vspace{1 mm} \ccStyle{Point_2} \\ \ccStyle{Line_2} @@ -241,6 +248,16 @@ type A & type B & \parbox{4 cm}{\vspace{1 mm}{return type}} \\ Segment_2 + + Iso_rectangle_2 + Triangle_2 + + + + + +
    Point_2
    Segment_2
    Triangle_2
    std::vector<Point_2>
    + Line_2 Line_2 From 559ac7992a9e230b731b163acf0077a5a7514f4c Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Thu, 3 May 2012 19:15:06 +0000 Subject: [PATCH 42/47] Bugfix: Remove an undocumented constructor of Cell_attribute_with_point class which involves a conflict if an user uses Point as Info template argument. --- Linear_cell_complex/include/CGAL/Cell_attribute_with_point.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Linear_cell_complex/include/CGAL/Cell_attribute_with_point.h b/Linear_cell_complex/include/CGAL/Cell_attribute_with_point.h index abb7ca90938..52bccaf3fc1 100644 --- a/Linear_cell_complex/include/CGAL/Cell_attribute_with_point.h +++ b/Linear_cell_complex/include/CGAL/Cell_attribute_with_point.h @@ -85,10 +85,6 @@ namespace CGAL { Cell_attribute_with_point(const Point& apoint) : Base2(apoint) {} - /// Contructor with an attribute in parameter. - Cell_attribute_with_point(const Info& ainfo) : Base1(ainfo) - {} - /// Contructor with a point and an attribute in parameters. Cell_attribute_with_point(const Point& apoint, const Info& ainfo) : Base1(ainfo), From 12ab866ee365b640a13cb3e5263a48edaa820251 Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Thu, 3 May 2012 20:09:19 +0000 Subject: [PATCH 43/47] Start to replace functor specialized by if to compare the two versions. --- .../include/CGAL/Combinatorial_map.h | 148 +++++++++++++++++- .../CGAL/Combinatorial_map_constructors.h | 54 ++++--- .../CGAL/Combinatorial_map_operations.h | 87 +++++----- Combinatorial_map/include/CGAL/Dart.h | 6 - .../internal/Combinatorial_map_functors.h | 115 +------------- 5 files changed, 219 insertions(+), 191 deletions(-) diff --git a/Combinatorial_map/include/CGAL/Combinatorial_map.h b/Combinatorial_map/include/CGAL/Combinatorial_map.h index 7e78a4dcb71..286b53f6c33 100644 --- a/Combinatorial_map/include/CGAL/Combinatorial_map.h +++ b/Combinatorial_map/include/CGAL/Combinatorial_map.h @@ -834,6 +834,38 @@ namespace CGAL { (mattribute_containers); } + /** Double link a dart with beta 0 to a second dart. + * \em adart1 is 0-linked to \em adart2 and \em adart2 is 1-linked + * with \em adart1. Attributes are not updated, thus we can obtain + * a non-valid map with darts belonging to a same orbit and having + * different attributes. + * @param adart1 a first dart. + * @param adart2 a second dart. + */ + void basic_link_beta_0(Dart_handle adart1, Dart_handle adart2) + { + CGAL_assertion(adart1 != NULL && adart2 != NULL && adart1!=adart2); + CGAL_assertion(adart1 != null_dart_handle && adart2 != null_dart_handle); + adart1->basic_link_beta(adart2, 0); + adart2->basic_link_beta(adart1, 1); + } + + /** Double link a dart with beta 0 to a second dart. + * \em adart1 is 0-linked to \em adart2 and \em adart2 is 1-linked + * with \em adart1. Attributes are not updated, thus we can obtain + * a non-valid map with darts belonging to a same orbit and having + * different attributes. + * @param adart1 a first dart. + * @param adart2 a second dart. + */ + void basic_link_beta_1(Dart_handle adart1, Dart_handle adart2) + { + CGAL_assertion(adart1 != NULL && adart2 != NULL && adart1!=adart2); + CGAL_assertion(adart1 != null_dart_handle && adart2 != null_dart_handle); + adart1->basic_link_beta(adart2, 1); + adart2->basic_link_beta(adart1, 0); + } + /** Double link a dart with beta i to a second dart, when i>=2. * \em adart1 is i-linked to \em adart2 and \em adart2 is i-linked * with \em adart1. Attributes are not updated, thus we can obtain @@ -843,7 +875,8 @@ namespace CGAL { * @param adart2 a second dart. * @param i the dimension of the beta */ - void basic_link_beta(Dart_handle adart1, Dart_handle adart2, unsigned int i) + void basic_link_beta_for_involution(Dart_handle adart1, Dart_handle adart2, + unsigned int i) { CGAL_assertion( i>=2 && i<=dimension ); CGAL_assertion(adart1 != NULL && adart2 != NULL && adart1!=adart2); @@ -862,7 +895,17 @@ namespace CGAL { */ template void basic_link_beta(Dart_handle adart1, Dart_handle adart2) - { internal::basic_link_beta_functor::run(*this,adart1,adart2); } + { + if ( i==0 ) basic_link_beta_0(adart1, adart2); + else if ( i==1 ) basic_link_beta_1(adart1, adart2); + else basic_link_beta_for_involution(adart1, adart2, i); + } + void basic_link_beta(Dart_handle adart1, Dart_handle adart2, unsigned int i) + { + if ( i==0 ) basic_link_beta_0(adart1, adart2); + else if ( i==1 ) basic_link_beta_1(adart1, adart2); + else basic_link_beta_for_involution(adart1, adart2, i); + } /** Double unlink a dart with beta0. * beta0(\em adart) is 1-unlinked and \em adart is 0-unlinked. @@ -873,7 +916,45 @@ namespace CGAL { */ template void unlink_beta(Dart_handle adart) - { internal::unlink_beta_functor::run(*this,adart); } + { + if ( i==0 ) unlink_beta_0(adart); + else if ( i==1 ) unlink_beta_1(adart); + else unlink_beta_for_involution(adart, i); + } + void unlink_beta(Dart_handle adart, unsigned int i) + { + if ( i==0 ) unlink_beta_0(adart); + else if ( i==1 ) unlink_beta_1(adart); + else unlink_beta_for_involution(adart, i); + } + + /** Double unlink a dart with beta 0. + * beta0(\em adart) is 1-unlinked and \em adart is 0-unlinked. + * The attributes are not updated, thus we can obtain a non-valid map + * with darts belonging to different orbits and having the same + * attributes. + * @param adart a dart. + */ + void unlink_beta_0(Dart_handle adart) + { + CGAL_assertion(adart != NULL && !adart->is_free(0)); + adart->beta(0)->unlink_beta(1); + adart->unlink_beta(0); + } + + /** Double unlink a dart with beta 1. + * beta1(\em adart) is 0-unlinked and \em adart is 1-unlinked. + * The attributes are not updated, thus we can obtain a non-valid map + * with darts belonging to different orbits and having the same + * attributes. + * @param adart a dart. + */ + void unlink_beta_1(Dart_handle adart) + { + CGAL_assertion(adart != NULL && !adart->is_free(1)); + adart->beta(1)->unlink_beta(0); + adart->unlink_beta(1); + } /** Double unlink a dart with beta i, for i>=2. * betai(\em adart) is i-unlinked and \em adart is i-unlinked. @@ -883,7 +964,7 @@ namespace CGAL { * @param adart a dart. * @param i the dimension of the beta */ - void unlink_beta(Dart_handle adart, unsigned int i) + void unlink_beta_for_involution(Dart_handle adart, unsigned int i) { CGAL_assertion(adart!=NULL && adart!=null_dart_handle && !adart->is_free(i)); @@ -903,7 +984,57 @@ namespace CGAL { */ template void link_beta(Dart_handle adart1, Dart_handle adart2) - { internal::link_beta_functor::run(*this,adart1,adart2); } + { + if ( i==0 ) link_beta_0(adart1, adart2); + else if ( i==1 ) link_beta_1(adart1, adart2); + else link_beta_for_involution(adart1, adart2, i); + } + void link_beta(Dart_handle adart1, Dart_handle adart2, unsigned int i) + { + if ( i==0 ) link_beta_0(adart1, adart2); + else if ( i==1 ) link_beta_1(adart1, adart2); + else link_beta_for_involution(adart1, adart2, i); + } + + /** Double link two darts, and update the NULL attributes. + * \em adart1 is 0-linked to \em adart2 and \em adart2 is 1-linked + * with \em adart1. The NULL attributes of \em adart1 are updated to + * non NULL attributes associated to \em adart2, and vice-versa. + * We can obtain a non-valid map with darts belonging to a same cell + * and having different attributes. + * @param adart1 a first dart. + * @param adart2 a second dart. + */ + void link_beta_0(Dart_handle adart1, Dart_handle adart2) + { + CGAL_assertion(adart1 != NULL && adart2 != NULL && adart1!=adart2 ); + CGAL_assertion(adart1 != null_dart_handle && adart2 != null_dart_handle); + Helper::template Foreach_enabled_attributes + >:: + run(this,adart1,adart2,0); + adart1->basic_link_beta(adart2, 0); + adart2->basic_link_beta(adart1, 1); + } + + /** Double link two darts, and update the NULL attributes. + * \em adart1 is 1-linked to \em adart2 and \em adart2 is 0-linked + * with \em adart1. The NULL attributes of \em adart1 are updated to + * non NULL attributes associated to \em adart2, and vice-versa. + * We can obtain a non-valid map with darts belonging to a same cell + * and having different attributes. + * @param adart1 a first dart. + * @param adart2 a second dart. + */ + void link_beta_1(Dart_handle adart1, Dart_handle adart2) + { + CGAL_assertion(adart1 != NULL && adart2 != NULL && adart1!=adart2 ); + CGAL_assertion(adart1 != null_dart_handle && adart2 != null_dart_handle); + Helper::template Foreach_enabled_attributes + >:: + run(this,adart1,adart2,1); + adart1->basic_link_beta(adart2, 1); + adart2->basic_link_beta(adart1, 0); + } /** Double link two darts, and update the NULL attributes. * \em adart1 is i-linked to \em adart2 and \em adart2 is i^-1-linked @@ -916,16 +1047,17 @@ namespace CGAL { * @param i the dimension of the beta. * @pre 2<=i<=dimension */ - void link_beta(Dart_handle adart1, Dart_handle adart2, unsigned int i) + void link_beta_for_involution(Dart_handle adart1, Dart_handle adart2, + unsigned int i) { CGAL_assertion(adart1 != NULL && adart2 != NULL && adart1!=adart2 ); CGAL_assertion(adart1 != null_dart_handle && adart2 != null_dart_handle); CGAL_assertion( 2<=i && i<=dimension ); - adart1->basic_link_beta(adart2, i); - adart2->basic_link_beta(adart1, i); Helper::template Foreach_enabled_attributes >:: run(this,adart1,adart2,i); + adart1->basic_link_beta(adart2, i); + adart2->basic_link_beta(adart1, i); } /** Double link a dart with betai to a second dart. diff --git a/Combinatorial_map/include/CGAL/Combinatorial_map_constructors.h b/Combinatorial_map/include/CGAL/Combinatorial_map_constructors.h index b78836b8468..d4a33bb6b2b 100644 --- a/Combinatorial_map/include/CGAL/Combinatorial_map_constructors.h +++ b/Combinatorial_map/include/CGAL/Combinatorial_map_constructors.h @@ -36,7 +36,7 @@ namespace CGAL { { typename Map::Dart_handle d1 = amap.create_dart(); typename Map::Dart_handle d2 = amap.create_dart(); - amap.template basic_link_beta<2>(d1, d2); + amap.template basic_link_beta_for_involution(d1, d2, 2); return d1; } @@ -56,11 +56,11 @@ namespace CGAL { for ( unsigned int nb=1; nb(prev, cur); + amap.basic_link_beta_1(prev, cur); prev=cur; } - amap.template basic_link_beta<1>(prev, start); + amap.basic_link_beta_1(prev, start); return start; } @@ -80,12 +80,12 @@ namespace CGAL { typename Map::Dart_handle d3, typename Map::Dart_handle d4) { - amap.basic_link_beta(d1, d2, 2); - amap.basic_link_beta(d3, d2->beta(0), 2); - amap.basic_link_beta(d1->beta(1), d3->beta(0), 2); - amap.basic_link_beta(d4, d2->beta(1), 2); - amap.basic_link_beta(d4->beta(0), d3->beta(1), 2); - amap.basic_link_beta(d4->beta(1), d1->beta(0), 2); + amap.basic_link_beta_for_involution(d1, d2, 2); + amap.basic_link_beta_for_involution(d3, d2->beta(0), 2); + amap.basic_link_beta_for_involution(d1->beta(1), d3->beta(0), 2); + amap.basic_link_beta_for_involution(d4, d2->beta(1), 2); + amap.basic_link_beta_for_involution(d4->beta(0), d3->beta(1), 2); + amap.basic_link_beta_for_involution(d4->beta(1), d1->beta(0), 2); return d1; } @@ -125,21 +125,33 @@ namespace CGAL { typename Map::Dart_handle d5, typename Map::Dart_handle d6) { - amap.basic_link_beta(d1, d4->beta(1)->beta(1), 2); - amap.basic_link_beta(d1->beta(1), d6->beta(0) , 2); - amap.basic_link_beta(d1->beta(1)->beta(1), d2 , 2); - amap.basic_link_beta(d1->beta(0), d5 , 2); + amap.basic_link_beta_for_involution(d1, + d4->beta(1)->beta(1), 2); + amap.basic_link_beta_for_involution(d1->beta(1), + d6->beta(0) , 2); + amap.basic_link_beta_for_involution(d1->beta(1)->beta(1), + d2 , 2); + amap.basic_link_beta_for_involution(d1->beta(0), + d5 , 2); - amap.basic_link_beta(d3, d2->beta(1)->beta(1), 2); - amap.basic_link_beta(d3->beta(1), d6->beta(1) , 2); - amap.basic_link_beta(d3->beta(1)->beta(1), d4 , 2); - amap.basic_link_beta(d3->beta(0), d5->beta(1)->beta(1), 2); + amap.basic_link_beta_for_involution(d3, + d2->beta(1)->beta(1), 2); + amap.basic_link_beta_for_involution(d3->beta(1), + d6->beta(1) , 2); + amap.basic_link_beta_for_involution(d3->beta(1)->beta(1), + d4 , 2); + amap.basic_link_beta_for_involution(d3->beta(0), + d5->beta(1)->beta(1), 2); - amap.basic_link_beta(d6, d4->beta(1) , 2); - amap.basic_link_beta(d6->beta(1)->beta(1), d2->beta(1) , 2); + amap.basic_link_beta_for_involution(d6, + d4->beta(1) , 2); + amap.basic_link_beta_for_involution(d6->beta(1)->beta(1), + d2->beta(1) , 2); - amap.basic_link_beta(d5->beta(0), d4->beta(0) , 2); - amap.basic_link_beta(d5->beta(1), d2->beta(0) , 2); + amap.basic_link_beta_for_involution(d5->beta(0), + d4->beta(0) , 2); + amap.basic_link_beta_for_involution(d5->beta(1), + d2->beta(0) , 2); return d1; } diff --git a/Combinatorial_map/include/CGAL/Combinatorial_map_operations.h b/Combinatorial_map/include/CGAL/Combinatorial_map_operations.h index 385e73fea34..6457c94fa49 100644 --- a/Combinatorial_map/include/CGAL/Combinatorial_map_operations.h +++ b/Combinatorial_map/include/CGAL/Combinatorial_map_operations.h @@ -84,22 +84,22 @@ namespace CGAL { if (!cur->is_free(0)) { n1 = amap.create_dart(); - amap.template link_beta<0>(cur, n1); + amap.link_beta_0(cur, n1); } else n1 = NULL; if (!cur->is_free(1)) { n2 = amap.create_dart(); - amap.template link_beta<1>(cur, n2); + amap.link_beta_1(cur, n2); } else n2 = NULL; if (n1 != NULL && n2 != NULL) - amap.template link_beta<0>(n1, n2); + amap.link_beta_0(n1, n2); if (n1 != NULL && prev != NULL) - amap.link_beta(prev, n1, 2); + amap.link_beta_for_involution(prev, n1, 2); for (unsigned int dim=3; dim<=Map::dimension; ++dim) { @@ -110,24 +110,24 @@ namespace CGAL { if (n1!=NULL) { nn1=amap.create_dart(); - amap.template link_beta<1>(cur->beta(dim), nn1); - amap.link_beta(n1, nn1, dim); + amap.link_beta_1(cur->beta(dim), nn1); + amap.link_beta_for_involution(n1, nn1, dim); } else nn1=NULL; if (n2!=NULL) { nn2=amap.create_dart(); - amap.template link_beta<0>(cur->beta(dim), nn2); - amap.link_beta(n2, nn2, dim); + amap.link_beta_0(cur->beta(dim), nn2); + amap.link_beta_for_involution(n2, nn2, dim); } else nn2=NULL; if (nn1 != NULL && nn2 != NULL) - amap.template basic_link_beta<1>(nn1, nn2); + amap.basic_link_beta_1(nn1, nn2); if (nn1 != NULL && prev != NULL) - amap.link_beta(nn1, prev->beta(dim), 2); + amap.link_beta_for_involution(nn1, prev->beta(dim), 2); amap.mark(cur->beta(dim), treated); tounmark.push(cur->beta(dim)); @@ -135,9 +135,9 @@ namespace CGAL { else { if ( n1!=NULL ) - amap.link_beta(n1, cur->beta(dim)->beta(1), dim); + amap.link_beta_for_involution(n1, cur->beta(dim)->beta(1), dim); if ( n2!=NULL ) - amap.link_beta(n2, cur->beta(dim)->beta(0), dim); + amap.link_beta_for_involution(n2, cur->beta(dim)->beta(0), dim); } } } @@ -147,12 +147,12 @@ namespace CGAL { if (n2 != NULL) { - amap.link_beta(first->beta(0), n2, 2); + amap.link_beta_for_involution(first->beta(0), n2, 2); for (unsigned int dim=3; dim<=Map::dimension; ++dim) { if ( !adart->is_free(dim) ) { - amap.link_beta(first->beta(0)->beta(dim), n2->beta(dim), 2); + amap.link_beta_for_involution(first->beta(0)->beta(dim), n2->beta(dim), 2); } } } @@ -375,7 +375,7 @@ namespace CGAL { if ( !(*it)->is_free(Map::dimension) ) { todegroup.push(Dart_pair(*it, (*it)->beta(Map::dimension))); - amap.unlink_beta(*it,Map::dimension); + amap.unlink_beta_for_involution(*it,Map::dimension); } } @@ -691,16 +691,17 @@ namespace CGAL { amap.template basic_link_beta<1>(d1,d2); } - amap.link_beta(d1, d2, 2); + amap.link_beta_for_involution(d1, d2, 2); for ( unsigned int dim=3; dim<=Map::dimension; ++dim) { if ( !it1->is_free(dim) && amap.is_marked(it1->beta(dim), treated) ) { - amap.basic_link_beta(it1->beta(dim)->beta_inv(s1), d1, dim); - amap.basic_link_beta(it1->beta(dim)->beta_inv(s1)->beta(2), - d2, dim); + amap.basic_link_beta_for_involution(it1->beta(dim)->beta_inv(s1), d1, + dim); + amap.basic_link_beta_for_involution + (it1->beta(dim)->beta_inv(s1)->beta(2), d2, dim); } } @@ -780,36 +781,37 @@ namespace CGAL { if ( !it1->is_free(s1) ) { - if ( s1==0 ) amap.template basic_link_beta<1>(it1->beta(0), d2); - else amap.template link_beta<0>(it1->beta(1), d2); + if ( s1==0 ) amap.basic_link_beta_1(it1->beta(0), d2); + else amap.link_beta_0(it1->beta(1), d2); } if ( !it2->is_free(s1) ) { - if ( s1==0 ) amap.template basic_link_beta<1>(it2->beta(0), d1); - else amap.template link_beta<0>(it2->beta(1), d1); + if ( s1==0 ) amap.basic_link_beta_1(it2->beta(0), d1); + else amap.link_beta_0(it2->beta(1), d1); } if ( s1==0 ) { - amap.template link_beta<0>(it1, d1); - amap.template link_beta<0>(it2, d2); + amap.link_beta_0(it1, d1); + amap.link_beta_0(it2, d2); } else { - amap.template basic_link_beta<1>(it1, d1); - amap.template basic_link_beta<1>(it2, d2); + amap.basic_link_beta_1(it1, d1); + amap.basic_link_beta_1(it2, d2); } - amap.link_beta(d2, d1, 2); + amap.link_beta_for_involution(d2, d1, 2); for ( unsigned int dim=3; dim<=CMap::dimension; ++dim) { if ( !it1->is_free(dim) && amap.is_marked(it1->beta(dim), treated) ) { - amap.basic_link_beta(it1->beta(dim)->beta_inv(s1), d1, dim); - amap.basic_link_beta(it1->beta(dim)->beta_inv(s1)->beta(2), - d2, dim); + amap.basic_link_beta_for_involution + (it1->beta(dim)->beta_inv(s1), d1, dim); + amap.basic_link_beta_for_involution + (it1->beta(dim)->beta_inv(s1)->beta(2), d2, dim); } } @@ -877,7 +879,7 @@ namespace CGAL { if (withBeta3) { dd = amap.create_dart(); - amap.basic_link_beta(d, dd, 3); + amap.basic_link_beta_for_involution(d, dd, 3); } if (prec != NULL) @@ -888,9 +890,9 @@ namespace CGAL { else first = d; if (!(*it)->is_free(2)) - amap.link_beta((*it)->beta(2), dd, 2); + amap.link_beta_for_involution((*it)->beta(2), dd, 2); - amap.link_beta(*it, d, 2); + amap.link_beta_for_involution(*it, d, 2); prec = d; } @@ -913,19 +915,19 @@ namespace CGAL { it.cont(); ++it ) { d = amap.create_dart(); - amap.link_beta(it->beta(2),d,dim); + amap.link_beta_for_involution(it->beta(2),d,dim); if ( withBeta3 ) { dd = amap.create_dart(); - amap.link_beta(it->beta(2)->beta(3),dd,dim); - amap.basic_link_beta(d, dd, 3); + amap.link_beta_for_involution(it->beta(2)->beta(3),dd,dim); + amap.basic_link_beta_for_involution(d, dd, 3); } if ( prec!=NULL ) { - amap.template link_beta<0>(prec,d); + amap.link_beta_0(prec,d); if ( withBeta3 ) { - amap.template link_beta<1>(prec->beta(3),dd); + amap.link_beta_1(prec->beta(3),dd); } } else first2 = prec; @@ -936,11 +938,12 @@ namespace CGAL { { if ( !it->is_free(dim2) && it->beta(dim2)->is_free(dim) ) - amap.basic_link_beta(it->beta(dim2)->beta(dim), d, dim2); + amap.basic_link_beta_for_involution(it->beta(dim2)->beta(dim), + d, dim2); if ( withBeta3 && !it->beta(3)->is_free(dim2) && it->beta(3)->beta(dim2)->is_free(dim) ) - amap.basic_link_beta(it->beta(3)->beta(dim2)->beta(dim), - dd, dim2); + amap.basic_link_beta_for_involution + (it->beta(3)->beta(dim2)->beta(dim), dd, dim2); } } prec = d; diff --git a/Combinatorial_map/include/CGAL/Dart.h b/Combinatorial_map/include/CGAL/Dart.h index cba87c1d3b3..6deaac48151 100644 --- a/Combinatorial_map/include/CGAL/Dart.h +++ b/Combinatorial_map/include/CGAL/Dart.h @@ -67,15 +67,9 @@ namespace CGAL { template friend struct Remove_cell_functor; - template - friend struct internal::basic_link_beta_functor; - template friend struct internal::link_beta_functor; - template - friend struct internal::unlink_beta_functor; - public: typedef Dart Self; typedef typename Refs::Dart_handle Dart_handle; diff --git a/Combinatorial_map/include/CGAL/internal/Combinatorial_map_functors.h b/Combinatorial_map/include/CGAL/internal/Combinatorial_map_functors.h index c9eda04918a..0330bc1604e 100644 --- a/Combinatorial_map/include/CGAL/internal/Combinatorial_map_functors.h +++ b/Combinatorial_map/include/CGAL/internal/Combinatorial_map_functors.h @@ -221,7 +221,7 @@ namespace CGAL { I1.rewind(); I2.rewind(); while ( I1.cont() ) { - amap.basic_link_beta(I1, I2, i); + amap.basic_link_beta_for_involution(I1, I2, i); ++I1; ++I2; } } @@ -485,76 +485,6 @@ namespace CGAL { } }; - /// Functor used to i-link two darts, 2<=i<=dimension. - template - struct basic_link_beta_functor{ - static void run(Map&,typename Map::Dart_handle adart1, - typename Map::Dart_handle adart2) - { - CGAL_assertion(adart1 != NULL && adart2 != NULL && adart1!=adart2); - CGAL_static_assertion( i>=2 && i<=Map::dimension ); - adart1->basic_link_beta(adart2, i); - adart2->basic_link_beta(adart1, i); - } - }; - - /// Functor used to 0-link two darts. - template - struct basic_link_beta_functor{ - static void run(Map&,typename Map::Dart_handle adart1, - typename Map::Dart_handle adart2) - { - CGAL_assertion(adart1 != NULL && adart2 != NULL ); - adart1->basic_link_beta(adart2, 0); - adart2->basic_link_beta(adart1, 1); - } - }; - - /// Functor used to 1-link two darts. - template - struct basic_link_beta_functor{ - static void run(Map& ,typename Map::Dart_handle adart1, - typename Map::Dart_handle adart2) - { - CGAL_assertion(adart1 != NULL && adart2 != NULL); - adart1->basic_link_beta(adart2, 1); - adart2->basic_link_beta(adart1, 0); - } - }; - - /// Functor used to i-unlink one dart. - template - struct unlink_beta_functor{ - static void run(Map&,typename Map::Dart_handle adart) - { - CGAL_assertion(adart != NULL && !adart->is_free(i)); - CGAL_static_assertion(2<=i && i<=Map::dimension); - adart->beta(i)->unlink_beta(i); - adart->unlink_beta(i); - } - }; - - /// Functor used to 0-unlink one dart. - template - struct unlink_beta_functor{ - static void run(Map&,typename Map::Dart_handle adart) - { - CGAL_assertion(adart != NULL && !adart->is_free(0)); - adart->beta(0)->unlink_beta(1); - adart->unlink_beta(0); - } - }; - - /// Functor used to 1-unlink one dart. - template - struct unlink_beta_functor{ - static void run(Map&,typename Map::Dart_handle adart) - { - CGAL_assertion(adart != NULL && !adart->is_free(1)); - adart->beta(1)->unlink_beta(0); - adart->unlink_beta(1); - } - }; // Functor used to group one attribute of two given darts template @@ -897,49 +827,6 @@ namespace CGAL { } }; - /// Functor used to i-link two darts, 2<=i<=dimension. - template - struct link_beta_functor{ - static void run(CMap& amap,typename CMap::Dart_handle adart1, - typename CMap::Dart_handle adart2) - { - CGAL_assertion(adart1 != NULL && adart2 != NULL && adart1!=adart2 ); - CGAL_static_assertion( 2<=i && i<=CMap::dimension ); - CMap::Helper::template Foreach_enabled_attributes - >::run(&amap,adart1,adart2,i); - adart1->basic_link_beta(adart2, i); - adart2->basic_link_beta(adart1, i); - } - }; - - /// Functor used to 0-link two darts. - template - struct link_beta_functor{ - static void run(Map& amap,typename Map::Dart_handle adart1, - typename Map::Dart_handle adart2) - { - CGAL_assertion(adart1 != NULL && adart2 != NULL); - Map::Helper::template Foreach_enabled_attributes - >::run(&amap,adart1,adart2,0); - adart1->basic_link_beta(adart2, 0); - adart2->basic_link_beta(adart1, 1); - } - }; - - /// Functor used to 1-link two darts. - template - struct link_beta_functor{ - static void run(Map& amap,typename Map::Dart_handle adart1, - typename Map::Dart_handle adart2) - { - CGAL_assertion(adart1 != NULL && adart2 != NULL); - Map::Helper::template Foreach_enabled_attributes - >::run(&amap,adart1,adart2,1); - adart1->basic_link_beta(adart2, 1); - adart2->basic_link_beta(adart1, 0); - } - }; - // Functor used to call the On_split functor between the two given darts. template Date: Thu, 3 May 2012 20:16:58 +0000 Subject: [PATCH 44/47] Revert last commit: bad branch. --- .../include/CGAL/Combinatorial_map.h | 148 +----------------- .../CGAL/Combinatorial_map_constructors.h | 54 +++---- .../CGAL/Combinatorial_map_operations.h | 87 +++++----- Combinatorial_map/include/CGAL/Dart.h | 6 + .../internal/Combinatorial_map_functors.h | 115 +++++++++++++- 5 files changed, 191 insertions(+), 219 deletions(-) diff --git a/Combinatorial_map/include/CGAL/Combinatorial_map.h b/Combinatorial_map/include/CGAL/Combinatorial_map.h index 286b53f6c33..7e78a4dcb71 100644 --- a/Combinatorial_map/include/CGAL/Combinatorial_map.h +++ b/Combinatorial_map/include/CGAL/Combinatorial_map.h @@ -834,38 +834,6 @@ namespace CGAL { (mattribute_containers); } - /** Double link a dart with beta 0 to a second dart. - * \em adart1 is 0-linked to \em adart2 and \em adart2 is 1-linked - * with \em adart1. Attributes are not updated, thus we can obtain - * a non-valid map with darts belonging to a same orbit and having - * different attributes. - * @param adart1 a first dart. - * @param adart2 a second dart. - */ - void basic_link_beta_0(Dart_handle adart1, Dart_handle adart2) - { - CGAL_assertion(adart1 != NULL && adart2 != NULL && adart1!=adart2); - CGAL_assertion(adart1 != null_dart_handle && adart2 != null_dart_handle); - adart1->basic_link_beta(adart2, 0); - adart2->basic_link_beta(adart1, 1); - } - - /** Double link a dart with beta 0 to a second dart. - * \em adart1 is 0-linked to \em adart2 and \em adart2 is 1-linked - * with \em adart1. Attributes are not updated, thus we can obtain - * a non-valid map with darts belonging to a same orbit and having - * different attributes. - * @param adart1 a first dart. - * @param adart2 a second dart. - */ - void basic_link_beta_1(Dart_handle adart1, Dart_handle adart2) - { - CGAL_assertion(adart1 != NULL && adart2 != NULL && adart1!=adart2); - CGAL_assertion(adart1 != null_dart_handle && adart2 != null_dart_handle); - adart1->basic_link_beta(adart2, 1); - adart2->basic_link_beta(adart1, 0); - } - /** Double link a dart with beta i to a second dart, when i>=2. * \em adart1 is i-linked to \em adart2 and \em adart2 is i-linked * with \em adart1. Attributes are not updated, thus we can obtain @@ -875,8 +843,7 @@ namespace CGAL { * @param adart2 a second dart. * @param i the dimension of the beta */ - void basic_link_beta_for_involution(Dart_handle adart1, Dart_handle adart2, - unsigned int i) + void basic_link_beta(Dart_handle adart1, Dart_handle adart2, unsigned int i) { CGAL_assertion( i>=2 && i<=dimension ); CGAL_assertion(adart1 != NULL && adart2 != NULL && adart1!=adart2); @@ -895,17 +862,7 @@ namespace CGAL { */ template void basic_link_beta(Dart_handle adart1, Dart_handle adart2) - { - if ( i==0 ) basic_link_beta_0(adart1, adart2); - else if ( i==1 ) basic_link_beta_1(adart1, adart2); - else basic_link_beta_for_involution(adart1, adart2, i); - } - void basic_link_beta(Dart_handle adart1, Dart_handle adart2, unsigned int i) - { - if ( i==0 ) basic_link_beta_0(adart1, adart2); - else if ( i==1 ) basic_link_beta_1(adart1, adart2); - else basic_link_beta_for_involution(adart1, adart2, i); - } + { internal::basic_link_beta_functor::run(*this,adart1,adart2); } /** Double unlink a dart with beta0. * beta0(\em adart) is 1-unlinked and \em adart is 0-unlinked. @@ -916,45 +873,7 @@ namespace CGAL { */ template void unlink_beta(Dart_handle adart) - { - if ( i==0 ) unlink_beta_0(adart); - else if ( i==1 ) unlink_beta_1(adart); - else unlink_beta_for_involution(adart, i); - } - void unlink_beta(Dart_handle adart, unsigned int i) - { - if ( i==0 ) unlink_beta_0(adart); - else if ( i==1 ) unlink_beta_1(adart); - else unlink_beta_for_involution(adart, i); - } - - /** Double unlink a dart with beta 0. - * beta0(\em adart) is 1-unlinked and \em adart is 0-unlinked. - * The attributes are not updated, thus we can obtain a non-valid map - * with darts belonging to different orbits and having the same - * attributes. - * @param adart a dart. - */ - void unlink_beta_0(Dart_handle adart) - { - CGAL_assertion(adart != NULL && !adart->is_free(0)); - adart->beta(0)->unlink_beta(1); - adart->unlink_beta(0); - } - - /** Double unlink a dart with beta 1. - * beta1(\em adart) is 0-unlinked and \em adart is 1-unlinked. - * The attributes are not updated, thus we can obtain a non-valid map - * with darts belonging to different orbits and having the same - * attributes. - * @param adart a dart. - */ - void unlink_beta_1(Dart_handle adart) - { - CGAL_assertion(adart != NULL && !adart->is_free(1)); - adart->beta(1)->unlink_beta(0); - adart->unlink_beta(1); - } + { internal::unlink_beta_functor::run(*this,adart); } /** Double unlink a dart with beta i, for i>=2. * betai(\em adart) is i-unlinked and \em adart is i-unlinked. @@ -964,7 +883,7 @@ namespace CGAL { * @param adart a dart. * @param i the dimension of the beta */ - void unlink_beta_for_involution(Dart_handle adart, unsigned int i) + void unlink_beta(Dart_handle adart, unsigned int i) { CGAL_assertion(adart!=NULL && adart!=null_dart_handle && !adart->is_free(i)); @@ -984,57 +903,7 @@ namespace CGAL { */ template void link_beta(Dart_handle adart1, Dart_handle adart2) - { - if ( i==0 ) link_beta_0(adart1, adart2); - else if ( i==1 ) link_beta_1(adart1, adart2); - else link_beta_for_involution(adart1, adart2, i); - } - void link_beta(Dart_handle adart1, Dart_handle adart2, unsigned int i) - { - if ( i==0 ) link_beta_0(adart1, adart2); - else if ( i==1 ) link_beta_1(adart1, adart2); - else link_beta_for_involution(adart1, adart2, i); - } - - /** Double link two darts, and update the NULL attributes. - * \em adart1 is 0-linked to \em adart2 and \em adart2 is 1-linked - * with \em adart1. The NULL attributes of \em adart1 are updated to - * non NULL attributes associated to \em adart2, and vice-versa. - * We can obtain a non-valid map with darts belonging to a same cell - * and having different attributes. - * @param adart1 a first dart. - * @param adart2 a second dart. - */ - void link_beta_0(Dart_handle adart1, Dart_handle adart2) - { - CGAL_assertion(adart1 != NULL && adart2 != NULL && adart1!=adart2 ); - CGAL_assertion(adart1 != null_dart_handle && adart2 != null_dart_handle); - Helper::template Foreach_enabled_attributes - >:: - run(this,adart1,adart2,0); - adart1->basic_link_beta(adart2, 0); - adart2->basic_link_beta(adart1, 1); - } - - /** Double link two darts, and update the NULL attributes. - * \em adart1 is 1-linked to \em adart2 and \em adart2 is 0-linked - * with \em adart1. The NULL attributes of \em adart1 are updated to - * non NULL attributes associated to \em adart2, and vice-versa. - * We can obtain a non-valid map with darts belonging to a same cell - * and having different attributes. - * @param adart1 a first dart. - * @param adart2 a second dart. - */ - void link_beta_1(Dart_handle adart1, Dart_handle adart2) - { - CGAL_assertion(adart1 != NULL && adart2 != NULL && adart1!=adart2 ); - CGAL_assertion(adart1 != null_dart_handle && adart2 != null_dart_handle); - Helper::template Foreach_enabled_attributes - >:: - run(this,adart1,adart2,1); - adart1->basic_link_beta(adart2, 1); - adart2->basic_link_beta(adart1, 0); - } + { internal::link_beta_functor::run(*this,adart1,adart2); } /** Double link two darts, and update the NULL attributes. * \em adart1 is i-linked to \em adart2 and \em adart2 is i^-1-linked @@ -1047,17 +916,16 @@ namespace CGAL { * @param i the dimension of the beta. * @pre 2<=i<=dimension */ - void link_beta_for_involution(Dart_handle adart1, Dart_handle adart2, - unsigned int i) + void link_beta(Dart_handle adart1, Dart_handle adart2, unsigned int i) { CGAL_assertion(adart1 != NULL && adart2 != NULL && adart1!=adart2 ); CGAL_assertion(adart1 != null_dart_handle && adart2 != null_dart_handle); CGAL_assertion( 2<=i && i<=dimension ); + adart1->basic_link_beta(adart2, i); + adart2->basic_link_beta(adart1, i); Helper::template Foreach_enabled_attributes >:: run(this,adart1,adart2,i); - adart1->basic_link_beta(adart2, i); - adart2->basic_link_beta(adart1, i); } /** Double link a dart with betai to a second dart. diff --git a/Combinatorial_map/include/CGAL/Combinatorial_map_constructors.h b/Combinatorial_map/include/CGAL/Combinatorial_map_constructors.h index d4a33bb6b2b..b78836b8468 100644 --- a/Combinatorial_map/include/CGAL/Combinatorial_map_constructors.h +++ b/Combinatorial_map/include/CGAL/Combinatorial_map_constructors.h @@ -36,7 +36,7 @@ namespace CGAL { { typename Map::Dart_handle d1 = amap.create_dart(); typename Map::Dart_handle d2 = amap.create_dart(); - amap.template basic_link_beta_for_involution(d1, d2, 2); + amap.template basic_link_beta<2>(d1, d2); return d1; } @@ -56,11 +56,11 @@ namespace CGAL { for ( unsigned int nb=1; nb(prev, cur); prev=cur; } - amap.basic_link_beta_1(prev, start); + amap.template basic_link_beta<1>(prev, start); return start; } @@ -80,12 +80,12 @@ namespace CGAL { typename Map::Dart_handle d3, typename Map::Dart_handle d4) { - amap.basic_link_beta_for_involution(d1, d2, 2); - amap.basic_link_beta_for_involution(d3, d2->beta(0), 2); - amap.basic_link_beta_for_involution(d1->beta(1), d3->beta(0), 2); - amap.basic_link_beta_for_involution(d4, d2->beta(1), 2); - amap.basic_link_beta_for_involution(d4->beta(0), d3->beta(1), 2); - amap.basic_link_beta_for_involution(d4->beta(1), d1->beta(0), 2); + amap.basic_link_beta(d1, d2, 2); + amap.basic_link_beta(d3, d2->beta(0), 2); + amap.basic_link_beta(d1->beta(1), d3->beta(0), 2); + amap.basic_link_beta(d4, d2->beta(1), 2); + amap.basic_link_beta(d4->beta(0), d3->beta(1), 2); + amap.basic_link_beta(d4->beta(1), d1->beta(0), 2); return d1; } @@ -125,33 +125,21 @@ namespace CGAL { typename Map::Dart_handle d5, typename Map::Dart_handle d6) { - amap.basic_link_beta_for_involution(d1, - d4->beta(1)->beta(1), 2); - amap.basic_link_beta_for_involution(d1->beta(1), - d6->beta(0) , 2); - amap.basic_link_beta_for_involution(d1->beta(1)->beta(1), - d2 , 2); - amap.basic_link_beta_for_involution(d1->beta(0), - d5 , 2); + amap.basic_link_beta(d1, d4->beta(1)->beta(1), 2); + amap.basic_link_beta(d1->beta(1), d6->beta(0) , 2); + amap.basic_link_beta(d1->beta(1)->beta(1), d2 , 2); + amap.basic_link_beta(d1->beta(0), d5 , 2); - amap.basic_link_beta_for_involution(d3, - d2->beta(1)->beta(1), 2); - amap.basic_link_beta_for_involution(d3->beta(1), - d6->beta(1) , 2); - amap.basic_link_beta_for_involution(d3->beta(1)->beta(1), - d4 , 2); - amap.basic_link_beta_for_involution(d3->beta(0), - d5->beta(1)->beta(1), 2); + amap.basic_link_beta(d3, d2->beta(1)->beta(1), 2); + amap.basic_link_beta(d3->beta(1), d6->beta(1) , 2); + amap.basic_link_beta(d3->beta(1)->beta(1), d4 , 2); + amap.basic_link_beta(d3->beta(0), d5->beta(1)->beta(1), 2); - amap.basic_link_beta_for_involution(d6, - d4->beta(1) , 2); - amap.basic_link_beta_for_involution(d6->beta(1)->beta(1), - d2->beta(1) , 2); + amap.basic_link_beta(d6, d4->beta(1) , 2); + amap.basic_link_beta(d6->beta(1)->beta(1), d2->beta(1) , 2); - amap.basic_link_beta_for_involution(d5->beta(0), - d4->beta(0) , 2); - amap.basic_link_beta_for_involution(d5->beta(1), - d2->beta(0) , 2); + amap.basic_link_beta(d5->beta(0), d4->beta(0) , 2); + amap.basic_link_beta(d5->beta(1), d2->beta(0) , 2); return d1; } diff --git a/Combinatorial_map/include/CGAL/Combinatorial_map_operations.h b/Combinatorial_map/include/CGAL/Combinatorial_map_operations.h index 6457c94fa49..385e73fea34 100644 --- a/Combinatorial_map/include/CGAL/Combinatorial_map_operations.h +++ b/Combinatorial_map/include/CGAL/Combinatorial_map_operations.h @@ -84,22 +84,22 @@ namespace CGAL { if (!cur->is_free(0)) { n1 = amap.create_dart(); - amap.link_beta_0(cur, n1); + amap.template link_beta<0>(cur, n1); } else n1 = NULL; if (!cur->is_free(1)) { n2 = amap.create_dart(); - amap.link_beta_1(cur, n2); + amap.template link_beta<1>(cur, n2); } else n2 = NULL; if (n1 != NULL && n2 != NULL) - amap.link_beta_0(n1, n2); + amap.template link_beta<0>(n1, n2); if (n1 != NULL && prev != NULL) - amap.link_beta_for_involution(prev, n1, 2); + amap.link_beta(prev, n1, 2); for (unsigned int dim=3; dim<=Map::dimension; ++dim) { @@ -110,24 +110,24 @@ namespace CGAL { if (n1!=NULL) { nn1=amap.create_dart(); - amap.link_beta_1(cur->beta(dim), nn1); - amap.link_beta_for_involution(n1, nn1, dim); + amap.template link_beta<1>(cur->beta(dim), nn1); + amap.link_beta(n1, nn1, dim); } else nn1=NULL; if (n2!=NULL) { nn2=amap.create_dart(); - amap.link_beta_0(cur->beta(dim), nn2); - amap.link_beta_for_involution(n2, nn2, dim); + amap.template link_beta<0>(cur->beta(dim), nn2); + amap.link_beta(n2, nn2, dim); } else nn2=NULL; if (nn1 != NULL && nn2 != NULL) - amap.basic_link_beta_1(nn1, nn2); + amap.template basic_link_beta<1>(nn1, nn2); if (nn1 != NULL && prev != NULL) - amap.link_beta_for_involution(nn1, prev->beta(dim), 2); + amap.link_beta(nn1, prev->beta(dim), 2); amap.mark(cur->beta(dim), treated); tounmark.push(cur->beta(dim)); @@ -135,9 +135,9 @@ namespace CGAL { else { if ( n1!=NULL ) - amap.link_beta_for_involution(n1, cur->beta(dim)->beta(1), dim); + amap.link_beta(n1, cur->beta(dim)->beta(1), dim); if ( n2!=NULL ) - amap.link_beta_for_involution(n2, cur->beta(dim)->beta(0), dim); + amap.link_beta(n2, cur->beta(dim)->beta(0), dim); } } } @@ -147,12 +147,12 @@ namespace CGAL { if (n2 != NULL) { - amap.link_beta_for_involution(first->beta(0), n2, 2); + amap.link_beta(first->beta(0), n2, 2); for (unsigned int dim=3; dim<=Map::dimension; ++dim) { if ( !adart->is_free(dim) ) { - amap.link_beta_for_involution(first->beta(0)->beta(dim), n2->beta(dim), 2); + amap.link_beta(first->beta(0)->beta(dim), n2->beta(dim), 2); } } } @@ -375,7 +375,7 @@ namespace CGAL { if ( !(*it)->is_free(Map::dimension) ) { todegroup.push(Dart_pair(*it, (*it)->beta(Map::dimension))); - amap.unlink_beta_for_involution(*it,Map::dimension); + amap.unlink_beta(*it,Map::dimension); } } @@ -691,17 +691,16 @@ namespace CGAL { amap.template basic_link_beta<1>(d1,d2); } - amap.link_beta_for_involution(d1, d2, 2); + amap.link_beta(d1, d2, 2); for ( unsigned int dim=3; dim<=Map::dimension; ++dim) { if ( !it1->is_free(dim) && amap.is_marked(it1->beta(dim), treated) ) { - amap.basic_link_beta_for_involution(it1->beta(dim)->beta_inv(s1), d1, - dim); - amap.basic_link_beta_for_involution - (it1->beta(dim)->beta_inv(s1)->beta(2), d2, dim); + amap.basic_link_beta(it1->beta(dim)->beta_inv(s1), d1, dim); + amap.basic_link_beta(it1->beta(dim)->beta_inv(s1)->beta(2), + d2, dim); } } @@ -781,37 +780,36 @@ namespace CGAL { if ( !it1->is_free(s1) ) { - if ( s1==0 ) amap.basic_link_beta_1(it1->beta(0), d2); - else amap.link_beta_0(it1->beta(1), d2); + if ( s1==0 ) amap.template basic_link_beta<1>(it1->beta(0), d2); + else amap.template link_beta<0>(it1->beta(1), d2); } if ( !it2->is_free(s1) ) { - if ( s1==0 ) amap.basic_link_beta_1(it2->beta(0), d1); - else amap.link_beta_0(it2->beta(1), d1); + if ( s1==0 ) amap.template basic_link_beta<1>(it2->beta(0), d1); + else amap.template link_beta<0>(it2->beta(1), d1); } if ( s1==0 ) { - amap.link_beta_0(it1, d1); - amap.link_beta_0(it2, d2); + amap.template link_beta<0>(it1, d1); + amap.template link_beta<0>(it2, d2); } else { - amap.basic_link_beta_1(it1, d1); - amap.basic_link_beta_1(it2, d2); + amap.template basic_link_beta<1>(it1, d1); + amap.template basic_link_beta<1>(it2, d2); } - amap.link_beta_for_involution(d2, d1, 2); + amap.link_beta(d2, d1, 2); for ( unsigned int dim=3; dim<=CMap::dimension; ++dim) { if ( !it1->is_free(dim) && amap.is_marked(it1->beta(dim), treated) ) { - amap.basic_link_beta_for_involution - (it1->beta(dim)->beta_inv(s1), d1, dim); - amap.basic_link_beta_for_involution - (it1->beta(dim)->beta_inv(s1)->beta(2), d2, dim); + amap.basic_link_beta(it1->beta(dim)->beta_inv(s1), d1, dim); + amap.basic_link_beta(it1->beta(dim)->beta_inv(s1)->beta(2), + d2, dim); } } @@ -879,7 +877,7 @@ namespace CGAL { if (withBeta3) { dd = amap.create_dart(); - amap.basic_link_beta_for_involution(d, dd, 3); + amap.basic_link_beta(d, dd, 3); } if (prec != NULL) @@ -890,9 +888,9 @@ namespace CGAL { else first = d; if (!(*it)->is_free(2)) - amap.link_beta_for_involution((*it)->beta(2), dd, 2); + amap.link_beta((*it)->beta(2), dd, 2); - amap.link_beta_for_involution(*it, d, 2); + amap.link_beta(*it, d, 2); prec = d; } @@ -915,19 +913,19 @@ namespace CGAL { it.cont(); ++it ) { d = amap.create_dart(); - amap.link_beta_for_involution(it->beta(2),d,dim); + amap.link_beta(it->beta(2),d,dim); if ( withBeta3 ) { dd = amap.create_dart(); - amap.link_beta_for_involution(it->beta(2)->beta(3),dd,dim); - amap.basic_link_beta_for_involution(d, dd, 3); + amap.link_beta(it->beta(2)->beta(3),dd,dim); + amap.basic_link_beta(d, dd, 3); } if ( prec!=NULL ) { - amap.link_beta_0(prec,d); + amap.template link_beta<0>(prec,d); if ( withBeta3 ) { - amap.link_beta_1(prec->beta(3),dd); + amap.template link_beta<1>(prec->beta(3),dd); } } else first2 = prec; @@ -938,12 +936,11 @@ namespace CGAL { { if ( !it->is_free(dim2) && it->beta(dim2)->is_free(dim) ) - amap.basic_link_beta_for_involution(it->beta(dim2)->beta(dim), - d, dim2); + amap.basic_link_beta(it->beta(dim2)->beta(dim), d, dim2); if ( withBeta3 && !it->beta(3)->is_free(dim2) && it->beta(3)->beta(dim2)->is_free(dim) ) - amap.basic_link_beta_for_involution - (it->beta(3)->beta(dim2)->beta(dim), dd, dim2); + amap.basic_link_beta(it->beta(3)->beta(dim2)->beta(dim), + dd, dim2); } } prec = d; diff --git a/Combinatorial_map/include/CGAL/Dart.h b/Combinatorial_map/include/CGAL/Dart.h index 6deaac48151..cba87c1d3b3 100644 --- a/Combinatorial_map/include/CGAL/Dart.h +++ b/Combinatorial_map/include/CGAL/Dart.h @@ -67,9 +67,15 @@ namespace CGAL { template friend struct Remove_cell_functor; + template + friend struct internal::basic_link_beta_functor; + template friend struct internal::link_beta_functor; + template + friend struct internal::unlink_beta_functor; + public: typedef Dart Self; typedef typename Refs::Dart_handle Dart_handle; diff --git a/Combinatorial_map/include/CGAL/internal/Combinatorial_map_functors.h b/Combinatorial_map/include/CGAL/internal/Combinatorial_map_functors.h index 0330bc1604e..c9eda04918a 100644 --- a/Combinatorial_map/include/CGAL/internal/Combinatorial_map_functors.h +++ b/Combinatorial_map/include/CGAL/internal/Combinatorial_map_functors.h @@ -221,7 +221,7 @@ namespace CGAL { I1.rewind(); I2.rewind(); while ( I1.cont() ) { - amap.basic_link_beta_for_involution(I1, I2, i); + amap.basic_link_beta(I1, I2, i); ++I1; ++I2; } } @@ -485,6 +485,76 @@ namespace CGAL { } }; + /// Functor used to i-link two darts, 2<=i<=dimension. + template + struct basic_link_beta_functor{ + static void run(Map&,typename Map::Dart_handle adart1, + typename Map::Dart_handle adart2) + { + CGAL_assertion(adart1 != NULL && adart2 != NULL && adart1!=adart2); + CGAL_static_assertion( i>=2 && i<=Map::dimension ); + adart1->basic_link_beta(adart2, i); + adart2->basic_link_beta(adart1, i); + } + }; + + /// Functor used to 0-link two darts. + template + struct basic_link_beta_functor{ + static void run(Map&,typename Map::Dart_handle adart1, + typename Map::Dart_handle adart2) + { + CGAL_assertion(adart1 != NULL && adart2 != NULL ); + adart1->basic_link_beta(adart2, 0); + adart2->basic_link_beta(adart1, 1); + } + }; + + /// Functor used to 1-link two darts. + template + struct basic_link_beta_functor{ + static void run(Map& ,typename Map::Dart_handle adart1, + typename Map::Dart_handle adart2) + { + CGAL_assertion(adart1 != NULL && adart2 != NULL); + adart1->basic_link_beta(adart2, 1); + adart2->basic_link_beta(adart1, 0); + } + }; + + /// Functor used to i-unlink one dart. + template + struct unlink_beta_functor{ + static void run(Map&,typename Map::Dart_handle adart) + { + CGAL_assertion(adart != NULL && !adart->is_free(i)); + CGAL_static_assertion(2<=i && i<=Map::dimension); + adart->beta(i)->unlink_beta(i); + adart->unlink_beta(i); + } + }; + + /// Functor used to 0-unlink one dart. + template + struct unlink_beta_functor{ + static void run(Map&,typename Map::Dart_handle adart) + { + CGAL_assertion(adart != NULL && !adart->is_free(0)); + adart->beta(0)->unlink_beta(1); + adart->unlink_beta(0); + } + }; + + /// Functor used to 1-unlink one dart. + template + struct unlink_beta_functor{ + static void run(Map&,typename Map::Dart_handle adart) + { + CGAL_assertion(adart != NULL && !adart->is_free(1)); + adart->beta(1)->unlink_beta(0); + adart->unlink_beta(1); + } + }; // Functor used to group one attribute of two given darts template @@ -827,6 +897,49 @@ namespace CGAL { } }; + /// Functor used to i-link two darts, 2<=i<=dimension. + template + struct link_beta_functor{ + static void run(CMap& amap,typename CMap::Dart_handle adart1, + typename CMap::Dart_handle adart2) + { + CGAL_assertion(adart1 != NULL && adart2 != NULL && adart1!=adart2 ); + CGAL_static_assertion( 2<=i && i<=CMap::dimension ); + CMap::Helper::template Foreach_enabled_attributes + >::run(&amap,adart1,adart2,i); + adart1->basic_link_beta(adart2, i); + adart2->basic_link_beta(adart1, i); + } + }; + + /// Functor used to 0-link two darts. + template + struct link_beta_functor{ + static void run(Map& amap,typename Map::Dart_handle adart1, + typename Map::Dart_handle adart2) + { + CGAL_assertion(adart1 != NULL && adart2 != NULL); + Map::Helper::template Foreach_enabled_attributes + >::run(&amap,adart1,adart2,0); + adart1->basic_link_beta(adart2, 0); + adart2->basic_link_beta(adart1, 1); + } + }; + + /// Functor used to 1-link two darts. + template + struct link_beta_functor{ + static void run(Map& amap,typename Map::Dart_handle adart1, + typename Map::Dart_handle adart2) + { + CGAL_assertion(adart1 != NULL && adart2 != NULL); + Map::Helper::template Foreach_enabled_attributes + >::run(&amap,adart1,adart2,1); + adart1->basic_link_beta(adart2, 1); + adart2->basic_link_beta(adart1, 0); + } + }; + // Functor used to call the On_split functor between the two given darts. template Date: Wed, 9 May 2012 09:18:02 +0000 Subject: [PATCH 45/47] updated crontab (automated commit) --- Maintenance/infrastructure/cgal.geometryfactory.com/crontab | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maintenance/infrastructure/cgal.geometryfactory.com/crontab b/Maintenance/infrastructure/cgal.geometryfactory.com/crontab index 19e04f3930f..257eda1008d 100644 --- a/Maintenance/infrastructure/cgal.geometryfactory.com/crontab +++ b/Maintenance/infrastructure/cgal.geometryfactory.com/crontab @@ -11,7 +11,7 @@ # Update testsuite result pages -#5,15,25,35,45,55 * * * * cd $HOME/CGAL/collect_and_public_testresults; ./treat_result_collection +5,15,25,35,45,55 * * * * cd $HOME/CGAL/collect_and_public_testresults; ./treat_result_collection # Create internal release # The script also updates the manual tools. From 84fbdf1d9ad47c74a801e80e4bb71e5096307da6 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 9 May 2012 09:24:54 +0000 Subject: [PATCH 46/47] Remove extra #include There is no need to include user classes headers (, , and so on) one by one when is included. --- Distance_2/include/CGAL/squared_distance_2_1.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Distance_2/include/CGAL/squared_distance_2_1.h b/Distance_2/include/CGAL/squared_distance_2_1.h index 17590b17369..9851623ab28 100644 --- a/Distance_2/include/CGAL/squared_distance_2_1.h +++ b/Distance_2/include/CGAL/squared_distance_2_1.h @@ -32,10 +32,6 @@ #include -#include -#include -#include -#include #include #include #include From 008d29717278f62349a014e4dbc6263590fa878c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 9 May 2012 12:28:05 +0000 Subject: [PATCH 47/47] typos --- AABB_tree/doc_tex/AABB_tree_ref/AABBTraits.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AABB_tree/doc_tex/AABB_tree_ref/AABBTraits.tex b/AABB_tree/doc_tex/AABB_tree_ref/AABBTraits.tex index 0be28c2830a..095f8f5a732 100644 --- a/AABB_tree/doc_tex/AABB_tree_ref/AABBTraits.tex +++ b/AABB_tree/doc_tex/AABB_tree_ref/AABBTraits.tex @@ -95,10 +95,10 @@ for which the class \ccc{AABB_tree} may receive a distance query. \ccMethod{Closest_point closest_point_object();}{Returns the closest point constructor.} \ccHasModels -\ccc{AABB_traits}. +\ccc{AABB_traits}. \ccSeeAlso -\ccc{AABB_traits}\\ +\ccc{AABB_traits}\\ \ccc{AABB_tree} \ccc{AABBPrimitive}