author Aravindakshan Babu <>
Thu, 08 Jul 2010 23:50:39 -0700
changeset 217 64a272a34cb2
parent 100 884f70adc576
permissions -rw-r--r--
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. Added an iterator for Point objects. This iterates over the coords and then the data( if present ).

 * 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>
        typedef     Simplex<V,T>                                        Parent;
        typedef     ConeSimplex<V,T>                                    Self;

                                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;
        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
                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__