10 #ifndef smtk_attribute_EvaluatorManager_h
11 #define smtk_attribute_EvaluatorManager_h
13 #include "smtk/CoreExports.h"
16 #include "smtk/attribute/Resource.h"
20 #include "smtk/resource/Manager.h"
21 #include "smtk/resource/Observer.h"
54 class SMTKCORE_EXPORT
EvaluatorManager :
public std::enable_shared_from_this<EvaluatorManager>
59 static std::shared_ptr<EvaluatorManager> create()
75 bool registerResourceManager(smtk::resource::Manager::Ptr&);
78 bool registerEvaluatorsTo(smtk::attribute::Resource::Ptr& resource)
const
80 for (
const auto& registerFunction : m_registerFunctions)
82 registerFunction.second(*resource);
89 template<
typename EvaluatorType>
90 bool registerEvaluator(
const std::string& alias)
95 resource.evaluatorFactory().registerEvaluator<EvaluatorType>(alias);
99 m_registerFunctions.insert(
100 std::make_pair(
typeid(EvaluatorType).hash_code(), registerEvaluatorType));
103 if (
auto manager = m_manager.lock())
107 auto registerEvaluatorObserver = [registerEvaluatorType](
123 m_observers.insert(std::make_pair(
124 typeid(EvaluatorType).hash_code(),
125 manager->observers().insert(
126 registerEvaluatorObserver,
127 "Register Evaluator type <" + smtk::common::typeName<EvaluatorType>() +
"> with alias " +
135 template<
typename EvaluatorType>
136 bool unregisterEvaluator()
139 m_registerFunctions.erase(
typeid(EvaluatorType).hash_code());
142 m_observers.erase(
typeid(EvaluatorType).hash_code());
145 if (
auto manager = m_manager.lock())
150 resource->evaluatorFactory().unregisterEvaluator<EvaluatorType>();
164 std::weak_ptr<smtk::resource::Manager> m_manager;
166 std::unordered_map<std::size_t, smtk::resource::Observers::Key> m_observers;
172 #endif // smtk_attribute_EvaluatorManager_h