diff options
Diffstat (limited to 'src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simple_traits.h')
-rw-r--r-- | src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simple_traits.h | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simple_traits.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simple_traits.h new file mode 100644 index 00000000..3975bb46 --- /dev/null +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simple_traits.h @@ -0,0 +1,142 @@ +/* + * Skeleton_blocker_simple_traits.h + * + * Created on: Feb 11, 2014 + * Author: dsalinas + */ + +#ifndef GUDHI_SKELETON_BLOCKERS_SIMPLE_TRAITS_H_ +#define GUDHI_SKELETON_BLOCKERS_SIMPLE_TRAITS_H_ + +#include <string> +#include <sstream> +#include "Skeleton_blocker_simplex.h" + +namespace Gudhi{ + +namespace skbl { + +/** + * @extends SkeletonBlockerDS + */ +struct Skeleton_blocker_simple_traits{ + /** + * @brief global and local handle similar to <a href="http://www.boost.org/doc/libs/1_38_0/libs/graph/doc/subgraph.html">boost subgraphs</a>. + * In gross, vertices are stored in a vector. + * For the root simplicial complex, the local and global descriptors are the same. + * For a subcomplex L and one of its vertices 'v', the local descriptor of 'v' is its position in + * the vertex vector of the subcomplex L whereas its global descriptor is the position of 'v' + * in the vertex vector of the root simplicial complex. + */ + struct Root_vertex_handle{ + typedef int boost_vertex_handle; + explicit Root_vertex_handle(boost_vertex_handle val = -1 ):vertex(val){} + boost_vertex_handle vertex; + + bool operator!=( const Root_vertex_handle& other) const{ + return ! (this->vertex == other.vertex); + } + + bool operator==( const Root_vertex_handle& other) const{ + return this->vertex == other.vertex; + } + + bool operator<( const Root_vertex_handle& other) const{ + return this->vertex < other.vertex; + } + + friend std::ostream& operator << (std::ostream& o, const Root_vertex_handle & v) + { + o << v.vertex; + return o; + } + }; + + struct Vertex_handle{ + typedef int boost_vertex_handle; + Vertex_handle(boost_vertex_handle val=-1):vertex(val){} + + boost_vertex_handle vertex; + + bool operator==( const Vertex_handle& other) const{ + return this->vertex == other.vertex; + } + + bool operator!=( const Vertex_handle& other) const{ + return this->vertex != other.vertex; + } + + bool operator<(const Vertex_handle& other) const{ + return this->vertex < other.vertex; + } + + friend std::ostream& operator << (std::ostream& o, const Vertex_handle & v) + { + o << v.vertex; + return o; + } + }; + + + + class Graph_vertex { + bool is_active_; + Root_vertex_handle id_; + public: + virtual ~Graph_vertex(){} + + void activate(){is_active_=true;} + void deactivate(){is_active_=false;} + bool is_active() const{return is_active_;} + void set_id(Root_vertex_handle i){id_=i;} + Root_vertex_handle get_id() const{return id_;} + + virtual std::string to_string() const { + std::ostringstream res; + res<< id_; + return res.str(); + } + + friend std::ostream& operator << (std::ostream& o, const Graph_vertex & v){ + o << v.to_string(); + return o; + } + }; + + class Graph_edge { + Root_vertex_handle a_; + Root_vertex_handle b_; + int index_; + public: + + Graph_edge():a_(-1),b_(-1),index_(-1){} + + int& index(){return index_;} + int index() const {return index_;} + + void setId(Root_vertex_handle a,Root_vertex_handle b){ + a_ = a; + b_ = b; + } + + Root_vertex_handle first() const { + return a_; + } + + Root_vertex_handle second() const { + return b_; + } + + friend std::ostream& operator << (std::ostream& o, const Graph_edge & v){ + o << "("<<v.a_<<","<<v.b_<<" - id = "<<v.index(); + return o; + } + }; + +}; + +} + +} // namespace GUDHI + +#endif /* GUDHI_SKELETON_BLOCKERS_SIMPLE_TRAITS_H_ */ |