From de2573cf2b2eb92cff628d9690a067b50b4ca145 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Wed, 14 Dec 2016 13:27:02 +0000 Subject: Rollback pointer modification, and use of of a hack for no deep copy of boost graph "voidification" of create_complex method git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/distance_matrix_in_rips_module@1868 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 3667c8f57388dec0300d1fed8bf1b063843727dd --- src/Rips_complex/include/gudhi/Rips_complex.h | 39 +++++++++++---------------- 1 file changed, 15 insertions(+), 24 deletions(-) (limited to 'src/Rips_complex/include/gudhi') diff --git a/src/Rips_complex/include/gudhi/Rips_complex.h b/src/Rips_complex/include/gudhi/Rips_complex.h index 5ac46071..1061de73 100644 --- a/src/Rips_complex/include/gudhi/Rips_complex.h +++ b/src/Rips_complex/include/gudhi/Rips_complex.h @@ -73,8 +73,7 @@ class Rips_complex { * The type InputPointRange must be a range for which std::begin and std::end return input iterators on a point. */ template - Rips_complex(const InputPointRange& points, Filtration_value threshold, Distance distance) - : rips_skeleton_graph_(nullptr) { + Rips_complex(const InputPointRange& points, Filtration_value threshold, Distance distance) { compute_proximity_graph(points, threshold, distance); } @@ -88,8 +87,7 @@ class Rips_complex { * distance_matrix.size().\f$ */ template - Rips_complex(const InputDistanceRange& distance_matrix, Filtration_value threshold) - : rips_skeleton_graph_(nullptr) { + Rips_complex(const InputDistanceRange& distance_matrix, Filtration_value threshold) { compute_proximity_graph(boost::irange((size_t)0, distance_matrix.size()), threshold, [&](size_t i, size_t j){return distance_matrix[j][i];}); } @@ -101,28 +99,18 @@ class Rips_complex { * * @param[in] complex SimplicialComplexForRips to be created. * @param[in] dim_max graph expansion for rips until this given maximal dimension. - * - * @return true if creation succeeds, false otherwise. - * + * @exception std::invalid_argument In debug mode, if \code complex.num_vertices() \endcode does not return 0. + * */ template - bool create_complex(SimplicialComplexForRips& complex, int dim_max) { - if (complex.num_vertices() > 0) { - std::cerr << "Rips_complex create_complex - complex is not empty\n"; - return false; // ----- >> - } - if (rips_skeleton_graph_ == nullptr) { - std::cerr << "Rips Skeleton Graph is not defined\n"; - return false; // ----- >> - } + void create_complex(SimplicialComplexForRips& complex, int dim_max) { + GUDHI_CHECK(complex.num_vertices() == 0, + std::invalid_argument("Rips_complex::create_complex - simplicial complex is not empty")); // insert the proximity graph in the simplicial complex - complex.insert_graph(*rips_skeleton_graph_); + complex.insert_graph(rips_skeleton_graph_); // expand the graph until dimension dim_max complex.expansion(dim_max); - - // -------------------------------------------------------------------------------------------- - return true; } private: @@ -161,20 +149,23 @@ class Rips_complex { // -------------------------------------------------------------------------------------------- // Creates the proximity graph from edges and sets the property with the filtration value. // Number of points is labeled from 0 to idx_u-1 - rips_skeleton_graph_ = new Graph_t(edges.begin(), edges.end(), edges_fil.begin(), idx_u); + // -------------------------------------------------------------------------------------------- + // Do not use : rips_skeleton_graph_ = Graph_t(...) -> deep copy of the graph (boost graph is not move-enabled) + rips_skeleton_graph_.~Graph_t(); + new(&rips_skeleton_graph_)Graph_t(edges.begin(), edges.end(), edges_fil.begin(), idx_u); - auto vertex_prop = boost::get(vertex_filtration_t(), *rips_skeleton_graph_); + auto vertex_prop = boost::get(vertex_filtration_t(), rips_skeleton_graph_); using vertex_iterator = typename boost::graph_traits::vertex_iterator; vertex_iterator vi, vi_end; - for (std::tie(vi, vi_end) = boost::vertices(*rips_skeleton_graph_); + for (std::tie(vi, vi_end) = boost::vertices(rips_skeleton_graph_); vi != vi_end; ++vi) { boost::put(vertex_prop, *vi, 0.); } } private: - Graph_t* rips_skeleton_graph_; + Graph_t rips_skeleton_graph_; }; } // namespace rips_complex -- cgit v1.2.3