- inline void del_edge(Edge *e) {
- if(e == root_edge) { root_edge = e->next; }
- if(e->pred) { e->pred->next = e->next; }
- if(e->next) { e->next->pred = e->pred; }
- }
-};
+void Edge::revert() {
+ length = - length;
+ work_length = 0;
+ origin_vertex->del_edge(this);
+ terminal_vertex->add_edge(this);
+ Vertex *t = terminal_vertex;
+ terminal_vertex = origin_vertex;
+ origin_vertex = t;
+}
+
+//////////////////////////////////////////////////////////////////////
+
+Vertex::Vertex() {
+ root_edge = 0;
+}
+
+void Vertex::add_edge(Edge *e) {
+ e->next = root_edge;
+ e->pred = 0;
+ if(root_edge) { root_edge->pred = e; }
+ root_edge = e;
+}
+
+void Vertex::del_edge(Edge *e) {
+ if(e == root_edge) { root_edge = e->next; }
+ if(e->pred) { e->pred->next = e->next; }
+ if(e->next) { e->next->pred = e->pred; }
+}
+
+//////////////////////////////////////////////////////////////////////