From d7cbbca9220ca85e927fe07f9df10b0c19c44b01 Mon Sep 17 00:00:00 2001
From: David Rosca <roscadav@fit.cvut.cz>
Date: Sun, 8 Mar 2015 12:55:26 +0100
Subject: [PATCH] Graphs: Change node/edge values from Primitive to int

Primitive doesn't work well in algorithms. Also, almost (?) all
algorithms are working with integer values on nodes/edges, so this
should be just fine.
---
 alib2data/src/graph/directed/DirectedGraph.cpp | 12 ++++++------
 alib2data/src/graph/directed/DirectedGraph.h   | 18 ++++++++----------
 .../src/graph/undirected/UndirectedGraph.cpp   | 12 ++++++------
 .../src/graph/undirected/UndirectedGraph.h     | 18 ++++++++----------
 4 files changed, 28 insertions(+), 32 deletions(-)

diff --git a/alib2data/src/graph/directed/DirectedGraph.cpp b/alib2data/src/graph/directed/DirectedGraph.cpp
index 7dce4428a6..525826bcbf 100644
--- a/alib2data/src/graph/directed/DirectedGraph.cpp
+++ b/alib2data/src/graph/directed/DirectedGraph.cpp
@@ -102,7 +102,7 @@ bool DirectedGraph::addNode(const Node &node)
 	return impl->addNode(node);
 }
 
-bool DirectedGraph::addNode(const Node &node, const primitive::Primitive &value)
+bool DirectedGraph::addNode(const Node &node, int value)
 {
 	bool success = addNode(node);
 	if (success) {
@@ -125,7 +125,7 @@ bool DirectedGraph::addEdge(const DirectedEdge &edge)
 	return impl->addEdge(edge);
 }
 
-bool DirectedGraph::addEdge(const DirectedEdge &edge, const primitive::Primitive &value)
+bool DirectedGraph::addEdge(const DirectedEdge &edge, int value)
 {
 	bool success = addEdge(edge);
 	if (success) {
@@ -143,22 +143,22 @@ bool DirectedGraph::removeEdge(const DirectedEdge &edge)
 	return success;
 }
 
-primitive::Primitive DirectedGraph::getNodeValue(const Node &node) const
+int DirectedGraph::getNodeValue(const Node &node) const
 {
 	return nodeValues.at(node);
 }
 
-void DirectedGraph::setNodeValue(const Node &node, const primitive::Primitive &value)
+void DirectedGraph::setNodeValue(const Node &node, int value)
 {
 	nodeValues.insert({node, value});
 }
 
-primitive::Primitive DirectedGraph::getEdgeValue(const DirectedEdge &edge) const
+int DirectedGraph::getEdgeValue(const DirectedEdge &edge) const
 {
 	return edgeValues.at(edge);
 }
 
-void DirectedGraph::setEdgeValue(const DirectedEdge &edge, const primitive::Primitive &value)
+void DirectedGraph::setEdgeValue(const DirectedEdge &edge, int value)
 {
 	edgeValues.insert({edge, value});
 }
diff --git a/alib2data/src/graph/directed/DirectedGraph.h b/alib2data/src/graph/directed/DirectedGraph.h
index 3422c1135e..306605437b 100644
--- a/alib2data/src/graph/directed/DirectedGraph.h
+++ b/alib2data/src/graph/directed/DirectedGraph.h
@@ -9,8 +9,6 @@
 #include "../common/Node.h"
 #include "DirectedEdge.h"
 
-#include "../../primitive/Primitive.h"
-
 namespace graph {
 
 class IDirectedGraph;
@@ -41,18 +39,18 @@ public:
 	std::set<DirectedEdge> neighborEdges(const Node &node) const;
 
 	bool addNode(const Node &node);
-	bool addNode(const Node &node, const primitive::Primitive &value);
+	bool addNode(const Node &node, int value);
 	bool removeNode(const Node &node);
 
 	bool addEdge(const DirectedEdge &edge);
-	bool addEdge(const DirectedEdge &edge, const primitive::Primitive &value);
+	bool addEdge(const DirectedEdge &edge, int value);
 	bool removeEdge(const DirectedEdge &edge);
 
-	primitive::Primitive getNodeValue(const Node &node) const;
-	void setNodeValue(const Node &node, const primitive::Primitive &value);
+	int getNodeValue(const Node &node) const;
+	void setNodeValue(const Node &node, int value);
 
-	primitive::Primitive getEdgeValue(const DirectedEdge &edge) const;
-	void setEdgeValue(const DirectedEdge &edge, const primitive::Primitive &value);
+	int getEdgeValue(const DirectedEdge &edge) const;
+	void setEdgeValue(const DirectedEdge &edge, int value);
 
 	int compare(const ObjectBase &other) const override
 	{
@@ -76,8 +74,8 @@ private:
 	REPRESENTATION representation;
 	IDirectedGraph *impl;
 
-	std::unordered_map<Node, primitive::Primitive> nodeValues;
-	std::unordered_map<DirectedEdge, primitive::Primitive> edgeValues;
+	std::unordered_map<Node, int> nodeValues;
+	std::unordered_map<DirectedEdge, int> edgeValues;
 };
 
 } // namespace graph
diff --git a/alib2data/src/graph/undirected/UndirectedGraph.cpp b/alib2data/src/graph/undirected/UndirectedGraph.cpp
index deb0eb13a1..bf0d409aa9 100644
--- a/alib2data/src/graph/undirected/UndirectedGraph.cpp
+++ b/alib2data/src/graph/undirected/UndirectedGraph.cpp
@@ -102,7 +102,7 @@ bool UndirectedGraph::addNode(const Node &node)
 	return impl->addNode(node);
 }
 
-bool UndirectedGraph::addNode(const Node &node, const primitive::Primitive &value)
+bool UndirectedGraph::addNode(const Node &node, int value)
 {
 	bool success = addNode(node);
 	if (success) {
@@ -125,7 +125,7 @@ bool UndirectedGraph::addEdge(const UndirectedEdge &edge)
 	return impl->addEdge(edge);
 }
 
-bool UndirectedGraph::addEdge(const UndirectedEdge &edge, const primitive::Primitive &value)
+bool UndirectedGraph::addEdge(const UndirectedEdge &edge, int value)
 {
 	bool success = addEdge(edge);
 	if (success) {
@@ -143,22 +143,22 @@ bool UndirectedGraph::removeEdge(const UndirectedEdge &edge)
 	return success;
 }
 
-primitive::Primitive UndirectedGraph::getNodeValue(const Node &node) const
+int UndirectedGraph::getNodeValue(const Node &node) const
 {
 	return nodeValues.at(node);
 }
 
-void UndirectedGraph::setNodeValue(const Node &node, const primitive::Primitive &value)
+void UndirectedGraph::setNodeValue(const Node &node, int value)
 {
 	nodeValues.insert({node, value});
 }
 
-primitive::Primitive UndirectedGraph::getEdgeValue(const UndirectedEdge &edge) const
+int UndirectedGraph::getEdgeValue(const UndirectedEdge &edge) const
 {
 	return edgeValues.at(edge);
 }
 
-void UndirectedGraph::setEdgeValue(const UndirectedEdge &edge, const primitive::Primitive &value)
+void UndirectedGraph::setEdgeValue(const UndirectedEdge &edge, int value)
 {
 	edgeValues.insert({edge, value});
 }
diff --git a/alib2data/src/graph/undirected/UndirectedGraph.h b/alib2data/src/graph/undirected/UndirectedGraph.h
index 1eaf3433e3..ed6cdc68ae 100644
--- a/alib2data/src/graph/undirected/UndirectedGraph.h
+++ b/alib2data/src/graph/undirected/UndirectedGraph.h
@@ -9,8 +9,6 @@
 #include "../common/Node.h"
 #include "UndirectedEdge.h"
 
-#include "../../primitive/Primitive.h"
-
 namespace graph {
 
 class IUndirectedGraph;
@@ -41,18 +39,18 @@ public:
 	std::set<UndirectedEdge> neighborEdges(const Node &node) const;
 
 	bool addNode(const Node &node);
-	bool addNode(const Node &node, const primitive::Primitive &value);
+	bool addNode(const Node &node, int value);
 	bool removeNode(const Node &node);
 
 	bool addEdge(const UndirectedEdge &edge);
-	bool addEdge(const UndirectedEdge &edge, const primitive::Primitive &value);
+	bool addEdge(const UndirectedEdge &edge, int value);
 	bool removeEdge(const UndirectedEdge &edge);
 
-	primitive::Primitive getNodeValue(const Node &node) const;
-	void setNodeValue(const Node &node, const primitive::Primitive &value);
+	int getNodeValue(const Node &node) const;
+	void setNodeValue(const Node &node, int value);
 
-	primitive::Primitive getEdgeValue(const UndirectedEdge &edge) const;
-	void setEdgeValue(const UndirectedEdge &edge, const primitive::Primitive &value);
+	int getEdgeValue(const UndirectedEdge &edge) const;
+	void setEdgeValue(const UndirectedEdge &edge, int value);
 
 	int compare(const ObjectBase &other) const override
 	{
@@ -76,8 +74,8 @@ private:
 	REPRESENTATION representation;
 	IUndirectedGraph *impl;
 
-	std::unordered_map<Node, primitive::Primitive> nodeValues;
-	std::unordered_map<UndirectedEdge, primitive::Primitive> edgeValues;
+	std::unordered_map<Node, int> nodeValues;
+	std::unordered_map<UndirectedEdge, int> edgeValues;
 };
 
 } // namespace graph
-- 
GitLab