diff options
Diffstat (limited to 'entity_map_json.cpp')
-rw-r--r-- | entity_map_json.cpp | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/entity_map_json.cpp b/entity_map_json.cpp index 96ef61c..c0b836c 100644 --- a/entity_map_json.cpp +++ b/entity_map_json.cpp @@ -3,6 +3,7 @@ #include <exception> #include <fstream> #include <ipmid/types.hpp> +#include <memory> #include <nlohmann/json.hpp> #include <string> #include <utility> @@ -14,9 +15,34 @@ namespace sensor extern const EntityInfoMap entities; -const EntityInfoMap& getIpmiEntityRecords() +EntityInfoMapContainer* EntityInfoMapContainer::getContainer() { - return entities; + static std::unique_ptr<EntityInfoMapContainer> instance; + + if (!instance) + { + /* TODO: With multi-threading this would all need to be locked so + * the first thread to hit it would set it up. + */ + EntityInfoMap builtEntityMap = buildEntityMapFromFile(); + if (!builtEntityMap.empty()) + { + instance = std::unique_ptr<EntityInfoMapContainer>( + new EntityInfoMapContainer(builtEntityMap)); + } + else + { + instance = std::unique_ptr<EntityInfoMapContainer>( + new EntityInfoMapContainer(entities)); + } + } + + return instance.get(); +} + +const EntityInfoMap& EntityInfoMapContainer::getIpmiEntityRecords() +{ + return entityRecords; } EntityInfoMap buildEntityMapFromFile() |