20#ifndef HEDGEHOG_TYPE_NODES_MAP_ARRAY_H_
21#define HEDGEHOG_TYPE_NODES_MAP_ARRAY_H_
41template<
size_t NbTypes,
size_t MaxSizeTypeName,
size_t MaxNumberNodes,
size_t MaxSizeNodeName>
42class TypeNodesMapArray {
43 std::array<std::array<char, MaxSizeTypeName>, NbTypes> types_{};
44 std::array<std::array<std::array<char, MaxSizeNodeName>, MaxNumberNodes>, NbTypes> nodes_{};
47 constexpr TypeNodesMapArray() =
default;
49 constexpr virtual ~TypeNodesMapArray() =
default;
53 constexpr std::array<std::array<char, MaxSizeTypeName>, NbTypes> &types() {
return types_; }
57 constexpr std::array<std::array<std::array<char, MaxSizeNodeName>, MaxNumberNodes>, NbTypes> &nodes() {
63 [[nodiscard]] std::map<std::string, std::vector<std::string>> mapNodeNameToTypeNames()
const{
64 std::map<std::string, std::vector<std::string>> map{};
66 for (
size_t typeId = 0; typeId < types_.size(); ++typeId) {
67 auto typeName = std::string(types_.at(typeId).data());
68 for (
auto const &nameArray : nodes_.at(typeId)) {
69 auto const &nodeName = std::string(nameArray.data());
70 if (!nodeName.empty()) {
71 if (map.count(nodeName)) { map.at(nodeName).push_back(typeName); }
72 else { map.insert({nodeName, {typeName}}); }