Added extra functionality to Point class( an iterator ) and PersistenceDiagram( dimension property and __len__ func ).
persistence-diagram.h:
Added a new read-only dimension member and member function to access it.
With a new constructor that that takes in an int type to initialize dimension.
persistence-diagram.cpp:
Added new bp::init constructor. Takes in an integer type to initialize the dimension. Exposed the dimension property. Exposed the size property via a __len__ method.
__init__.py:
Added an iterator for Point objects. This iterates over the coords and then the data( if present ).
/**
* Wrapper class
*
* At points we need to wrap primitive data types in classes, so that we can
* pass them as template arguments to classes that like to inherit from their
* template arguments--this is done in CohomologyPersistence, for example.
*/
template<typename Primitive>
class Wrapper
{
public:
Wrapper () {}
Wrapper (Primitive v) { value = v; }
void setValue (const Primitive &v) { value = v; }
Primitive &getValue () { return value; }
/* provide seemless integration */
Wrapper &operator =(const Primitive &v) { setValue(v); return *this; }
operator Primitive() { return getValue; }
protected:
Primitive value;
};
/**
* IndirectIndexComparison class
*
* This class serves as a comparison function for arrays that are being sorted
* even though they only contain *indices* to the real data. Therefore, a reference
* to the original data as well as the data comparison function needs to be passed
* to this class for it to be functional.
*/
template<class DataContainer, class DataComparison>
class IndirectIndexComparison
{
public:
IndirectIndexComparison(const DataContainer &dstor, const DataComparison &dcmp) :
container(dstor), comparison(dcmp) { }
bool operator()(const unsigned &idx_1, const unsigned &idx_2) const
{
return comparison(container[idx_1], container[idx_2]);
}
private:
const DataContainer &container;
const DataComparison &comparison;
};