Skip to content

Commit 7a893cb

Browse files
committed
Added shared ptr constructors for some classes.
1 parent 90c8eda commit 7a893cb

8 files changed

+33
-4
lines changed

CechComplex.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <ranges>
99
#include <generator>
1010
#include <bits/ranges_algo.h>
11+
#include "DataCover.h"
1112

1213
namespace MapperLib {
1314

@@ -52,7 +53,6 @@ std::vector<Simplex> CechComplex::generate_k_simplices(std::vector<MapperCluster
5253
assert(subset_indexset.size() == k);
5354
if(not std::ranges::is_sorted(subset_indexset)) { continue; }
5455
subset_indexset.push_back(relevant_clusters.size()-1);
55-
std::cout << "subset: " << subset_indexset << std::endl;
5656
if(check_cluster_intersection(relevant_clusters, subset_indexset)) {
5757
std::vector<ClusterId> id_vector;
5858
for(auto const subset_index : subset_indexset) {
@@ -113,6 +113,9 @@ std::vector<size_t> CechComplex::get_vector_intersection(std::vector<size_t> vec
113113
CechComplexFactory::CechComplexFactory(Dimension const max_dimension): _max_dimension(max_dimension)
114114
{}
115115

116+
std::shared_ptr<ComplexFactory> CechComplexFactory::make_shared(Dimension max_dimension)
117+
{return std::make_shared<CechComplexFactory>(max_dimension);}
118+
116119
CechComplex::CechComplex(const DataCover &data_cover, Dimension const max_dimension): _data_cover(data_cover),
117120
_max_dimension(max_dimension) {
118121

CechComplex.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77

88
#include <vector>
99
#include <generator>
10+
#include <memory>
11+
1012
#include "typedefs.h"
11-
#include "Mapper.h"
1213

1314
namespace MapperLib {
15+
class DataCover;
1416

1517
class Complex {
1618
public:
@@ -48,6 +50,8 @@ class CechComplexFactory final : public ComplexFactory
4850
{
4951
public:
5052
explicit CechComplexFactory(Dimension max_dimension);
53+
[[nodiscard]] static std::shared_ptr<ComplexFactory> make_shared(Dimension max_dimension);
54+
5155
[[nodiscard]] std::unique_ptr<Complex> create_complex(DataCover const &data_cover) const override;
5256

5357
private:

DataCover.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,12 @@ MapperLib::DataCoverFactory::DataCoverFactory(
212212
{
213213
}
214214

215+
std::shared_ptr<MapperLib::DataCoverFactory> MapperLib::DataCoverFactory::make_shared(size_t resolution,
216+
double perc_overlap, std::optional<Vector> minima, std::optional<Vector> maxima)
217+
{
218+
return std::make_shared<DataCoverFactory>(resolution, perc_overlap, minima, maxima);
219+
}
220+
215221
std::unique_ptr<MapperLib::DataCover> MapperLib::DataCoverFactory::create_data_cover(Matrix const &data) const
216222
{
217223
return std::make_unique<DataCover>(_resolution, _perc_overlap, data, _minima, _maxima);

DataCover.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ class DataCoverFactory
6666
{
6767
public:
6868
DataCoverFactory(size_t resolution, double perc_overlap, std::optional<Vector> minima = std::nullopt, std::optional<Vector> maxima = std::nullopt);
69+
[[nodiscard]] static std::shared_ptr<DataCoverFactory> make_shared(size_t resolution, double perc_overlap, std::optional<Vector> minima = std::nullopt, std::optional<Vector> maxima = std::nullopt);
70+
6971
[[nodiscard]] std::unique_ptr<DataCover> create_data_cover(Matrix const& data) const;
7072

7173
private:

Projection.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ namespace MapperLib {
88
CoordinatePlaneProjection::CoordinatePlaneProjection(std::vector<Dimension> dimensions) : _dimensions(std::move
99
(dimensions)){}
1010

11+
std::shared_ptr<Projection> CoordinatePlaneProjection::make_shared(std::vector<Dimension> dimensions)
12+
{
13+
return std::make_shared<CoordinatePlaneProjection>(std::move(dimensions));
14+
}
15+
1116
Matrix CoordinatePlaneProjection::project(const Matrix &data) const {
1217
Matrix result;
1318
result.reserve(data.size());

Projection.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
#ifndef MAPPER_PROJECTION_H
66
#define MAPPER_PROJECTION_H
7+
#include <memory>
8+
79
#include "typedefs.h"
810

911
namespace MapperLib{
@@ -17,6 +19,8 @@ class Projection {
1719
class CoordinatePlaneProjection final : public Projection{
1820
public:
1921
explicit CoordinatePlaneProjection(std::vector<Dimension> dimensions);
22+
[[nodiscard]] static std::shared_ptr<Projection> make_shared(std::vector<Dimension> dimensions);
23+
2024
[[nodiscard]] Matrix project (Matrix const& data) const override;
2125
private:
2226
std::vector<Dimension> _dimensions;

SingleLinkage.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ SingleLinkage::SingleLinkage(std::optional<int> const num_clusters, std::optiona
1616
_distance_threshold = distance_threshold;
1717
}
1818

19+
std::shared_ptr<Clusterer> SingleLinkage::make_shared(std::optional<int> num_clusters,
20+
std::optional<Scalar> distance_threshold)
21+
{ return std::make_shared<SingleLinkage>(num_clusters, distance_threshold);}
22+
1923
ClusterAssignment SingleLinkage::predict(Matrix const &data, std::vector<PointId> data_filter) {
2024
Matrix distance_matrix;
2125
ClusterAssignment clusters;
@@ -29,13 +33,11 @@ ClusterAssignment SingleLinkage::predict(Matrix const &data, std::vector<PointId
2933

3034
// Initialize distance matrix
3135
distance_matrix.resize(numdata, std::vector<double>(numdata, 0.0));
32-
std::cout << std::setprecision(2) << std::fixed;
3336
for (auto const i: data_filter) {
3437
for (auto const j: data_filter) {
3538
if(j <= i) continue;
3639
distance_matrix[i][j] = distance_matrix[j][i] = euclididan_distance(data[i], data[j]);
3740
}
38-
std::cout << std::endl;
3941
}
4042

4143
size_t const num_clusters = _num_clusters.has_value() ? _num_clusters.value() : 1;

SingleLinkage.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#ifndef SINGLELINKAGE_H
66
#define SINGLELINKAGE_H
77
#include <limits>
8+
#include <memory>
89
#include <optional>
910

1011
#include "Clusterer.h"
@@ -16,6 +17,8 @@ class SingleLinkage : public Clusterer {
1617
public:
1718

1819
SingleLinkage(std::optional<int> num_clusters, std::optional<Scalar> distance_threshold);
20+
[[nodiscard]] static std::shared_ptr<Clusterer> make_shared(std::optional<int> num_clusters, std::optional<Scalar> distance_threshold);
21+
1922
ClusterAssignment predict(Matrix const &data, std::vector<PointId> data_filter) override;
2023

2124
private:

0 commit comments

Comments
 (0)