summaryrefslogtreecommitdiff
path: root/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/internal/Top_faces.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Skeleton_blocker/include/gudhi/Skeleton_blocker/internal/Top_faces.h')
-rw-r--r--src/Skeleton_blocker/include/gudhi/Skeleton_blocker/internal/Top_faces.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/internal/Top_faces.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/internal/Top_faces.h
new file mode 100644
index 00000000..0d870f1a
--- /dev/null
+++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/internal/Top_faces.h
@@ -0,0 +1,53 @@
+/*
+ * Top_faces.h
+ *
+ * Created on: Oct 23, 2014
+ * Author: dsalinas
+ */
+
+#ifndef TOP_FACES_H_
+#define TOP_FACES_H_
+
+#include <list>
+#include <vector>
+#include <set>
+
+template<typename SimplexHandle>
+std::list<SimplexHandle> subfaces(SimplexHandle top_face){
+ std::list<SimplexHandle> res;
+ if(top_face.dimension()==-1) return res;
+ if(top_face.dimension()==0) {
+ res.push_back(top_face);
+ return res;
+ }
+ else{
+ auto first_vertex = top_face.first_vertex();
+ top_face.remove_vertex(first_vertex);
+ res = subfaces(top_face);
+ std::list<SimplexHandle> copy = res;
+ for(auto& simplex : copy){
+ simplex.add_vertex(first_vertex);
+ }
+ res.push_back(SimplexHandle(first_vertex));
+ res.splice(res.end(),copy);
+ return res;
+ }
+}
+
+/**
+ * add all faces of top_face in simplices_per_dimension
+ */
+template<typename SimplexHandle>
+void register_faces(
+ std::vector< std::set<SimplexHandle> >& simplices_per_dimension,
+ const SimplexHandle& top_face){
+ std::list<SimplexHandle> subfaces_list = subfaces(top_face);
+ for(auto& simplex : subfaces_list ){
+ simplices_per_dimension[simplex.dimension()].insert(simplex);
+ }
+}
+
+
+
+
+#endif /* TOP_FACES_H_ */