From 55c7181126aa7defce38c9b82872d14223d4c1dd Mon Sep 17 00:00:00 2001 From: Gard Spreemann Date: Tue, 7 Feb 2017 17:33:01 +0100 Subject: Initial import of upstream's 1.3.1. --- concept/Skeleton_blocker/SkeletonBlockerDS.h | 128 +++++++++++++++++++++ .../Skeleton_blocker/SkeletonBlockerGeometricDS.h | 77 +++++++++++++ 2 files changed, 205 insertions(+) create mode 100644 concept/Skeleton_blocker/SkeletonBlockerDS.h create mode 100644 concept/Skeleton_blocker/SkeletonBlockerGeometricDS.h (limited to 'concept/Skeleton_blocker') diff --git a/concept/Skeleton_blocker/SkeletonBlockerDS.h b/concept/Skeleton_blocker/SkeletonBlockerDS.h new file mode 100644 index 00000000..3c650f99 --- /dev/null +++ b/concept/Skeleton_blocker/SkeletonBlockerDS.h @@ -0,0 +1,128 @@ +/* + * SkeletonBlockerDS.h + * + * Created on: Feb 20, 2014 + * Author: David Salinas + * Copyright 2013 INRIA. All rights reserved + */ + +#ifndef GUDHI_SKELETONBLOCKERDS_H_ +#define GUDHI_SKELETONBLOCKERDS_H_ + + +namespace Gudhi { + +namespace skeleton_blocker { + + + +/** \brief Concept for the template class passed for Skeleton_blocker_complex. + * Most importantly, it contains the nodes for vertices and edges + * (Graph_vertex and Graph_edge) that are stored in the simplicial + * complex. The user can redefine these classes to attach + * additional information to vertices and edges. + */ +struct SkeletonBlockerDS +{ + /** + * @brief index that allows to find the vertex in the boost graph + */ + typedef int boost_vertex_handle; + + + /** + * @brief Root_vertex_handle and Vertex_handle are similar to global and local vertex descriptor + * used in boost subgraphs + * and allow to localize a vertex of a subcomplex on its parent root complex. + * + * In gross, vertices are stored in a vector + * and the Root_vertex_handle and Vertex_handle store indices of a vertex in this vector. + * + * For the root simplicial complex, the Root_vertex_handle and Vertex_handle of a vertex + * are the same. + * + * + * For a subcomplex L of a simplicial complex K, the local descriptor, ie the Vertex_handle, of a + * vertex v (that belongs to L) is its position in the vector of vertices + * of the subcomplex L whereas its Root_vertex_handle (global descriptor) is the position of v in the vector of the + * vertices of the root simplicial complex K. + */ + struct Root_vertex_handle{ + + boost_vertex_handle vertex; + + friend ostream& operator << (ostream& o, const Root_vertex_handle & v); + }; + + /** + * A Vertex_handle must be Default Constructible, Assignable and Equality Comparable. + */ + struct Vertex_handle{ + boost_vertex_handle vertex; + + friend ostream& operator << (ostream& o, const Vertex_handle & v); + }; + + + /** + * \brief The type of vertices that are stored the boost graph. + * A Vertex must be Default Constructible and Equality Comparable. + * + */ + struct Graph_vertex{ + /** \brief Used to deactivate a vertex for example when contracting an edge. + * It allows in some cases to remove the vertex at low cost. + */ + void deactivate(); + + /** \brief Used to activate a vertex. + */ + void activate(); + + /** \brief Tells if the vertex is active. + */ + bool is_active() const; + + void set_id(Root_vertex_handle i); + Root_vertex_handle get_id() const; + virtual string to_string() const ; + friend ostream& operator << (ostream& o, const Graph_vertex & v); + }; + + + /** + * \brief The type of edges that are stored the boost graph. + * An Edge must be Default Constructible and Equality Comparable. + */ + struct Graph_edge{ + /** + * @brief Allows to modify vertices of the edge. + */ + void setId(Root_vertex_handle a,Root_vertex_handle b); + + /** + * @brief Returns the first vertex of the edge. + */ + Root_vertex_handle first() const ; + + /** + * @brief Returns the second vertex of the edge. + */ + Root_vertex_handle second() const ; + + friend ostream& operator << (ostream& o, const Simple_edge & v); + }; + + +}; + + + +} // namespace skeleton_blocker + +namespace skbl = skeleton_blocker; + +} // namespace Gudhi + + +#endif /* GUDHI_SKELETONBLOCKERDS_H_ */ diff --git a/concept/Skeleton_blocker/SkeletonBlockerGeometricDS.h b/concept/Skeleton_blocker/SkeletonBlockerGeometricDS.h new file mode 100644 index 00000000..c5d52800 --- /dev/null +++ b/concept/Skeleton_blocker/SkeletonBlockerGeometricDS.h @@ -0,0 +1,77 @@ +/* + * SkeletonBlockerGeometricDS.h + * + * Created on: Feb 20, 2014 + * Author: David Salinas + * Copyright 2013 INRIA. All rights reserved + */ + +#ifndef GUDHI_SKELETONBLOCKERGEOMETRICDS_H_ +#define GUDHI_SKELETONBLOCKERGEOMETRICDS_H_ + +namespace Gudhi { +namespace skeleton_blocker { + +/** + * \brief Concept for template class of Skeleton_blocker_geometric_complex . + * It must specify a GeometryTrait which contains a Point definition. + * + * Graph_vertex must specify how to access to a point. + * Graph_edge must specify how to access to an index. + * + */ + //todo the index is just for contraction, to remove +template +struct SkeletonBlockerGeometricDS : public SkeletonBlockerDS +{ + + /** + * Geometry information. + */ + typedef GeometryTrait GT ; + + /** + * Type of point (should be the same as GT::Point). + */ + typedef typename GeometryTrait::Point Point; + + /** + * @brief Vertex that stores a point. + */ + class Graph_vertex : public SkeletonBlockerDS::Graph_vertex{ + public: + /** + * @brief Access to the point. + */ + Point& point(); + /** + * @brief Access to the point. + */ + const Point& point(); + }; + + /** + * @brief Edge that allows to access to an index. + * The indices of the edges are used to store heap information + * in the edge contraction algorithm. + */ + class Graph_Edge : public SkeletonBlockerDS::Graph_edge{ + public: + /** + * @brief Access to the index. + */ + int& index(); + /** + * @brief Access to the index. + */ + int index(); + }; +}; + +} // namespace skeleton_blocker + +namespace skbl = skeleton_blocker; + +} // namespace Gudhi + +#endif /* GUDHI_SKELETONBLOCKERGEOMETRICDS_H_ */ -- cgit v1.2.3