Changed implementation of WeightedRips to store simplex values (max distance between simplices' vertices) as an invisible layer on top of each simplex object, so that the data() field of WeightedRips has been freed for use by the users again.
#ifndef __DISTANCES_H__
#define __DISTANCES_H__
/**
* Class: ExplicitDistances
* Stores the pairwise distances of Distances_ instance passed at construction.
* It's a protypical Distances template argument for the Rips complex.
*/
template<class Distances_>
class ExplicitDistances
{
public:
typedef Distances_ Distances;
typedef size_t IndexType;
typedef typename Distances::DistanceType DistanceType;
ExplicitDistances(IndexType size):
size_(size),
distances_(size*(size + 1)/2 + size) {}
ExplicitDistances(const Distances& distances);
DistanceType operator()(IndexType a, IndexType b) const;
DistanceType& operator()(IndexType a, IndexType b);
size_t size() const { return size_; }
IndexType begin() const { return 0; }
IndexType end() const { return size(); }
private:
std::vector<DistanceType> distances_;
size_t size_;
};
/**
* Class: PairwiseDistances
* Given a Container_ of points and a Distance_, it computes distances between elements
* in the container (given as instances of Index_ defaulted to unsigned) using the Distance_ functor.
*
* Container_ is assumed to be an std::vector. That simplifies a number of things.
*/
template<class Container_, class Distance_, typename Index_ = unsigned>
class PairwiseDistances
{
public:
typedef Container_ Container;
typedef Distance_ Distance;
typedef Index_ IndexType;
typedef typename Distance::result_type DistanceType;
PairwiseDistances(const Container& container,
const Distance& distance = Distance()):
container_(container), distance_(distance) {}
DistanceType operator()(IndexType a, IndexType b) const { return distance_(container_[a], container_[b]); }
size_t size() const { return container_.size(); }
IndexType begin() const { return 0; }
IndexType end() const { return size(); }
private:
const Container& container_;
Distance distance_;
};
#include "distances.hpp"
#endif // __DISTANCES_H__