25 const std::vector<Vertex>&
vertices()
const;
26 const std::vector<Edge>& edges()
const;
27 const std::vector<Face>& faces()
const;
28 const std::vector<Tet>& tets()
const;
30 void reserve_vertices(
size_t new_capacity) { m_v.reserve(new_capacity); }
31 void reserve_edges(
size_t new_capacity) { m_e.reserve(new_capacity); }
32 void reserve_faces(
size_t new_capacity) { m_f.reserve(new_capacity); }
33 void reserve_tets(
size_t new_capacity) { m_t.reserve(new_capacity); }
41 void add(
const Edge& s) { m_e.emplace_back(s); }
42 void add(
const Face& s) { m_f.emplace_back(s); }
43 void add(
const Tet& s) { m_t.emplace_back(s); }
56 const auto& v = s.vertices();
57 m_v.emplace_back(
Vertex(v[0]));
58 m_v.emplace_back(
Vertex(v[1]));
63 const auto& v = s.vertices();
64 m_v.emplace_back(
Vertex(v[0]));
65 m_v.emplace_back(
Vertex(v[1]));
66 m_v.emplace_back(
Vertex(v[2]));
67 m_e.emplace_back(
Edge(v[0], v[1]));
68 m_e.emplace_back(
Edge(v[0], v[2]));
69 m_e.emplace_back(
Edge(v[1], v[2]));
74 const auto& v = s.vertices();
75 m_v.emplace_back(Vertex(v[0]));
76 m_v.emplace_back(Vertex(v[1]));
77 m_v.emplace_back(Vertex(v[2]));
78 m_v.emplace_back(Vertex(v[3]));
79 m_e.emplace_back(Edge(v[0], v[1]));
80 m_e.emplace_back(Edge(v[0], v[2]));
81 m_e.emplace_back(Edge(v[0], v[3]));
82 m_e.emplace_back(Edge(v[1], v[2]));
83 m_e.emplace_back(Edge(v[1], v[3]));
84 m_e.emplace_back(Edge(v[2], v[3]));
85 m_f.emplace_back(Face(v[0], v[1], v[2]));
86 m_f.emplace_back(Face(v[0], v[1], v[3]));
87 m_f.emplace_back(Face(v[0], v[2], v[3]));
88 m_f.emplace_back(Face(v[1], v[2], v[3]));
91 void add(
const SimplexCollection& simplex_collection);
105 assert(std::is_sorted(m_v.begin(), m_v.end()));
106 return std::binary_search(m_v.begin(), m_v.end(), simplex);
110 assert(std::is_sorted(m_e.begin(), m_e.end()));
111 return std::binary_search(m_e.begin(), m_e.end(), simplex);
113 bool contains(
const Face& simplex)
const
115 assert(std::is_sorted(m_f.begin(), m_f.end()));
116 return std::binary_search(m_f.begin(), m_f.end(), simplex);
118 bool contains(
const Tet& simplex)
const
120 assert(std::is_sorted(m_t.begin(), m_t.end()));
121 return std::binary_search(m_t.begin(), m_t.end(), simplex);
130 const SimplexCollection& collection_a,
131 const SimplexCollection& collection_b);
139 const SimplexCollection& collection_a,
140 const SimplexCollection& collection_b);
148 const SimplexCollection& collection_a,
149 const SimplexCollection& collection_b);
157 std::vector<Face> faces_with_edge(
const Edge& e)
const;
160 bool empty()
const {
return size() == 0; }
162 bool operator==(
const SimplexCollection& that)
const;
163 bool operator!=(
const SimplexCollection& that)
const;
166 std::vector<Vertex> m_v;
167 std::vector<Edge> m_e;
168 std::vector<Face> m_f;
169 std::vector<Tet> m_t;