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