diff --git a/graph_lib/include/directed_network.hpp b/graph_lib/include/directed_network.hpp index 271cdba..ee0d6ee 100644 --- a/graph_lib/include/directed_network.hpp +++ b/graph_lib/include/directed_network.hpp @@ -20,23 +20,20 @@ namespace Graph { Note: switch is equivalent to toggle + transpose, but much cheaper! */ template -class DirectedNetwork : public NetworkBase { +class DirectedNetwork : public NetworkBase { public: enum class EdgeDirection { Incoming, Outgoing }; using WeightT = WeightType; - using AgentT = AgentType; DirectedNetwork() = default; - DirectedNetwork(size_t n_agents) : NetworkBase(n_agents) {} - - DirectedNetwork(std::vector agents) : NetworkBase(agents) {} + DirectedNetwork(size_t n_agents) : NetworkBase<>(n_agents) {} DirectedNetwork(std::vector> &&neighbour_list, std::vector> &&weight_list, EdgeDirection direction) - : NetworkBase(std::move(neighbour_list), std::move(weight_list)), + : NetworkBase<>(std::move(neighbour_list), std::move(weight_list)), _direction(direction) {} /* diff --git a/graph_lib/include/network_base.hpp b/graph_lib/include/network_base.hpp index 6fa2a98..ddf8ede 100644 --- a/graph_lib/include/network_base.hpp +++ b/graph_lib/include/network_base.hpp @@ -14,12 +14,10 @@ namespace Graph { /* An abstract base class for undirected and directed networks. */ -template class NetworkBase { +template class NetworkBase { public: using WeightT = WeightType; - using AgentT = AgentType; - // @TODO: Make this private later - std::vector agents{}; // List of agents of type AgentType + protected: std::vector> neighbour_list{}; // Neighbour list for the connections @@ -30,31 +28,22 @@ template class NetworkBase { NetworkBase() = default; NetworkBase(size_t n_agents) - : agents(std::vector(n_agents)), - neighbour_list( + : neighbour_list( std::vector>(n_agents, std::vector{})), weight_list(std::vector>(n_agents, std::vector{})) { } - NetworkBase(std::vector agents) - : agents(agents), neighbour_list(std::vector>( - agents.size(), std::vector{})), - weight_list(std::vector>(agents.size(), - std::vector{})) { - } - NetworkBase(std::vector> &&neighbour_list, std::vector> &&weight_list) - : agents(std::vector(neighbour_list.size())), - neighbour_list(neighbour_list), weight_list(weight_list) {} + : neighbour_list(neighbour_list), weight_list(weight_list) {} virtual ~NetworkBase() = default; /* Gives the total number of nodes in the network */ - [[nodiscard]] std::size_t n_agents() const { return agents.size(); } + [[nodiscard]] std::size_t n_agents() const { return neighbour_list.size(); } /* Gives the number of edges connected to agent_idx diff --git a/graph_lib/include/undirected_network.hpp b/graph_lib/include/undirected_network.hpp index f14ec11..f8b3431 100644 --- a/graph_lib/include/undirected_network.hpp +++ b/graph_lib/include/undirected_network.hpp @@ -6,22 +6,19 @@ namespace Graph { /* A class that represents an undirected graph using adjacency lists. */ -template -class UndirectedNetwork : public NetworkBase { +template +class UndirectedNetwork : public NetworkBase { public: using WeightT = WeightType; - using AgentT = AgentType; UndirectedNetwork() = default; - UndirectedNetwork(size_t n_agents) : NetworkBase(n_agents) {} - - UndirectedNetwork(std::vector agents) : NetworkBase(agents) {} + UndirectedNetwork(size_t n_agents) : NetworkBase<>(n_agents) {} UndirectedNetwork(std::vector> &&neighbour_list, std::vector> &&weight_list) - : NetworkBase(std::move(neighbour_list), std::move(weight_list)) { - } + : Graph::NetworkBase<>(std::move(neighbour_list), + std::move(weight_list)) {} /* Gives the number of edges connected to agent_idx