1 //
2 // vertex.cc
3 //
4
5 #include "wx/string.h"
6
7 #include <iostream>
8 #include "edge.h"
9 #include "vertex.h"
10
11
Vertex(wxString & lbl,int _x,int _y)12 Vertex::Vertex (wxString &lbl, int _x, int _y)
13 : label (lbl), x (_x), y (_y), selected (false), next (0)
14 {
15 }
16
Vertex(char * lbl,int _x,int _y)17 Vertex::Vertex (char *lbl, int _x, int _y)
18 : label (wxString (lbl, wxConvUTF8)), x (_x), y (_y),
19 selected (false), next (0)
20 {
21 }
22
Vertex(const Vertex & other)23 Vertex::Vertex (const Vertex &other)
24 : label (other.label), x (other.x), y (other.y), selected (false),
25 next (0)
26 {
27 }
28
degree() const29 unsigned int Vertex::degree () const
30 {
31 return edges.size ();
32 }
33
indegree() const34 unsigned int Vertex::indegree () const
35 {
36 e_const_iterator eit;
37 int cnt = 0;
38
39 for (eit = e_begin (); eit != e_end (); ++eit)
40 if ((*eit)->directed && ((*eit)->w == this))
41 ++cnt;
42 return cnt;
43 }
44
outdegree() const45 unsigned int Vertex::outdegree () const
46 {
47 e_const_iterator eit;
48 int cnt = 0;
49
50 for (eit = e_begin (); eit != e_end (); ++eit)
51 if ((*eit)->directed && ((*eit)->v == this))
52 ++cnt;
53 return cnt;
54 }
55
opposite(const Edge * e) const56 Vertex *Vertex::opposite (const Edge *e) const
57 {
58 return (e->v == this) ? e->w : e->v;
59 }
60
e_begin()61 Vertex::e_iterator Vertex::e_begin ()
62 {
63 return edges.begin ();
64 }
65
e_end()66 Vertex::e_iterator Vertex::e_end ()
67 {
68 return edges.end ();
69 }
70
e_begin() const71 Vertex::e_const_iterator Vertex::e_begin () const
72 {
73 return edges.begin ();
74 }
75
e_end() const76 Vertex::e_const_iterator Vertex::e_end () const
77 {
78 return edges.end ();
79 }
80
hook(Edge * e)81 void Vertex::hook (Edge *e)
82 {
83 edges.push_back (e);
84 }
85
unhook(Edge * e)86 void Vertex::unhook (Edge *e)
87 {
88 e_iterator eit;
89
90 for (eit = e_begin (); eit != e_end (); ++eit)
91 if (*eit == e)
92 break;
93 if (eit == e_end ())
94 return; // fail silently
95 edges.erase (eit);
96 }
97
operator =(const Vertex & other)98 Vertex &Vertex::operator= (const Vertex &other)
99 {
100 if (this == &other)
101 return *this;
102
103 label = other.label;
104 x = other.x;
105 y = other.y;
106
107 return *this;
108 }
109
operator <<(std::ostream & o,const Vertex & v)110 std::ostream &operator<< (std::ostream &o, const Vertex &v)
111 {
112 return (o << "vertex \"" << v.label.mb_str (wxConvUTF8) << "\" at ("
113 << v.x << ',' << v.y << ")\n");
114 }
115