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.
/**
* Author: Dmitriy Morozov
* Department of Computer Science, Duke University, 2007
*/
#ifndef __CONESIMPLEX_H__
#define __CONESIMPLEX_H__
#include <list>
#include <iostream>
#include "utilities/types.h"
#include "simplex.h"
template<class V, class T = Empty>
class ConeSimplex: public Simplex<V,T>
{
public:
typedef Simplex<V,T> Parent;
typedef ConeSimplex<V,T> Self;
public:
ConeSimplex(const Self& s):
Parent(s), coned_(s.coned_) {}
ConeSimplex(const Parent& parent,
bool coned = false):
Parent(parent), coned_(coned) {}
Cycle boundary() const;
bool coned() const { return coned_; }
Dimension dimension() const { return coned_ ? (Parent::dimension() + 1) : Parent::dimension(); }
bool operator==(const Self& other) const { return !(coned_ ^ other.coned_) && Parent::operator==(other); }
std::ostream& operator<<(std::ostream& out) const;
struct ConedVertexComparison;
private:
bool coned_;
};
template<class V, class T>
struct ConeSimplex<V,T>::ConedVertexComparison: public typename Simplex<V,T>::VertexComparison
{
typedef typename Simplex<V,T>::VertexComparison Parent;
bool operator()(const Self& a, const Self& b) const
{
if (a.coned() ^ b.coned())
return b.coned(); // coned simplices shall come after non-coned ones
else
return Parent::operator()(a,b); // within coned/non-coned order by vertices
}
};
template<class V, class T>
std::ostream& operator<<(std::ostream& out, const ConeSimplex<V,T>& s) { return s.operator<<(out); }
#include "conesimplex.hpp"
#endif // __CONESIMPLEX_H__