SMTK
@SMTK_VERSION@
Simulation Modeling Tool Kit
|
11 #ifndef smtk_operation_Manager_h
12 #define smtk_operation_Manager_h
14 #include "smtk/CoreExports.h"
18 #include "smtk/common/Managers.h"
21 #include "smtk/operation/Group.h"
22 #include "smtk/operation/Launcher.h"
23 #include "smtk/operation/Metadata.h"
24 #include "smtk/operation/MetadataContainer.h"
25 #include "smtk/operation/Observer.h"
26 #include "smtk/operation/Operation.h"
31 #include <type_traits>
51 template<
typename OperationType>
52 bool registerOperation();
55 template<
typename OperationType>
56 bool registerOperation(
const std::string&);
62 template<
typename Tuple>
65 return Manager::registerOperations<0, Tuple>();
70 template<
typename Tuple>
73 return Manager::registerOperations<0, Tuple>(typeNames);
77 template<
typename OperationType>
78 bool unregisterOperation();
81 bool unregisterOperation(
const std::string&);
84 bool unregisterOperation(
const Operation::Index&);
87 template<
typename Tuple>
88 bool unregisterOperations()
90 return Manager::unregisterOperations<0, Tuple>();
93 bool registered(
const std::string&)
const;
94 bool registered(
const Operation::Index&)
const;
95 template<
typename OperationNtype>
96 bool registered()
const;
99 std::shared_ptr<smtk::operation::Operation> create(
const std::string&);
102 std::shared_ptr<smtk::operation::Operation> create(
const Operation::Index&);
105 template<
typename OperationType>
106 smtk::shared_ptr<OperationType> create();
111 Operation::Index registeredTypeIndex(
const std::string&
typeName)
const;
121 const Launchers& launchers()
const {
return m_launchers; }
125 const Observers& observers()
const {
return m_observers; }
136 smtk::common::Managers::Ptr managers()
const {
return m_managers.lock(); }
137 void setManagers(
const smtk::common::Managers::Ptr& managers) { m_managers = managers; }
148 std::set<std::string> availableOperations()
const;
155 std::set<std::string> availableGroups()
const;
160 template<std::
size_t I,
typename Tuple>
161 inline typename std::enable_if<I != std::tuple_size<Tuple>::value,
bool>::type
164 bool registered = this->registerOperation<typename std::tuple_element<I, Tuple>::type>();
165 return registered && Manager::registerOperations<I + 1, Tuple>();
168 template<std::
size_t I,
typename Tuple>
169 inline typename std::enable_if<I == std::tuple_size<Tuple>::value,
bool>::type
175 template<std::
size_t I,
typename Tuple>
176 inline typename std::enable_if<I != std::tuple_size<Tuple>::value,
bool>::type registerOperations(
177 const std::array<std::string, std::tuple_size<Tuple>::value>& typeNames)
180 this->registerOperation<typename std::tuple_element<I, Tuple>::type>(typeNames.at(I));
181 return registered && Manager::registerOperations<I + 1, Tuple>(typeNames);
184 template<std::
size_t I,
typename Tuple>
185 inline typename std::enable_if<I == std::tuple_size<Tuple>::value,
bool>::type registerOperations(
186 const std::array<std::string, std::tuple_size<Tuple>::value>&)
191 template<std::
size_t I,
typename Tuple>
192 inline typename std::enable_if<I != std::tuple_size<Tuple>::value,
bool>::type
193 unregisterOperations()
195 bool unregistered = this->unregisterOperation<typename std::tuple_element<I, Tuple>::type>();
196 return unregistered && Manager::unregisterOperations<I + 1, Tuple>();
199 template<std::
size_t I,
typename Tuple>
200 inline typename std::enable_if<I == std::tuple_size<Tuple>::value,
bool>::type
201 unregisterOperations()
207 Launchers m_launchers;
213 Group::Observers m_groupObservers;
216 Metadata::Observers m_metadataObservers;
219 Observers::Key m_resourceObserver;
226 std::weak_ptr<smtk::common::Managers> m_managers;
229 template<
typename OperationType>
235 template<
typename OperationType>
238 return smtk::static_pointer_cast<OperationType>(
239 this->
create(std::type_index(
typeid(OperationType)).hash_code()));
242 template<
typename OperationType>
245 return Manager::registerOperation<OperationType>(smtk::common::typeName<OperationType>());
248 template<
typename OperationType>
259 std::type_index(
typeid(OperationType)).hash_code(),
260 std::dynamic_pointer_cast<Operation>(OperationType::create())->createSpecification(),
261 []() {
return OperationType::create(); }));
264 template<
typename OperationType>
265 bool Manager::registered()
const
267 return Manager::registered(std::type_index(
typeid(OperationType)).hash_code());
272 #endif // smtk_operation_Manager_h
The main namespace for the Simulation Modeling Tool Kit (SMTK).
Definition: doc.h:33
An operation Manager is responsible for creating new operations and filtering operations based on inp...
Definition: Manager.h:42
Group::Observers & groupObservers()
Return the group observers associated with this manager.
Definition: Manager.h:128
bool registerOperations()
Register a tuple of operations identified by their class types.
Definition: Manager.h:63
#define smtkTypedefs(...)
Used by smtkTypeMacro()
Definition: SharedFromThis.h:24
MetadataContainer & metadata()
Return the map of metadata.
Definition: Manager.h:117
bool registerOperations(const std::array< std::string, std::tuple_size< Tuple >::value > &typeNames)
Register a tuple of operations identified by their class types and type names.
Definition: Manager.h:71
Launchers & launchers()
Return the launchers associated with this manager.
Definition: Manager.h:120
#define smtkCreateMacro(...)
Add static create() methods to a class.
Definition: SharedFromThis.h:173
#define smtkEnableSharedPtr(...)
An abbreviation for enabling shared pointers.
Definition: SharedFromThis.h:214
smtk::common::Observers< Observer > Observers
Operation observers are a specialization of the common SMTK observer pattern.
Definition: Observer.h:45
bool unregisterOperation()
Unegister an operation identified by its class type.
Definition: Manager.h:230
A functor for executing operations and returning futures of the result.
Definition: Launcher.h:31
boost::multi_index_container< Metadata, indexed_by< ordered_unique< tag< NameTag >, const_mem_fun< Metadata, const std::string &, &Metadata::typeName > >, ordered_unique< tag< IndexTag >, const_mem_fun< Metadata, const smtk::operation::Operation::Index &, &Metadata::index > > > > MetadataContainer
A multi-index container for accessing operation metadata.
Definition: MetadataContainer.h:47
smtk::common::Singleton< detail::Manager > Manager
The Manager is a singleton interface for registering available plugins to manager instances.
Definition: Manager.h:92
std::string typeName()
Return the name of a class.
Definition: TypeName.h:289
Observers & observers()
Return the observers associated with this manager.
Definition: Manager.h:124
Metadata::Observers & metadataObservers()
Return the metadata observers associated with this manager.
Definition: Manager.h:132
bool registerOperation()
Register an operation identified by its class type.
Definition: Manager.h:243
Macros for dealing with shared-pointer classes.
smtk::shared_ptr< smtk::resource::Manager > ManagerPtr
Definition: PublicPointerDefs.h:288
smtk::shared_ptr< smtk::resource::Component > ComponentPtr
Definition: PublicPointerDefs.h:304
smtk::shared_ptr< OperationType > create()
Construct an operation identified by its class type.
Definition: Manager.h:236