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}}); }