11#ifndef SKELETON_BLOCKER_INTERNAL_TOP_FACES_H_
12#define SKELETON_BLOCKER_INTERNAL_TOP_FACES_H_
20namespace skeleton_blocker {
22template<
typename SimplexHandle>
23std::list<SimplexHandle> subfaces(SimplexHandle top_face) {
24 std::list<SimplexHandle> res;
25 if (top_face.dimension() == -1)
return res;
26 if (top_face.dimension() == 0) {
27 res.push_back(top_face);
30 auto first_vertex = top_face.first_vertex();
31 top_face.remove_vertex(first_vertex);
32 res = subfaces(top_face);
33 std::list<SimplexHandle> copy = res;
34 for (
auto& simplex : copy) {
35 simplex.add_vertex(first_vertex);
37 res.push_back(SimplexHandle(first_vertex));
38 res.splice(res.end(), copy);
46template<
typename SimplexHandle>
47void register_faces(std::vector< std::set<SimplexHandle> >& simplices_per_dimension,
48 const SimplexHandle& top_face) {
49 std::list<SimplexHandle> subfaces_list = subfaces(top_face);
50 for (
auto& simplex : subfaces_list) {
51 simplices_per_dimension[simplex.dimension()].insert(simplex);
57namespace skbl = skeleton_blocker;