7#include <unordered_map>
42 template<
typename ModelType>
54 template<
typename ModelType>
61 template<
typename ModelType>
68 template <
typename ModelCreator>
69 void registerModel(ModelCreator&& creator, std::string
const& category =
"Nodes")
75 template <
typename ModelCreator>
87 std::unique_ptr<WtNodeDataModel>
create(std::string
const& modelName);
107 template <
typename T,
typename =
void>
110 template <
typename T>
114 template <
typename ModelType>
117 return ModelType::Name();
120 template<
typename ModelType>
123 return creator()->name();
126 template <
typename T>
130 static_assert(!std::is_same<T, T>::value,
131 "The ModelCreator must return a std::unique_ptr<T>, where T "
132 "inherits from WtNodeDataModel");
135 template <
typename T>
138 static_assert(std::is_base_of<WtNodeDataModel, T>::value,
139 "The ModelCreator must return a std::unique_ptr<T>, where T "
140 "inherits from WtNodeDataModel");
144 template <
typename CreatorResult>
std::shared_ptr< WtNodeData > SharedNodeData
std::pair< NodeDataType, NodeDataType > TypeConverterId
std::function< SharedNodeData(SharedNodeData)> TypeConverter
bool operator<(NodeDataType const &d1, NodeDataType const &d2)
WtDataModelRegistry(WtDataModelRegistry &&)=default
CategoriesSet _categories
void registerModel(ModelCreator &&creator, std::string const &category="Nodes")
void registerModel(std::string const &category, ModelCreator &&creator)
std::set< std::string > CategoriesSet
std::unordered_map< std::string, RegistryItemCreator > RegisteredModelCreatorsMap
static std::string computeName(std::true_type, RegistryItemCreator const &)
CategoriesSet const & categories() const
WtDataModelRegistry & operator=(WtDataModelRegistry const &)=delete
void registerModel(std::string const &category, RegistryItemCreator creator)
void registerTypeConverter(TypeConverterId const &id, TypeConverter typeConverter)
WtDataModelRegistry & operator=(WtDataModelRegistry &&)=default
std::unordered_map< std::string, std::string > RegisteredModelsCategoryMap
std::unique_ptr< WtNodeDataModel > RegistryItemPtr
RegisteredModelsCategoryMap const & registeredModelsCategoryAssociation() const
WtDataModelRegistry()=default
typename UnwrapUniquePtr< CreatorResult >::type compute_model_type_t
std::map< TypeConverterId, TypeConverter > RegisteredTypeConvertersMap
WtDataModelRegistry(WtDataModelRegistry const &)=delete
void registerModel(std::string const &category="Nodes")
RegisteredModelsCategoryMap _registeredModelsCategory
TypeConverter getTypeConverter(NodeDataType const &d1, NodeDataType const &d2) const
RegisteredModelCreatorsMap _registeredItemCreators
std::unique_ptr< WtNodeDataModel > create(std::string const &modelName)
~WtDataModelRegistry()=default
std::function< RegistryItemPtr()> RegistryItemCreator
RegisteredModelCreatorsMap const & registeredModelCreators() const
RegisteredTypeConvertersMap _registeredTypeConverters
void registerModel(RegistryItemCreator creator, std::string const &category="Nodes")
static std::string computeName(std::false_type, RegistryItemCreator const &creator)