|  | #pragma once | 
|  |  | 
|  | #include <nlohmann/json.hpp> | 
|  |  | 
|  | #include <set> | 
|  | #include <unordered_map> | 
|  |  | 
|  | using Association = std::tuple<std::string, std::string, std::string>; | 
|  |  | 
|  | class Topology | 
|  | { | 
|  | public: | 
|  | explicit Topology() = default; | 
|  |  | 
|  | void addBoard(const std::string& path, const std::string& boardType, | 
|  | const std::string& boardName, | 
|  | const nlohmann::json& exposesItem); | 
|  | std::unordered_map<std::string, std::vector<Association>> | 
|  | getAssocs(const std::map<std::string, std::string>& boards); | 
|  | void remove(const std::string& boardName); | 
|  |  | 
|  | private: | 
|  | using Path = std::string; | 
|  | using BoardType = std::string; | 
|  | using BoardName = std::string; | 
|  | using PortType = std::string; | 
|  |  | 
|  | std::unordered_map<PortType, std::vector<Path>> upstreamPorts; | 
|  | std::unordered_map<PortType, std::vector<Path>> downstreamPorts; | 
|  | std::set<Path> powerPaths; | 
|  | std::unordered_map<Path, BoardType> boardTypes; | 
|  | std::unordered_map<BoardName, Path> boardNames; | 
|  | }; |