From ea7c12f8a1d5b13a07f7ab6c2ca8f4e7f6debf7c Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Wed, 9 Nov 2016 16:11:20 +0100
Subject: [PATCH] enable and fix additional warnings for alib2algo_experimental

---
 alib2algo_experimental/makefile               |   4 +-
 .../src/graph/datastructs/BinomialHeap.h      |   4 +-
 .../src/graph/datastructs/FibonacciHeap.h     |   4 +-
 .../src/graph/embedding/HopcroftTarjan.cpp    | 163 +++++++++---------
 .../src/graph/isomorphism/HopcroftGraph.cpp   |  44 ++---
 .../src/graph/shortestpath/BellmanFord.cpp    |  12 +-
 .../src/graph/shortestpath/Dijkstra.cpp       |   6 +-
 .../src/graph/sort/TopologicalSort.cpp        |   8 +-
 .../src/graph/spanningtree/Edmonds.cpp        |   4 +-
 .../src/graph/spanningtree/JarnikPrim.cpp     |   6 +-
 .../src/graph/spanningtree/Kruskal.cpp        |   2 +-
 .../graph/minimumcut/FordFulkersonTest.cpp    |   4 +-
 12 files changed, 129 insertions(+), 132 deletions(-)

diff --git a/alib2algo_experimental/makefile b/alib2algo_experimental/makefile
index 38bca86b66..bf9f76e926 100644
--- a/alib2algo_experimental/makefile
+++ b/alib2algo_experimental/makefile
@@ -10,6 +10,8 @@ endef
 
 export NEW_LINE
 
+CXX_FLAGS := -Wall -pedantic -Wextra -Werror -Wshadow -Wpointer-arith -Wcast-qual -Wdelete-non-virtual-dtor -Wredundant-decls
+
 space := $(eval) $(eval)
 
 LDFLAGS_DEBUG:=-rdynamic -shared
@@ -54,7 +56,7 @@ FORCE:
 	$${NEW_LINE}\
 	export NEW_LINE$${NEW_LINE}\
 	$${NEW_LINE}\
-	CXXFLAGS:= -pipe -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -Werror -fPIC \$$(addprefix -I, \$$(realpath $(INCLUDE_PATHS))) -I\$$(realpath \$$(SOURCES_BASE_DIR)/../src/)$${NEW_LINE}\
+	CXXFLAGS:= -pipe -std=c++11 \$$(CXX_OTHER_FLAGS) -c $(CXX_FLAGS) -fPIC \$$(addprefix -I, \$$(realpath $(INCLUDE_PATHS))) -I\$$(realpath \$$(SOURCES_BASE_DIR)/../src/)$${NEW_LINE}\
 	$${NEW_LINE}\
 	SOURCES:= \$$(shell find \$$(SOURCES_BASE_DIR)/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")$${NEW_LINE}\
 	DEPENDENCIES:= \$$(patsubst \$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))$${NEW_LINE}\
diff --git a/alib2algo_experimental/src/graph/datastructs/BinomialHeap.h b/alib2algo_experimental/src/graph/datastructs/BinomialHeap.h
index ca5f9d6117..e6a77ffa33 100644
--- a/alib2algo_experimental/src/graph/datastructs/BinomialHeap.h
+++ b/alib2algo_experimental/src/graph/datastructs/BinomialHeap.h
@@ -38,8 +38,8 @@ class BinomialHeap {
 		Node * parent;
 		Node * child;
 		Node * sibling;
-		Node( const elem_t & value, uint degree = 0, Node * parent = NULL, Node * child = NULL, Node * sibling = NULL )
-		 : value(value), degree(degree), parent(parent), child(child), sibling(sibling) {}
+		Node( const elem_t & val, uint deg = 0, Node * par = NULL, Node * chld = NULL, Node * sib = NULL )
+		 : value(val), degree(deg), parent(par), child(chld), sibling(sib) {}
 	};
 
 	Node *  _head;    ///< head of a singly linked list of binomial trees
diff --git a/alib2algo_experimental/src/graph/datastructs/FibonacciHeap.h b/alib2algo_experimental/src/graph/datastructs/FibonacciHeap.h
index 7bc4683eb3..f7d7dc065e 100644
--- a/alib2algo_experimental/src/graph/datastructs/FibonacciHeap.h
+++ b/alib2algo_experimental/src/graph/datastructs/FibonacciHeap.h
@@ -41,8 +41,8 @@ class FibonacciHeap {
 		Node * child;
 		Node * prev;
 		Node * next;
-		Node(const elem_t & value, uint degree = 0, Node * parent = NULL, Node * child = NULL, Node * prev = NULL, Node * next = NULL)
-		 : value(value), degree(degree), mark(false), parent(parent), child(child), prev(prev), next(next) {}
+		Node(const elem_t & val, uint deg = 0, Node * par = NULL, Node * chld = NULL, Node * pr = NULL, Node * ne = NULL)
+		 : value(val), degree(deg), mark(false), parent(par), child(chld), prev(pr), next(ne) {}
 	};
 
 	Node *  _max;     ///< pointer to cyclic doubly linked list of trees
diff --git a/alib2algo_experimental/src/graph/embedding/HopcroftTarjan.cpp b/alib2algo_experimental/src/graph/embedding/HopcroftTarjan.cpp
index 438318e6aa..557e94217a 100644
--- a/alib2algo_experimental/src/graph/embedding/HopcroftTarjan.cpp
+++ b/alib2algo_experimental/src/graph/embedding/HopcroftTarjan.cpp
@@ -21,14 +21,11 @@ namespace embedding
 
 // Helpers
 
-using node = Node;
-using edge = DirectedEdge;
-
 template <typename T>
-using edge_array = std::unordered_map<edge, T>;
+using edge_array = std::unordered_map<DirectedEdge, T>;
 
 template <typename T>
-using node_array = std::unordered_map<node, T>;
+using node_array = std::unordered_map<Node, T>;
 
 template<typename T>
 inline void conc(T &container, T &l)
@@ -40,7 +37,7 @@ class GraphWrapper {
 public:
 	explicit GraphWrapper(DirectedGraph *g) : m_g(g) { }
 
-	std::vector<DirectedEdge> adj_edges(const node &n) const
+	std::vector<DirectedEdge> adj_edges(const Node &n) const
 	{
 		std::vector<DirectedEdge> out;
 		const auto &edges = m_g->neighborEdges(n);
@@ -58,7 +55,7 @@ public:
 		return out;
 	}
 
-	edge first_adj_edge(const node &n) const
+	DirectedEdge first_adj_edge(const Node &n) const
 	{
 		return adj_edges(n).front();
 	}
@@ -68,7 +65,7 @@ public:
 		return m_g->getNodes();
 	}
 
-	node first_node() const
+	Node first_node() const
 	{
 		return *m_g->getNodes().begin();
 	}
@@ -88,7 +85,7 @@ public:
 		m_sortedEdges = sorted;
 	}
 
-	void del_edge(const edge &e)
+	void del_edge(const DirectedEdge &e)
 	{
 		m_g->removeEdge(e);
 	}
@@ -111,9 +108,7 @@ private:
 	edge_array<int> m_sortedEdges;
 };
 
-using graph = GraphWrapper;
-
-bool createReversal(const graph &g, edge_array<edge> &reversal)
+bool createReversal(const GraphWrapper &g, edge_array<DirectedEdge> &reversal)
 {
 	std::vector<DirectedEdge> edges = g.all_edges();
 
@@ -148,10 +143,10 @@ class Block
 {
 private:
 	std::list<int> Latt, Ratt; // list of attachments
-	std::list<edge> Lseg, Rseg; // list of segments represented by their defining edges
+	std::list<DirectedEdge> Lseg, Rseg; // list of segments represented by their defining edges
 
 public:
-	Block(const edge &e, std::list<int> &A)
+	Block(const DirectedEdge &e, std::list<int> &A)
 	{
 		Lseg.push_back(e);
 		conc(Latt, A);
@@ -161,7 +156,7 @@ public:
 	void flip()
 	{
 		std::list<int> ha;
-		std::list<edge> he;
+		std::list<DirectedEdge> he;
 		// we first interchange |Latt| and |Ratt| and then |Lseg| and |Rseg|
 		conc(ha, Ratt);
 		conc(Ratt, Latt);
@@ -237,10 +232,10 @@ public:
 			return false;
 
 		// |Latt| and |Ratt| are empty; we record the placement of the subsegments in |alpha|.
-		for (const edge &e : Lseg)
+		for (const DirectedEdge &e : Lseg)
 			alpha[e] = LEFT;
 
-		for (const edge &e : Rseg)
+		for (const DirectedEdge &e : Rseg)
 			alpha[e] = RIGHT;
 
 		return true;
@@ -259,40 +254,40 @@ public:
 		// or $\{w0\}$. Also if |Ratt| is non-empty then all subsequent sets are contained
 		// in $\{w0\}$. So we indeed compute an ordered set of attachments.
 
-		for (const edge &e : Lseg)
+		for (const DirectedEdge &e : Lseg)
 			alpha[e] = LEFT;
 
-		for (const edge &e : Rseg)
+		for (const DirectedEdge &e : Rseg)
 			alpha[e] = RIGHT;
 	}
 };
 
-static void dfs_in_reorder(const graph &G, std::list<edge> &Del, node v, int &dfs_count,
+static void dfs_in_reorder(const GraphWrapper &G, std::list<DirectedEdge> &Del, Node v, int &dfs_count,
 	node_array<bool> &reached,
 	node_array<int> &dfsnum,
 	node_array<int> &lowpt1, node_array<int> &lowpt2,
-	node_array<node> &parent);
+	node_array<Node> &parent);
 
-static void reorder(graph &G, node_array<int> &dfsnum, node_array<node> &parent)
+static void reorder(GraphWrapper &G, node_array<int> &dfsnum, node_array<Node> &parent)
 {
 	node_array<bool> reached;
 	int dfs_count = 0;
-	std::list<edge> Del;
+	std::list<DirectedEdge> Del;
 	node_array<int> lowpt1, lowpt2;
 
 	dfs_in_reorder(G, Del, G.first_node(), dfs_count, reached, dfsnum, lowpt1, lowpt2, parent);
 
 	// remove forward and reversals of tree edges
 
-	for (const edge &e : Del)
+	for (const DirectedEdge &e : Del)
 		G.del_edge(e);
 
 	// we now reorder adjacency lists as described in \cite[page 101]{Me:book}
 
 	edge_array<int> cost;
-	for (const edge &e : G.all_edges()) {
-		node v = e.getFromNode();
-		node w = e.getToNode();
+	for (const DirectedEdge &e : G.all_edges()) {
+		Node v = e.getFromNode();
+		Node w = e.getToNode();
 		cost[e] = ((dfsnum[w] < dfsnum[v]) ?
 		2 * dfsnum[w] :
 		((lowpt2[w] >= dfsnum[v]) ?
@@ -302,18 +297,18 @@ static void reorder(graph &G, node_array<int> &dfsnum, node_array<node> &parent)
 	G.sort_edges(cost);
 }
 
-static void dfs_in_reorder(const graph &G, std::list<edge> &Del, node v, int &dfs_count,
+static void dfs_in_reorder(const GraphWrapper &G, std::list<DirectedEdge> &Del, Node v, int &dfs_count,
 	node_array<bool> &reached,
 	node_array<int> &dfsnum,
 	node_array<int> &lowpt1, node_array<int> &lowpt2,
-	node_array<node> &parent)
+	node_array<Node> &parent)
 {
 	dfsnum[v] = dfs_count++;
 	lowpt1[v] = lowpt2[v] = dfsnum[v];
 	reached[v] = true;
 
-	for (const edge &e : G.adj_edges(v)) {
-		node w = e.getToNode();
+	for (const DirectedEdge &e : G.adj_edges(v)) {
+		Node w = e.getToNode();
 		if (!reached[w]) { // e is a tree edge
 			parent.erase(w);
 			parent.insert({w, v});
@@ -330,8 +325,8 @@ static void dfs_in_reorder(const graph &G, std::list<edge> &Del, node v, int &df
 	// we know |lowpt1[v]| at this point and now make a second pass over all
 	// adjacent edges of |v| to compute |lowpt2|
 
-	for (const edge &e : G.adj_edges(v)) {
-		node w = e.getToNode();
+	for (const DirectedEdge &e : G.adj_edges(v)) {
+		Node w = e.getToNode();
 		if (parent.at(w) == v) { // tree edge
 			if (lowpt1[w] != lowpt1[v])
 				lowpt2[v] = std::min(lowpt2[v], lowpt1[w]);
@@ -342,39 +337,39 @@ static void dfs_in_reorder(const graph &G, std::list<edge> &Del, node v, int &df
 	}
 }
 
-static bool strongly_planar(edge e0, const graph &G, std::list<int> &Att,
+static bool strongly_planar(DirectedEdge e0, const GraphWrapper &G, std::list<int> &Att,
 	edge_array<int> &alpha,
 	node_array<int> &dfsnum,
-	node_array<node> &parent)
+	node_array<Node> &parent)
 {
-	node x = e0.getFromNode();
+	Node x = e0.getFromNode();
 
-	node y = e0.getToNode();
+	Node y = e0.getToNode();
 
-	edge e = G.first_adj_edge(y);
+	DirectedEdge e = G.first_adj_edge(y);
 
-	node wk = y;
+	Node wk = y;
 
 	while (dfsnum[e.getToNode()] > dfsnum[wk]) { // e is a tree edge
 		wk = e.getToNode();
 		e = G.first_adj_edge(wk);
 	}
 
-	node w0 = e.getToNode();
+	Node w0 = e.getToNode();
 
-	node w = wk;
+	Node w = wk;
 
 	std::stack<Block*> S;
 
 	while (w != x) {
 		int count = 0;
-		for (const edge &e : G.adj_edges(w)) {
+		for (const DirectedEdge &ed : G.adj_edges(w)) {
 			count++;
 			if (count != 1) { // no action for first edge
 				std::list<int> A;
 
-				if (dfsnum[w] < dfsnum[e.getToNode()]) { // tree edge
-					if (!strongly_planar(e, G, A, alpha, dfsnum, parent)) {
+				if (dfsnum[w] < dfsnum[ed.getToNode()]) { // tree edge
+					if (!strongly_planar(ed, G, A, alpha, dfsnum, parent)) {
 						while (!S.empty()) {
 							delete S.top();
 							S.pop();
@@ -383,10 +378,10 @@ static bool strongly_planar(edge e0, const graph &G, std::list<int> &Att,
 					}
 				}
 				else {
-					A.push_back(dfsnum[e.getToNode()]); // a back edge
+					A.push_back(dfsnum[ed.getToNode()]); // a back edge
 				}
 
-				Block *B = new Block(e, A);
+				Block *B = new Block(ed, A);
 
 				while (true) {
 					if (B->left_interlace(S))
@@ -449,23 +444,23 @@ static bool strongly_planar(edge e0, const graph &G, std::list<int> &Att,
 	return true;
 }
 
-static void embedding(edge e0, int t, const graph &G,
+static void embedding(DirectedEdge e0, int t, const GraphWrapper &G,
 	edge_array<int> &alpha,
 	node_array<int> &dfsnum,
-	std::list<edge> &T, std::list<edge> &A, int &cur_nr,
-	edge_array<int> &sort_num, node_array<edge> &tree_edge_into,
-	node_array<node> &parent, edge_array<edge> &reversal)
+	std::list<DirectedEdge> &T, std::list<DirectedEdge> &A, int &cur_nr,
+	edge_array<int> &sort_num, node_array<DirectedEdge> &tree_edge_into,
+	node_array<Node> &parent, edge_array<DirectedEdge> &reversal)
 {
-	node x = e0.getFromNode();
+	Node x = e0.getFromNode();
 
-	node y = e0.getToNode();
+	Node y = e0.getToNode();
 
 	tree_edge_into.erase(y);
 	tree_edge_into.insert({y, e0});
 
-	edge e = G.first_adj_edge(y);
+	DirectedEdge e = G.first_adj_edge(y);
 
-	node wk = y;
+	Node wk = y;
 
 	while (dfsnum[e.getToNode()] > dfsnum[wk]) { // e is a tree edge
 		wk = e.getToNode();
@@ -474,32 +469,32 @@ static void embedding(edge e0, int t, const graph &G,
 		e = G.first_adj_edge(wk);
 	}
 
-	node w0 = e.getToNode();
-	edge back_edge_into_w0 = e;
+	Node w0 = e.getToNode();
+	DirectedEdge back_edge_into_w0 = e;
 
-	node w = wk;
+	Node w = wk;
 
-	std::list<edge> Al, Ar;
-	std::list<edge> Tprime, Aprime;
+	std::list<DirectedEdge> Al, Ar;
+	std::list<DirectedEdge> Tprime, Aprime;
 
 	T.clear();
 	T.push_back(e); // |e = (wk,w0)| at this point, line (2)
 
 	while (w != x) {
 		int count = 0;
-		for (const edge &e : G.adj_edges(w)) {
+		for (const DirectedEdge &ed : G.adj_edges(w)) {
 			count++;
 			if (count != 1) { // no action for first edge
-				if (dfsnum[w] < dfsnum[e.getToNode()]) { // tree edge
-					int tprime = ((t == alpha[e]) ? LEFT : RIGHT);
-					embedding(e, tprime, G, alpha, dfsnum, Tprime, Aprime, cur_nr, sort_num, tree_edge_into, parent, reversal);
+				if (dfsnum[w] < dfsnum[ed.getToNode()]) { // tree edge
+					int tprime = ((t == alpha[ed]) ? LEFT : RIGHT);
+					embedding(ed, tprime, G, alpha, dfsnum, Tprime, Aprime, cur_nr, sort_num, tree_edge_into, parent, reversal);
 				}
 				else { // back edge
-					Tprime.push_back(e); // $e$
-					Aprime.push_back(reversal.at(e)); // reversal of $e$
+					Tprime.push_back(ed); // $e$
+					Aprime.push_back(reversal.at(ed)); // reversal of $e$
 				}
 
-				if (t == alpha[e]) {
+				if (t == alpha[ed]) {
 					conc(Tprime, T);
 					conc(T, Tprime); // $T = Tprime\ conc\ T$
 					conc(Al, Aprime); // $Al = Al\ conc\ Aprime$
@@ -514,8 +509,8 @@ static void embedding(edge e0, int t, const graph &G,
 
 		T.push_back(reversal.at(tree_edge_into.at(w))); // $(w_{j-1},w_j)$
 
-		for (const edge &e : T)
-			sort_num[e] = cur_nr++;
+		for (const DirectedEdge &ed : T)
+			sort_num[ed] = cur_nr++;
 
 		// |w|'s adjacency list is now computed; we clear |T| and prepare for the
 		// next iteration by moving all darts incident to |parent[w]| from |Al| and
@@ -552,7 +547,7 @@ static void embedding(edge e0, int t, const graph &G,
 // combinatorial embedding of |Gin| by suitably reordering
 // its adjacency lists.
 // |Gin| must be bidirected in that case.
-bool PLANAR(graph &G, bool embed, HopcroftTarjan::Result &res)
+bool PLANAR(GraphWrapper &G, bool embed, HopcroftTarjan::Result &res)
 {
 	int n = G.number_of_nodes();
 
@@ -566,21 +561,21 @@ bool PLANAR(graph &G, bool embed, HopcroftTarjan::Result &res)
 		node_array<int> nr;
 		edge_array<int> cost;
 		int cur_nr = 0;
-		int n = G.number_of_nodes();
+		int nn = G.number_of_nodes();
 
-		for (const node &v : G.all_nodes())
+		for (const Node &v : G.all_nodes())
 			nr[v] = cur_nr++;
 
-		for (const edge &e : G.all_edges())
+		for (const DirectedEdge &e : G.all_edges())
 			cost[e] = ((nr[e.getFromNode()] < nr[e.getToNode()]) ?
-			n * nr[e.getFromNode()] + nr[e.getToNode()] :
-			n * nr[e.getToNode()] + nr[e.getFromNode()]);
+			nn * nr[e.getFromNode()] + nr[e.getToNode()] :
+			nn * nr[e.getToNode()] + nr[e.getFromNode()]);
 
 		G.sort_edges(cost);
 
-		std::vector<edge> L = G.all_edges();
+		std::vector<DirectedEdge> L = G.all_edges();
 		while (!L.empty()) {
-			edge e = L.front();
+			DirectedEdge e = L.front();
 			L.erase(L.begin());
 			// check whether the first edge on |L| is equal to the reversal of |e|. If so,
 			// delete it from |L|, if not, add the reversal to |G|
@@ -593,19 +588,19 @@ bool PLANAR(graph &G, bool embed, HopcroftTarjan::Result &res)
 
 	// An undirected planar graph has at most $3n-6$ edges; a directed graph may have twice as many
 
-	edge_array<edge> reversal;
+	edge_array<DirectedEdge> reversal;
 	if (!createReversal(G, reversal))
 		throw exception::CommonException("HopcroftTarjan: Graph not bidirected");
 
 	node_array<int> dfsnum;
-	node_array<node> parent;
-	for (const node &n : G.all_nodes())
-		parent.insert({n, node("HopcroftTarjan_invalid")}); // no default constructor -,-
+	node_array<Node> parent;
+	for (const Node &an : G.all_nodes())
+		parent.insert({an, Node("HopcroftTarjan_invalid")}); // no default constructor -,-
 
 	reorder(G, dfsnum, parent);
 
 	edge_array<int> alpha;
-	for (const edge &e : G.all_edges())
+	for (const DirectedEdge &e : G.all_edges())
 		alpha[e] = 0;
 
 	{
@@ -618,11 +613,11 @@ bool PLANAR(graph &G, bool embed, HopcroftTarjan::Result &res)
 	}
 
 	if (embed) {
-		std::list<edge> T, A; // lists of edges of |H|
+		std::list<DirectedEdge> T, A; // lists of edges of |H|
 
 		int cur_nr = 0;
 		edge_array<int> sort_num;
-		node_array<edge> tree_edge_into;
+		node_array<DirectedEdge> tree_edge_into;
 
 		embedding(G.first_adj_edge(G.first_node()), LEFT, G, alpha, dfsnum, T, A,
 		cur_nr, sort_num, tree_edge_into, parent, reversal);
@@ -632,7 +627,7 @@ bool PLANAR(graph &G, bool embed, HopcroftTarjan::Result &res)
 
 		conc(T, A);
 
-		for (const edge &e : T)
+		for (const DirectedEdge &e : T)
 			sort_num[e] = cur_nr++;
 
 		std::vector<const DirectedEdge*> edgs(sort_num.size());
diff --git a/alib2algo_experimental/src/graph/isomorphism/HopcroftGraph.cpp b/alib2algo_experimental/src/graph/isomorphism/HopcroftGraph.cpp
index 7ba36ccec1..679c7eabb3 100644
--- a/alib2algo_experimental/src/graph/isomorphism/HopcroftGraph.cpp
+++ b/alib2algo_experimental/src/graph/isomorphism/HopcroftGraph.cpp
@@ -168,8 +168,8 @@ void Graph::removeDistinguishedEdgeAndVertex(EdgeEnd *e)
 	if (wl == o)
 		wl = vl;
 
-	v->forEachEdge([=](EdgeEnd *e) {
-		e->otheredge->vertex = w;
+	v->forEachEdge([=](EdgeEnd *ee) {
+		ee->otheredge->vertex = w;
 		return true;
 	});
 
@@ -181,8 +181,8 @@ void Graph::removeDistinguishedEdgeAndVertex(EdgeEnd *e)
 	w->vedge = wk;
 	w->updateDegree();
 
-	w->forEachEdge([=](EdgeEnd *e) {
-		e->vertex->updateDegree();
+	w->forEachEdge([=](EdgeEnd *ee) {
+		ee->vertex->updateDegree();
 		return true;
 	});
 
@@ -206,14 +206,14 @@ void Graph::removeFourDegreeExceptionVertex(Vertex *v, EdgeEnd *e)
 	//H_DEBUG("remove four degree exception vertex" << v->dump() << e->dump());
 
 	// Out: e <ccw> dest
-	auto reconnectEdge = [=](EdgeEnd *e, EdgeEnd *dest) {
-		e->vertex = dest->otheredge->vertex;
-		e->ccwedge = dest;
-		e->cwedge = dest->otheredge->cwedge;
-		dest->otheredge->cwedge = e->otheredge;
+	auto reconnectEdge = [=](EdgeEnd *ee, EdgeEnd *dest) {
+		ee->vertex = dest->otheredge->vertex;
+		ee->ccwedge = dest;
+		ee->cwedge = dest->otheredge->cwedge;
+		dest->otheredge->cwedge = ee->otheredge;
 		if (dest->otheredge->ccwedge == dest->otheredge)
-			dest->otheredge->ccwedge = e->otheredge;
-		e->cwedge->otheredge->ccwedge = e->otheredge;
+			dest->otheredge->ccwedge = ee->otheredge;
+		ee->cwedge->otheredge->ccwedge = ee->otheredge;
 	};
 
 	EdgeEnd *er = e;
@@ -468,14 +468,14 @@ void Graph::init(const UndirectedGraph &graph)
 					auto &vec = sortedNodeEdges[othernode];
 					for (size_t i = vec.size(); i-- > 0; ) {
 						bool isMultiEdge = false;
-						EdgeEnd *e = vec[i]->otheredge;
-						if (e->ccwedge && e->ccwedge->vertex == e->otheredge->vertex)
+						EdgeEnd *e2 = vec[i]->otheredge;
+						if (e2->ccwedge && e2->ccwedge->vertex == e2->otheredge->vertex)
 							isMultiEdge = true;
-						if (e->cwedge && e->cwedge->vertex == e->otheredge->vertex)
+						if (e2->cwedge && e2->cwedge->vertex == e2->otheredge->vertex)
 							isMultiEdge = true;
-						if (isMultiEdge && e->vertex == v && e->otheredge->vertex == vertex) {
+						if (isMultiEdge && e2->vertex == v && e2->otheredge->vertex == vertex) {
 							vec.erase(vec.begin() + i);
-							edge = e;
+							edge = e2;
 							break;
 						}
 					}
@@ -705,26 +705,26 @@ bool Vertex::isDegreeIsolated() const
 
 std::vector<Face*> Vertex::neighborFaces(Direction direction) const
 {
-	std::vector<Face*> out;
+	std::vector<Face*> res;
 
 	forEachEdge([&](EdgeEnd *e) {
-		out.push_back(e->ccwface);
+		res.push_back(e->ccwface);
 		return true;
 	}, direction);
 
-	return out;
+	return res;
 }
 
 std::vector<EdgeEnd*> Vertex::neighborEdges(Direction direction) const
 {
-	std::vector<EdgeEnd*> out;
+	std::vector<EdgeEnd*> res;
 
 	forEachEdge([&](EdgeEnd *e) {
-		out.push_back(e);
+		res.push_back(e);
 		return true;
 	}, direction);
 
-	return out;
+	return res;
 }
 
 void Vertex::forEachEdge(std::function<bool(EdgeEnd*)> callback, Direction direction) const
diff --git a/alib2algo_experimental/src/graph/shortestpath/BellmanFord.cpp b/alib2algo_experimental/src/graph/shortestpath/BellmanFord.cpp
index 7d3236d5ec..6bb132e1d1 100644
--- a/alib2algo_experimental/src/graph/shortestpath/BellmanFord.cpp
+++ b/alib2algo_experimental/src/graph/shortestpath/BellmanFord.cpp
@@ -73,16 +73,16 @@ static BellmanFord::Result bellmanford_impl(const UndirectedGraph &graph, const
 			const Node &u = e.getFirstNode();
 			const Node &v = e.getSecondNode();
 
-			auto f = [&ew, &d](const Node &u, const Node &v) {
-				auto du = d.find(u);
-				auto dv = d.find(v);
+			auto f = [&ew, &d](const Node &up, const Node &vp) {
+				auto du = d.find(up);
+				auto dv = d.find(vp);
 
 				if (du == d.end()) {
 					return;
 				}
 
 				if (dv == d.end() || du->second + ew < dv->second) {
-					d[v] = du->second + ew;
+					d[vp] = du->second + ew;
 				}
 			};
 
@@ -95,8 +95,8 @@ static BellmanFord::Result bellmanford_impl(const UndirectedGraph &graph, const
 		const Node &u = e.getFirstNode();
 		const Node &v = e.getSecondNode();
 
-		auto f = [&e, &d, &graph](const Node &u, const Node &v) {
-			if (d.at(u) + graph.getEdgeValue(e) < d.at(v)) {
+		auto f = [&e, &d, &graph](const Node &up, const Node &vp) {
+			if (d.at(up) + graph.getEdgeValue(e) < d.at(vp)) {
 				throw exception::CommonException("BellmanFord: Found negative-weight cycle!");
 			}
 		};
diff --git a/alib2algo_experimental/src/graph/shortestpath/Dijkstra.cpp b/alib2algo_experimental/src/graph/shortestpath/Dijkstra.cpp
index 3f7cbe4361..bfcef0813a 100644
--- a/alib2algo_experimental/src/graph/shortestpath/Dijkstra.cpp
+++ b/alib2algo_experimental/src/graph/shortestpath/Dijkstra.cpp
@@ -25,9 +25,9 @@ public:
 class Value
 {
 public:
-	Value(const Node &node, int value)
-		: node(node)
-		, value(value)
+	Value(const Node &n, int v)
+		: node(n)
+		, value(v)
 	{
 	}
 
diff --git a/alib2algo_experimental/src/graph/sort/TopologicalSort.cpp b/alib2algo_experimental/src/graph/sort/TopologicalSort.cpp
index 500bae3ddd..e0e4e07eab 100644
--- a/alib2algo_experimental/src/graph/sort/TopologicalSort.cpp
+++ b/alib2algo_experimental/src/graph/sort/TopologicalSort.cpp
@@ -17,12 +17,12 @@ static TopologicalSort::Result topsort_impl(const DirectedGraph &graph) {
 	std::unordered_map<Node, bool> visited;
 
 	for (const Node &n : graph.getNodes()) {
-		traverse::Dfs::dfs(graph, n, [&s, &visited](const Node &n, const Node&, int, int) {
-			if (visited.find(n) != visited.end()) {
+		traverse::Dfs::dfs(graph, n, [&s, &visited](const Node &node, const Node&, int, int) {
+			if (visited.find(node) != visited.end()) {
 				return false;
 			}
-			visited.insert({n, true});
-			s.push_front(n);
+			visited.insert({node, true});
+			s.push_front(node);
 			return true;
 		});
 	}
diff --git a/alib2algo_experimental/src/graph/spanningtree/Edmonds.cpp b/alib2algo_experimental/src/graph/spanningtree/Edmonds.cpp
index 64e59edacb..e394ea26ad 100644
--- a/alib2algo_experimental/src/graph/spanningtree/Edmonds.cpp
+++ b/alib2algo_experimental/src/graph/spanningtree/Edmonds.cpp
@@ -39,8 +39,8 @@ struct Edge {
 	std::vector<Edge*> fChildren;
 	bool deleted;
 
-	Edge( const DirectedEdge & edge, uint from, uint to, int weight )
-	 : e(edge), from(from), to(to), weight(weight), origWeight(weight), fParent(NULL), deleted(false) {}
+	Edge( const DirectedEdge & edge, uint f, uint t, int w )
+	 : e(edge), from(f), to(t), weight(w), origWeight(w), fParent(NULL), deleted(false) {}
 };
 
 static int compareEdges( Edge * const & e1, Edge * const & e2 )
diff --git a/alib2algo_experimental/src/graph/spanningtree/JarnikPrim.cpp b/alib2algo_experimental/src/graph/spanningtree/JarnikPrim.cpp
index 5d56949758..5749136b8e 100644
--- a/alib2algo_experimental/src/graph/spanningtree/JarnikPrim.cpp
+++ b/alib2algo_experimental/src/graph/spanningtree/JarnikPrim.cpp
@@ -21,9 +21,9 @@ public:
 
 class Value {
 public:
-	Value(const Node &node, int value)
-		: node(node)
-		, value(value)
+	Value(const Node &n, int v)
+		: node(n)
+		, value(v)
 	{
 	}
 
diff --git a/alib2algo_experimental/src/graph/spanningtree/Kruskal.cpp b/alib2algo_experimental/src/graph/spanningtree/Kruskal.cpp
index accb54e24b..be551c6ca4 100644
--- a/alib2algo_experimental/src/graph/spanningtree/Kruskal.cpp
+++ b/alib2algo_experimental/src/graph/spanningtree/Kruskal.cpp
@@ -23,7 +23,7 @@ namespace spanningtree {
 struct WeightedEdge {
 	UndirectedEdge edge;
 	int weight;
-	WeightedEdge( const UndirectedEdge & edge, int weight ) : edge(edge), weight(weight) {}
+	WeightedEdge( const UndirectedEdge & e, int w ) : edge(e), weight(w) {}
 };
 
 bool isWeightSmaller( const WeightedEdge & e1, const WeightedEdge & e2)
diff --git a/alib2algo_experimental/test-src/graph/minimumcut/FordFulkersonTest.cpp b/alib2algo_experimental/test-src/graph/minimumcut/FordFulkersonTest.cpp
index 2af49d058c..ffb10823a3 100644
--- a/alib2algo_experimental/test-src/graph/minimumcut/FordFulkersonTest.cpp
+++ b/alib2algo_experimental/test-src/graph/minimumcut/FordFulkersonTest.cpp
@@ -131,7 +131,7 @@ void testDirNetwork( uint netID, const Type1 * netDef, const Type2 cutDef, uint
 	graph::minimumcut::Cut cut = graph::minimumcut::FordFulkerson::fordfulkerson( graph, source, sink );
 
 	CPPUNIT_ASSERT_EQUAL( cutSize, (uint)cut.size() );
-	for (uint i = 0; i < cutSize; i++) {
+	for (i = 0; i < cutSize; i++) {
 		CPPUNIT_ASSERT( cut.find( std::make_pair( id2node[cutDef[i].node1ID], id2node[cutDef[i].node2ID] ) ) != cut.end() );
 	}
 }
@@ -163,7 +163,7 @@ void testUndirNetwork( uint netID, const Type1 * netDef, const Type2 cutDef, uin
 	graph::minimumcut::Cut cut = graph::minimumcut::FordFulkerson::fordfulkerson( graph, source, sink );
 
 	CPPUNIT_ASSERT_EQUAL( cutSize, (uint)cut.size() );
-	for (uint i = 0; i < cutSize; i++) {
+	for (i = 0; i < cutSize; i++) {
 		CPPUNIT_ASSERT( cut.find( std::make_pair( id2node[cutDef[i].node1ID], id2node[cutDef[i].node2ID] ) ) != cut.end() );
 	}
 }
-- 
GitLab