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>
87 void set(const GraphFace<Vertex,Edge,Face>& face,
bool deep = false);
94 GraphFace<Vertex,Edge,Face>& operator =
95 (const GraphFace<Vertex,Edge,Face>& face);
105 void insert(Vertex* vertex);
115 void remove(Vertex* vertex);
150 bool getEdges(const Vertex* vertex, Edge*& edge1, Edge*& edge2) const;
160 (const Vertex* vertex1,
161 const Vertex* vertex2,
177 bool substitute(const Vertex* old_vertex, Vertex* new_vertex);
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;
212 Vertex*
has(Vertex* vertex) const;
218 Edge*
has(Edge* edge) const;
226 ConstVertexIterator beginVertex() const;
228 ConstVertexIterator endVertex() const;
230 ConstEdgeIterator beginEdge() const;
232 ConstEdgeIterator endEdge() const;
258 template <typename Vertex, typename Edge, typename Face>
259 GraphFace<Vertex,Edge,Face>::GraphFace()
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,
698 (
const GraphTriangle<Vertex,Edge,Face>& face);
711 Edge* edge1, Edge* edge2, Edge* edge3,
741 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>
915 (
const GraphTriangle<Vertex,Edge,Face>& face,
bool deep)
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>
963 (
const GraphTriangle<Vertex,Edge,Face>& face,
bool deep)
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>
992 (
const GraphTriangle<Vertex,Edge,Face>& 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>
1034 vertex_[i] = vertex;
1039 template <
typename Vertex,
typename Edge,
typename Face>
1054 template <
typename Vertex,
typename Edge,
typename Face>
1069 template <
typename Vertex,
typename Edge,
typename Face>
1084 template <
typename Vertex,
typename Edge,
typename Face>
1091 template <
typename Vertex,
typename Edge,
typename Face>
1098 template <
typename Vertex,
typename Edge,
typename Face>
1105 bool found1 =
false;
1106 bool found2 =
false;
1107 while ((!found1) && (i < 3))
1109 if (edge_[i] != NULL)
1111 if ((edge_[i]->vertex_[0] == vertex) ||
1112 (edge_[i]->vertex_[1] == vertex) )
1122 while ((!found2) && (i < 3))
1124 if (edge_[i] != NULL)
1126 if ((edge_[i]->vertex_[0] == vertex) ||
1127 (edge_[i]->vertex_[1] == vertex) )
1136 return (found1 && found2);
1140 template <
typename Vertex,
typename Edge,
typename Face>
1148 while ((!found) && (i < 3))
1150 if (edge_[i] != NULL)
1152 if (((edge_[i]->vertex_[0] == vertex1) &&
1153 (edge_[i]->vertex_[1] == vertex2) ) ||
1154 ((edge_[i]->vertex_[0] == vertex2) &&
1155 (edge_[i]->vertex_[1] == vertex1) ) )
1167 template <
typename Vertex,
typename Edge,
typename Face>
1169 (
const Edge* edge, Edge*& similar_edge)
const 1171 if (*edge_[0] *= *edge)
1173 similar_edge = edge_[0];
1176 if (*edge_[1] *= *edge)
1178 similar_edge = edge_[1];
1181 if (*edge_[2] *= *edge)
1183 similar_edge = edge_[2];
1186 similar_edge = NULL;
1191 template <
typename Vertex,
typename Edge,
typename Face>
1197 if (vertex_[i] == vertex)
1206 template <
typename Vertex,
typename Edge,
typename Face>
1208 (
const Edge* edge)
const 1212 if (edge_[i] == edge)
1221 template <
typename Vertex,
typename Edge,
typename Face>
1225 if ((vertex_[0] == v1) || (vertex_[0] == v2))
1227 if ((vertex_[1] == v1) || (vertex_[1] == v2))
1243 template <
typename Vertex,
typename Edge,
typename Face>
1245 (
const Edge* e1,
const Edge* e2)
const 1247 if ((edge_[0] == e1) || (edge_[0] == e2))
1249 if ((edge_[1] == e1) || (edge_[1] == e2))
1265 template <
typename Vertex,
typename Edge,
typename Face>
1271 if ((edge_[i]->vertex_[0] != vertex) &&
1272 (edge_[i]->vertex_[1] != vertex) )
1281 template <
typename Vertex,
typename Edge,
typename Face>
1283 (
const Edge* edge)
const 1287 if ((vertex_[i] != edge->vertex_[0]) &&
1288 (vertex_[i] != edge->vertex_[1]) )
1297 template <
typename Vertex,
typename Edge,
typename Face>
1303 if (vertex_[i] == old_vertex)
1305 vertex_[i] = new_vertex;
1313 template <
typename Vertex,
typename Edge,
typename Face>
1315 (
const Edge* old_edge, Edge* new_edge)
1319 if (edge_[i] == old_edge)
1321 edge_[i] = new_edge;
1329 template <
typename Vertex,
typename Edge,
typename Face>
1336 template <
typename Vertex,
typename Edge,
typename Face>
1343 template <
typename Vertex,
typename Edge,
typename Face>
1350 template <
typename Vertex,
typename Edge,
typename Face>
1353 if (vertex_[0] == vertex)
1357 if (vertex_[1] == vertex)
1361 if (vertex_[2] == vertex)
1369 template <
typename Vertex,
typename Edge,
typename Face>
1372 if (edge_[0] == edge)
1376 if (edge_[1] == edge)
1380 if (edge_[2] == edge)
1390 #endif // BALL_STRUCTURE_RSFACE_H
std::list< SASVertex *>::iterator VertexIterator
#define BALL_CREATE(name)
void insert(Vertex *vertex)
std::list< SASEdge *>::iterator EdgeIterator
std::list< Edge * > edge_
bool substitute(const Vertex *old_vertex, Vertex *new_vertex)
std::list< Vertex * > vertex_
virtual bool operator!=(const Face &face) const
bool getEdge(const Vertex *vertex1, const Vertex *vertex2, Edge *&edge) const
BALL_EXPORT bool operator!=(const String &s1, const String &s2)
VertexIterator beginVertex()
void remove(Vertex *vertex)
void setIndex(Index index)
bool getEdges(const Vertex *vertex, Edge *&edge1, Edge *&edge2) const
virtual bool operator*=(const Face &face) const
Vertex * has(Vertex *vertex) const
BALL_EXPORT bool operator==(const String &s1, const String &s2)
-*- Mode: C++; tab-width: 2; -*-
Position numberOfVertices() const
virtual bool operator==(const Face &face) const
Edge * getSimilarEdge(const Edge *edge) const
VertexIterator endVertex()
void set(const GraphFace< Vertex, Edge, Face > &face, bool deep=false)
Position numberOfEdges() const
std::list< SASEdge *>::const_iterator ConstEdgeIterator
std::list< SASVertex *>::const_iterator ConstVertexIterator