diff --git a/src/fmri/LayerInfo.cpp b/src/fmri/LayerInfo.cpp index 63a2844..bc041c8 100644 --- a/src/fmri/LayerInfo.cpp +++ b/src/fmri/LayerInfo.cpp @@ -49,14 +49,22 @@ const std::vector>>& LayerInfo::parameters( std::ostream &fmri::operator<<(std::ostream &out, LayerInfo::Type type) { - for (auto i : LayerInfo::NAME_TYPE_MAP) { - if (i.second == type) { - out << i.first; - return out; + return out << LayerInfo::nameByType(type); +} + +std::string_view LayerInfo::nameByType(LayerInfo::Type type) +{ + static std::unordered_map typeMap; + if (typeMap.empty()) { + for (auto item : LayerInfo::NAME_TYPE_MAP) { + typeMap[item.second] = item.first; } } - out << "ERROR! UNSUPPORTED TYPE"; - return out; + try { + return typeMap.at(type); + } catch (std::out_of_range&) { + return "ERROR! UNSUPPORTED TYPE"; + } } diff --git a/src/fmri/LayerInfo.hpp b/src/fmri/LayerInfo.hpp index 7a065f5..903cf1e 100644 --- a/src/fmri/LayerInfo.hpp +++ b/src/fmri/LayerInfo.hpp @@ -32,8 +32,7 @@ namespace fmri const std::vector>>& parameters() const; static Type typeByName(std::string_view name); - - friend std::ostream& operator<<(std::ostream& out, Type type); + static std::string_view nameByType(Type type); private: std::vector>> parameters_; diff --git a/src/fmri/main.cpp b/src/fmri/main.cpp index 0365c95..9780636 100644 --- a/src/fmri/main.cpp +++ b/src/fmri/main.cpp @@ -109,7 +109,10 @@ static void renderLayerName(const LayerData &data) { // Draw the name of the layer for reference. glColor3f(0.5, 0.5, 0.5); - renderText(data.name()); + auto layerName = data.name(); + layerName += ": "; + layerName += LayerInfo::nameByType(rendererData.layerInfo.at(data.name()).type()); + renderText(layerName); glTranslatef(0, 0, -10); }