Cogs.Core
MaterialDefinitionManager.cpp
1#include "MaterialDefinitionManager.h"
2
3void Cogs::Core::MaterialDefinitionManager::add(MaterialDefinition && definition)
4{
5 auto code = StringView(definition.name).hash();
6 auto it = byName.find(code);
7
8 if (it != byName.end()) {
9 definitions[it->second] = std::move(definition);
10 } else {
11 definitions.emplace_back(std::move(definition));
12 byName[code] = definitions.size() - 1;
13 }
14}
15
16const Cogs::Core::MaterialDefinition * Cogs::Core::MaterialDefinitionManager::get(const StringView & name)
17{
18 auto code = StringView(name).hash();
19 auto it = byName.find(code);
20
21 if (it != byName.end()) {
22 return &definitions[it->second];
23 }
24
25
26 return nullptr;
27}
28
29std::string Cogs::Core::MaterialDefinitionManager::getReport() const
30{
31 assert(definitions.size() == byName.size());
32 char buf[1024];
33 auto rv = std::snprintf(buf, sizeof(buf), "size=%zu", definitions.size());
34 if (0 <= rv && rv < static_cast<int>(sizeof(buf))) {
35 return std::string(buf);
36 }
37 else {
38 return std::string();
39 }
40
41}