5 #ifndef BALL_STRUCTURE_GRAPHFACE_H
6 #define BALL_STRUCTURE_GRAPHFACE_H
18 template <
typename Vertex,
typename Edge,
typename Face>
21 template <
typename Vertex,
typename Edge,
typename Face>
27 template <
typename Vertex,
typename Edge,
typename Face>
150 bool getEdges(const
Vertex* vertex, Edge*& edge1, Edge*& edge2) const;
185 bool substitute(const Edge* old_edge, Edge* new_edge);
195 virtual
bool operator == (const Face& face) const;
200 virtual
bool operator != (const Face& face) const;
205 virtual
bool operator *= (const Face& face) const;
218 Edge*
has(Edge* edge) const;
258 template <typename
Vertex, typename Edge, typename Face>
267 template <
typename Vertex,
typename Edge,
typename Face>
282 template <
typename Vertex,
typename Edge,
typename Face>
288 template <
typename Vertex,
typename Edge,
typename Face>
304 template <
typename Vertex,
typename Edge,
typename Face>
318 template <
typename Vertex,
typename Edge,
typename Face>
321 typename std::list<Vertex*>::iterator v =
vertex_.begin();
323 while ((!found) && (v !=
vertex_.end()))
325 found = (*v == vertex);
335 template <
typename Vertex,
typename Edge,
typename Face>
338 typename std::list<Edge*>::iterator e =
edge_.begin();
340 while ((!found) && (e !=
edge_.end()))
342 found = (*e == edge);
347 edge_.push_back(edge);
352 template <
typename Vertex,
typename Edge,
typename Face>
359 template <
typename Vertex,
typename Edge,
typename Face>
366 template <
typename Vertex,
typename Edge,
typename Face>
373 template <
typename Vertex,
typename Edge,
typename Face>
380 template <
typename Vertex,
typename Edge,
typename Face>
387 template <
typename Vertex,
typename Edge,
typename Face>
394 template <
typename Vertex,
typename Edge,
typename Face>
402 typename std::list<Edge*>::const_iterator e =
edge_.begin();
403 while ((!found1) && (e !=
edge_.end()))
405 if (((*e)->vertex_[0] == vertex) || ((*e)->vertex_[1] == vertex))
414 while ((!found2) && (e !=
edge_.end()))
416 if (((*e)->vertex_[0] == vertex) || ((*e)->vertex_[1] == vertex))
424 return (found1 && found2);
428 template <
typename Vertex,
typename Edge,
typename Face>
434 typename std::list<Edge*>::const_iterator e =
edge_.begin();
436 while ((!found) && (e !=
edge_.end()))
438 if ((((*e)->vertex_[0] == vertex1) && ((*e)->vertex_[1] == vertex2)) ||
439 (((*e)->vertex_[0] == vertex2) && ((*e)->vertex_[1] == vertex1)) )
450 template <
typename Vertex,
typename Edge,
typename Face>
453 typename std::list<Edge*>::const_iterator e =
edge_.begin();
454 while (e !=
edge_.end())
466 template <
typename Vertex,
typename Edge,
typename Face>
470 typename std::list<Vertex*>::iterator v =
vertex_.begin();
473 if (*v == old_vertex)
484 template <
typename Vertex,
typename Edge,
typename Face>
486 (
const Edge* old_edge, Edge* new_edge)
488 typename std::list<Edge*>::iterator e =
edge_.begin();
489 while (e !=
edge_.end())
502 template <
typename Vertex,
typename Edge,
typename Face>
509 template <
typename Vertex,
typename Edge,
typename Face>
516 template <
typename Vertex,
typename Edge,
typename Face>
523 template <
typename Vertex,
typename Edge,
typename Face>
526 typename std::list<Vertex*>::const_iterator v =
vertex_.begin();
539 template <
typename Vertex,
typename Edge,
typename Face>
542 typename std::list<Edge*>::const_iterator e =
edge_.begin();
543 while (e !=
edge_.end())
555 template <
typename Vertex,
typename Edge,
typename Face>
563 template <
typename Vertex,
typename Edge,
typename Face>
571 template <
typename Vertex,
typename Edge,
typename Face>
579 template <
typename Vertex,
typename Edge,
typename Face>
587 template <
typename Vertex,
typename Edge,
typename Face>
591 return edge_.begin();
595 template <
typename Vertex,
typename Edge,
typename Face>
599 return edge_.begin();
603 template <
typename Vertex,
typename Edge,
typename Face>
611 template <
typename Vertex,
typename Edge,
typename Face>
623 template <
typename Vertex,
typename Edge,
typename Face>
670 Edge* edge1, Edge* edge2, Edge* edge3,
711 Edge* edge1, Edge* edge2, Edge* edge3,
742 void setEdge(
Position i, Edge* edge);
769 bool getEdges(
const Vertex* vertex, Edge*& edge1, Edge*& edge2)
const;
796 Index getRelativeIndex(
const Vertex* vertex)
const;
801 Index getRelativeIndex(
const Edge* edge)
const;
815 Edge* third(
const Edge* e1,
const Edge* e2)
const;
823 Edge* getOppositeEdge(
const Vertex* vertex)
const;
831 Vertex* getOppositeVertex(
const Edge* edge)
const;
847 bool substitute(
const Edge* old_edge, Edge* new_edge);
880 Edge*
has(Edge* edge)
const;
900 template <
typename Vertex,
typename Edge,
typename Face>
913 template <
typename Vertex,
typename Edge,
typename Face>
923 edge_[0] = face.
edge_[0];
924 edge_[1] = face.
edge_[1];
925 edge_[2] = face.
edge_[2];
939 template <
typename Vertex,
typename Edge,
typename Face>
942 Edge* edge1, Edge* edge2, Edge* edge3,
946 vertex_[0] = vertex1;
947 vertex_[1] = vertex2;
948 vertex_[2] = vertex3;
955 template <
typename Vertex,
typename Edge,
typename Face>
961 template <
typename Vertex,
typename Edge,
typename Face>
972 edge_[0] = face.
edge_[0];
973 edge_[1] = face.
edge_[1];
974 edge_[2] = face.
edge_[2];
990 template <
typename Vertex,
typename Edge,
typename Face>
999 edge_[0] = face.
edge_[0];
1000 edge_[1] = face.
edge_[1];
1001 edge_[2] = face.
edge_[2];
1008 template <
typename Vertex,
typename Edge,
typename Face>
1011 Edge* edge1, Edge* edge2, Edge* edge3,
1014 vertex_[0] = vertex1;
1015 vertex_[1] = vertex2;
1016 vertex_[2] = vertex3;
1024 template <
typename Vertex,
typename Edge,
typename Face>
1033 vertex_[i] = vertex;
1038 template <
typename Vertex,
typename Edge,
typename Face>
1052 template <
typename Vertex,
typename Edge,
typename Face>
1066 template <
typename Vertex,
typename Edge,
typename Face>
1080 template <
typename Vertex,
typename Edge,
typename Face>
1087 template <
typename Vertex,
typename Edge,
typename Face>
1094 template <
typename Vertex,
typename Edge,
typename Face>
1101 bool found1 =
false;
1102 bool found2 =
false;
1103 while ((!found1) && (i < 3))
1105 if (edge_[i] != NULL)
1107 if ((edge_[i]->vertex_[0] == vertex) ||
1108 (edge_[i]->vertex_[1] == vertex) )
1118 while ((!found2) && (i < 3))
1120 if (edge_[i] != NULL)
1122 if ((edge_[i]->vertex_[0] == vertex) ||
1123 (edge_[i]->vertex_[1] == vertex) )
1132 return (found1 && found2);
1136 template <
typename Vertex,
typename Edge,
typename Face>
1144 while ((!found) && (i < 3))
1146 if (edge_[i] != NULL)
1148 if (((edge_[i]->vertex_[0] == vertex1) &&
1149 (edge_[i]->vertex_[1] == vertex2) ) ||
1150 ((edge_[i]->vertex_[0] == vertex2) &&
1151 (edge_[i]->vertex_[1] == vertex1) ) )
1163 template <
typename Vertex,
typename Edge,
typename Face>
1165 (
const Edge* edge, Edge*& similar_edge)
const
1167 if (*edge_[0] *= *edge)
1169 similar_edge = edge_[0];
1172 if (*edge_[1] *= *edge)
1174 similar_edge = edge_[1];
1177 if (*edge_[2] *= *edge)
1179 similar_edge = edge_[2];
1182 similar_edge = NULL;
1187 template <
typename Vertex,
typename Edge,
typename Face>
1193 if (vertex_[i] == vertex)
1202 template <
typename Vertex,
typename Edge,
typename Face>
1204 (
const Edge* edge)
const
1208 if (edge_[i] == edge)
1217 template <
typename Vertex,
typename Edge,
typename Face>
1221 if ((vertex_[0] == v1) || (vertex_[0] == v2))
1223 if ((vertex_[1] == v1) || (vertex_[1] == v2))
1239 template <
typename Vertex,
typename Edge,
typename Face>
1241 (
const Edge* e1,
const Edge* e2)
const
1243 if ((edge_[0] == e1) || (edge_[0] == e2))
1245 if ((edge_[1] == e1) || (edge_[1] == e2))
1261 template <
typename Vertex,
typename Edge,
typename Face>
1267 if ((edge_[i]->vertex_[0] != vertex) &&
1268 (edge_[i]->vertex_[1] != vertex) )
1277 template <
typename Vertex,
typename Edge,
typename Face>
1279 (
const Edge* edge)
const
1283 if ((vertex_[i] != edge->vertex_[0]) &&
1284 (vertex_[i] != edge->vertex_[1]) )
1293 template <
typename Vertex,
typename Edge,
typename Face>
1299 if (vertex_[i] == old_vertex)
1301 vertex_[i] = new_vertex;
1309 template <
typename Vertex,
typename Edge,
typename Face>
1311 (
const Edge* old_edge, Edge* new_edge)
1315 if (edge_[i] == old_edge)
1317 edge_[i] = new_edge;
1325 template <
typename Vertex,
typename Edge,
typename Face>
1332 template <
typename Vertex,
typename Edge,
typename Face>
1339 template <
typename Vertex,
typename Edge,
typename Face>
1346 template <
typename Vertex,
typename Edge,
typename Face>
1349 if (vertex_[0] == vertex)
1353 if (vertex_[1] == vertex)
1357 if (vertex_[2] == vertex)
1365 template <
typename Vertex,
typename Edge,
typename Face>
1368 if (edge_[0] == edge)
1372 if (edge_[1] == edge)
1376 if (edge_[2] == edge)
1386 #endif // BALL_STRUCTURE_RSFACE_H