diff options
6 files changed, 42 insertions, 18 deletions
diff --git a/src/cython/include/Alpha_complex_interface.h b/src/cython/include/Alpha_complex_interface.h index f11a464b..d74ff304 100644 --- a/src/cython/include/Alpha_complex_interface.h +++ b/src/cython/include/Alpha_complex_interface.h @@ -50,6 +50,10 @@ class Alpha_complex_interface { alpha_complex_ = new Alpha_complex<Dynamic_kernel>(off_file_name); } + ~Alpha_complex_interface() { + delete alpha_complex_; + } + std::vector<double> get_point(int vh) { std::vector<double> vd; try { diff --git a/src/cython/include/Euclidean_strong_witness_complex_interface.h b/src/cython/include/Euclidean_strong_witness_complex_interface.h index fc88a82d..67d85e18 100644 --- a/src/cython/include/Euclidean_strong_witness_complex_interface.h +++ b/src/cython/include/Euclidean_strong_witness_complex_interface.h @@ -48,27 +48,32 @@ class Euclidean_strong_witness_complex_interface { public: Euclidean_strong_witness_complex_interface(const std::vector<std::vector<double>>& landmarks, - const std::vector<std::vector<double>>& witnesses) - : landmarks_(landmarks.begin(), landmarks.end()), - witnesses_(witnesses.begin(), witnesses.end()), - witness_complex_(landmarks_, witnesses_) { + const std::vector<std::vector<double>>& witnesses) { + landmarks_.reserve(landmarks.size()); + for(auto& landmark : landmarks) + landmarks_.emplace_back(landmark.begin(), landmark.end()); + witness_complex_ = new Euclidean_strong_witness_complex<Dynamic_kernel>(landmarks_, witnesses); + } + + ~Euclidean_strong_witness_complex_interface() { + delete witness_complex_; } void create_simplex_tree(Gudhi::Simplex_tree<>* simplex_tree, double max_alpha_square, std::size_t limit_dimension) { - witness_complex_.create_complex(*simplex_tree, max_alpha_square, limit_dimension); + witness_complex_->create_complex(*simplex_tree, max_alpha_square, limit_dimension); simplex_tree->initialize_filtration(); } void create_simplex_tree(Gudhi::Simplex_tree<>* simplex_tree, double max_alpha_square) { - witness_complex_.create_complex(*simplex_tree, max_alpha_square); + witness_complex_->create_complex(*simplex_tree, max_alpha_square); simplex_tree->initialize_filtration(); } std::vector<double> get_point(unsigned vh) { std::vector<double> vd; if (vh < landmarks_.size()) { - Point_d ph = witness_complex_.get_point(vh); + Point_d ph = witness_complex_->get_point(vh); for (auto coord = ph.cartesian_begin(); coord < ph.cartesian_end(); coord++) vd.push_back(*coord); } @@ -77,8 +82,7 @@ class Euclidean_strong_witness_complex_interface { private: std::vector<Point_d> landmarks_; - std::vector<Point_d> witnesses_; - Euclidean_strong_witness_complex<Dynamic_kernel> witness_complex_; + Euclidean_strong_witness_complex<Dynamic_kernel>* witness_complex_; }; } // namespace witness_complex diff --git a/src/cython/include/Euclidean_witness_complex_interface.h b/src/cython/include/Euclidean_witness_complex_interface.h index a1ec68aa..a2db6a2d 100644 --- a/src/cython/include/Euclidean_witness_complex_interface.h +++ b/src/cython/include/Euclidean_witness_complex_interface.h @@ -48,26 +48,31 @@ class Euclidean_witness_complex_interface { public: Euclidean_witness_complex_interface(const std::vector<std::vector<double>>& landmarks, - const std::vector<std::vector<double>>& witnesses) - : landmarks_(landmarks.begin(), landmarks.end()), - witnesses_(witnesses.begin(), witnesses.end()), - witness_complex_(landmarks_, witnesses_) { + const std::vector<std::vector<double>>& witnesses) { + landmarks_.reserve(landmarks.size()); + for(auto& landmark : landmarks) + landmarks_.emplace_back(landmark.begin(), landmark.end()); + witness_complex_ = new Euclidean_witness_complex<Dynamic_kernel>(landmarks_, witnesses); + } + + ~Euclidean_witness_complex_interface() { + delete witness_complex_; } void create_simplex_tree(Gudhi::Simplex_tree<>* simplex_tree, double max_alpha_square, std::size_t limit_dimension) { - witness_complex_.create_complex(*simplex_tree, max_alpha_square, limit_dimension); + witness_complex_->create_complex(*simplex_tree, max_alpha_square, limit_dimension); simplex_tree->initialize_filtration(); } void create_simplex_tree(Gudhi::Simplex_tree<>* simplex_tree, double max_alpha_square) { - witness_complex_.create_complex(*simplex_tree, max_alpha_square); + witness_complex_->create_complex(*simplex_tree, max_alpha_square); simplex_tree->initialize_filtration(); } std::vector<double> get_point(unsigned vh) { std::vector<double> vd; if (vh < landmarks_.size()) { - Point_d ph = witness_complex_.get_point(vh); + Point_d ph = witness_complex_->get_point(vh); for (auto coord = ph.cartesian_begin(); coord < ph.cartesian_end(); coord++) vd.push_back(*coord); } @@ -76,8 +81,7 @@ class Euclidean_witness_complex_interface { private: std::vector<Point_d> landmarks_; - std::vector<Point_d> witnesses_; - Euclidean_witness_complex<Dynamic_kernel> witness_complex_; + Euclidean_witness_complex<Dynamic_kernel>* witness_complex_; }; } // namespace witness_complex diff --git a/src/cython/include/Strong_witness_complex_interface.h b/src/cython/include/Strong_witness_complex_interface.h index 70e78a2a..83bf0f3c 100644 --- a/src/cython/include/Strong_witness_complex_interface.h +++ b/src/cython/include/Strong_witness_complex_interface.h @@ -46,6 +46,10 @@ class Strong_witness_complex_interface { witness_complex_ = new Strong_witness_complex<Nearest_landmark_table>(nlt); } + ~Strong_witness_complex_interface() { + delete witness_complex_; + } + void create_simplex_tree(Simplex_tree_interface<>* simplex_tree, double max_alpha_square, std::size_t limit_dimension) { witness_complex_->create_complex(*simplex_tree, max_alpha_square, limit_dimension); diff --git a/src/cython/include/Tangential_complex_interface.h b/src/cython/include/Tangential_complex_interface.h index 93d9bad7..2ca4c393 100644 --- a/src/cython/include/Tangential_complex_interface.h +++ b/src/cython/include/Tangential_complex_interface.h @@ -68,6 +68,10 @@ class Tangential_complex_interface { num_inconsistencies_ = tangential_complex_->number_of_inconsistent_simplices(); } + ~Tangential_complex_interface() { + delete tangential_complex_; + } + std::vector<double> get_point(unsigned vh) { std::vector<double> vd; if (vh < tangential_complex_->number_of_vertices()) { diff --git a/src/cython/include/Witness_complex_interface.h b/src/cython/include/Witness_complex_interface.h index 835b69ab..4f2a903b 100644 --- a/src/cython/include/Witness_complex_interface.h +++ b/src/cython/include/Witness_complex_interface.h @@ -46,6 +46,10 @@ class Witness_complex_interface { witness_complex_ = new Witness_complex<Nearest_landmark_table>(nlt); } + ~Witness_complex_interface() { + delete witness_complex_; + } + void create_simplex_tree(Simplex_tree_interface<>* simplex_tree, double max_alpha_square, std::size_t limit_dimension) { witness_complex_->create_complex(*simplex_tree, max_alpha_square, limit_dimension); |