10 #ifndef smtk_geometry_Manager_h
11 #define smtk_geometry_Manager_h
13 #include "smtk/geometry/Backend.h"
14 #include "smtk/geometry/Resource.h"
16 #include "smtk/resource/Manager.h"
17 #include "smtk/resource/Observer.h"
20 #include "smtk/common/UUID.h"
22 #include "smtk/CoreExports.h"
25 #include "smtk/SystemConfig.h"
30 #include <unordered_map>
57 template<
typename Backend>
60 auto entry = std::make_shared<Backend>();
61 if (m_backends.find(entry->index()) == m_backends.end())
63 m_backends[entry->index()] = entry;
64 if (
auto resourceManager = m_resourceManager.lock())
66 this->constructGeometry(resourceManager, *entry);
74 template<
typename Backend>
78 auto it = m_backends.find(entry.
index());
79 if (it == m_backends.end())
88 void visitBackends(std::function<
void(
const Backend&)> visitor)
const;
91 void registerResourceManager(
const smtk::resource::Manager::Ptr& manager);
95 void constructGeometry(
96 const std::shared_ptr<smtk::resource::Manager>& resourceManager,
103 std::weak_ptr<smtk::resource::Manager> m_resourceManager;
105 smtk::resource::Observers::Key m_resourceObserverKey;
107 std::map<Backend::index_t, std::shared_ptr<Backend>> m_backends;
113 #endif // smtk_geometry_Manager_h