topology: getAssocs param board paths view
`getAssocs` function received a parameter
```
const std::map<std::string, std::string>& boards
```
which maps object paths to board names, but only queried the object
paths. Pass an `std::view::keys` instead to minimize the API surface.
Tested: Topology Unit Tests Pass
Change-Id: Idca0c0731d90205332b1e85c5e8976a93696f78a
Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>
diff --git a/src/entity_manager/entity_manager.cpp b/src/entity_manager/entity_manager.cpp
index d17d21a..e5e8b23 100644
--- a/src/entity_manager/entity_manager.cpp
+++ b/src/entity_manager/entity_manager.cpp
@@ -87,7 +87,7 @@
}
for (const auto& [assocPath, assocPropValue] :
- topology.getAssocs(newBoards))
+ topology.getAssocs(std::views::keys(newBoards)))
{
auto findBoard = newBoards.find(assocPath);
if (findBoard == newBoards.end())
diff --git a/src/entity_manager/topology.cpp b/src/entity_manager/topology.cpp
index 3b9521c..e798baa 100644
--- a/src/entity_manager/topology.cpp
+++ b/src/entity_manager/topology.cpp
@@ -52,7 +52,7 @@
}
std::unordered_map<std::string, std::set<Association>> Topology::getAssocs(
- const std::map<Path, BoardName>& boards)
+ BoardPathsView boardPaths)
{
std::unordered_map<std::string, std::set<Association>> result;
@@ -75,7 +75,7 @@
for (const Path& downstream : downstreamMatch->second)
{
// The downstream path must be one we care about.
- if (boards.contains(downstream))
+ if (std::ranges::contains(boardPaths, downstream))
{
result[downstream].insert(
{"contained_by", "containing", upstream});
diff --git a/src/entity_manager/topology.hpp b/src/entity_manager/topology.hpp
index a1f00fe..1c2b3eb 100644
--- a/src/entity_manager/topology.hpp
+++ b/src/entity_manager/topology.hpp
@@ -7,6 +7,9 @@
using Association = std::tuple<std::string, std::string, std::string>;
+using BoardPathsView = decltype(std::views::keys(
+ std::declval<std::map<std::string, std::string>&>()));
+
class Topology
{
public:
@@ -16,7 +19,7 @@
const std::string& boardName,
const nlohmann::json& exposesItem);
std::unordered_map<std::string, std::set<Association>> getAssocs(
- const std::map<std::string, std::string>& boards);
+ BoardPathsView boardPaths);
void remove(const std::string& boardName);
private:
diff --git a/test/test_topology.cpp b/test/test_topology.cpp
index a705e9c..f04ce4f 100644
--- a/test/test_topology.cpp
+++ b/test/test_topology.cpp
@@ -1,5 +1,7 @@
#include "entity_manager/topology.hpp"
+#include <ranges>
+
#include "gmock/gmock.h"
#include "gtest/gtest.h"
@@ -53,7 +55,7 @@
Topology topo;
BoardMap boards;
- auto assocs = topo.getAssocs(boards);
+ auto assocs = topo.getAssocs(std::views::keys(boards));
EXPECT_EQ(assocs.size(), 0U);
}
@@ -66,7 +68,7 @@
topo.addBoard(subchassisPath, "Chassis", "BoardA", nlohmann::json());
topo.addBoard(superchassisPath, "Chassis", "BoardB", nlohmann::json());
- auto assocs = topo.getAssocs(boards);
+ auto assocs = topo.getAssocs(std::views::keys(boards));
EXPECT_EQ(assocs.size(), 0U);
}
@@ -88,7 +90,7 @@
topo.addBoard(superchassisPath, "Chassis", "BoardB",
superchassisExposesItem);
- auto assocs = topo.getAssocs(boards);
+ auto assocs = topo.getAssocs(std::views::keys(boards));
EXPECT_EQ(assocs.size(), 0U);
}
@@ -101,7 +103,7 @@
topo.addBoard(subchassisPath, "Chassis", "BoardA", otherExposesItem);
topo.addBoard(superchassisPath, "Chassis", "BoardB", otherExposesItem);
- auto assocs = topo.getAssocs(boards);
+ auto assocs = topo.getAssocs(std::views::keys(boards));
EXPECT_EQ(assocs.size(), 0U);
}
@@ -115,7 +117,7 @@
topo.addBoard(superchassisPath, "Chassis", "BoardB",
superchassisExposesItem);
- auto assocs = topo.getAssocs(boards);
+ auto assocs = topo.getAssocs(std::views::keys(boards));
EXPECT_EQ(assocs.size(), 0U);
}
@@ -128,7 +130,7 @@
topo.addBoard(subchassisPath, "Chassis", "BoardA", subchassisExposesItem);
topo.addBoard(superchassisPath, "Chassis", "BoardB", otherExposesItem);
- auto assocs = topo.getAssocs(boards);
+ auto assocs = topo.getAssocs(std::views::keys(boards));
EXPECT_EQ(assocs.size(), 0U);
}
@@ -142,7 +144,7 @@
topo.addBoard(superchassisPath, "Chassis", "BoardB",
superchassisExposesItem);
- auto assocs = topo.getAssocs(boards);
+ auto assocs = topo.getAssocs(std::views::keys(boards));
EXPECT_EQ(assocs.size(), 1U);
EXPECT_EQ(assocs[subchassisPath].size(), 1U);
@@ -158,7 +160,7 @@
topo.addBoard(superchassisPath, "Chassis", "BoardB",
superchassisExposesItem);
- auto assocs = topo.getAssocs(boards);
+ auto assocs = topo.getAssocs(std::views::keys(boards));
EXPECT_EQ(assocs.size(), 1U);
EXPECT_EQ(assocs[subchassisPath].size(), 2U);
@@ -176,7 +178,7 @@
superchassisExposesItem);
// Boards A and B aren't new, so no assocs are returned.
- auto assocs = topo.getAssocs(boards);
+ auto assocs = topo.getAssocs(std::views::keys(boards));
EXPECT_EQ(assocs.size(), 0U);
}
@@ -194,7 +196,7 @@
topo.addBoard(superchassisPath, "Chassis", "BoardC",
superchassisExposesItem);
- auto assocs = topo.getAssocs(boards);
+ auto assocs = topo.getAssocs(std::views::keys(boards));
EXPECT_EQ(assocs.size(), 2U);
EXPECT_EQ(assocs[subchassisPath].size(), 1U);
@@ -215,7 +217,7 @@
superchassisExposesItem);
// Only the assoc for BoardA should be returned
- auto assocs = topo.getAssocs(boards);
+ auto assocs = topo.getAssocs(std::views::keys(boards));
EXPECT_EQ(assocs.size(), 1U);
EXPECT_EQ(assocs[subchassisPath].size(), 1U);
@@ -224,7 +226,7 @@
TEST(Topology, 2Superchassis)
{
- const Association subchassisAssoc2 =
+ Association subchassisAssoc2 =
std::make_tuple("contained_by", "containing", superchassisPath + "2");
Topology topo;
@@ -238,7 +240,7 @@
topo.addBoard(superchassisPath + "2", "Chassis", "BoardC",
superchassisExposesItem);
- auto assocs = topo.getAssocs(boards);
+ auto assocs = topo.getAssocs(std::views::keys(boards));
EXPECT_EQ(assocs.size(), 1U);
EXPECT_EQ(assocs[subchassisPath].size(), 2U);
@@ -249,7 +251,7 @@
TEST(Topology, 2SuperchassisAnd2Subchassis)
{
- const Association subchassisAssoc2 =
+ Association subchassisAssoc2 =
std::make_tuple("contained_by", "containing", superchassisPath + "2");
Topology topo;
@@ -266,7 +268,7 @@
topo.addBoard(superchassisPath + "2", "Chassis", "BoardD",
superchassisExposesItem);
- auto assocs = topo.getAssocs(boards);
+ auto assocs = topo.getAssocs(std::views::keys(boards));
EXPECT_EQ(assocs.size(), 2U);
EXPECT_EQ(assocs[subchassisPath].size(), 2U);
@@ -292,7 +294,7 @@
superchassisExposesItem);
{
- auto assocs = topo.getAssocs(boards);
+ auto assocs = topo.getAssocs(std::views::keys(boards));
EXPECT_EQ(assocs.size(), 2U);
EXPECT_EQ(assocs[subchassisPath].size(), 1U);
@@ -303,7 +305,7 @@
{
topo.remove("BoardA");
- auto assocs = topo.getAssocs(boards);
+ auto assocs = topo.getAssocs(std::views::keys(boards));
EXPECT_EQ(assocs.size(), 1U);
EXPECT_EQ(assocs[subchassisPath + "2"].size(), 1U);
@@ -312,7 +314,7 @@
{
topo.remove("BoardB");
- auto assocs = topo.getAssocs(boards);
+ auto assocs = topo.getAssocs(std::views::keys(boards));
EXPECT_EQ(assocs.size(), 0U);
}