SMTK  @SMTK_VERSION@
Simulation Modeling Tool Kit
Manager.h
1 //=========================================================================
2 // Copyright (c) Kitware, Inc.
3 // All rights reserved.
4 // See LICENSE.txt for details.
5 //
6 // This software is distributed WITHOUT ANY WARRANTY; without even
7 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
8 // PURPOSE. See the above copyright notice for more information.
9 //=========================================================================
10 #ifndef smtk_geometry_Manager_h
11 #define smtk_geometry_Manager_h
12 
13 #include "smtk/geometry/Backend.h"
14 #include "smtk/geometry/Resource.h"
15 
16 #include "smtk/resource/Manager.h"
17 #include "smtk/resource/Observer.h"
18 
19 #include "smtk/common/TypeName.h"
20 #include "smtk/common/UUID.h"
21 
22 #include "smtk/CoreExports.h"
23 #include "smtk/PublicPointerDefs.h"
24 #include "smtk/SharedFromThis.h"
25 #include "smtk/SystemConfig.h"
26 
27 #include <functional>
28 #include <string>
29 #include <typeinfo>
30 #include <unordered_map>
31 
32 namespace smtk
33 {
34 namespace geometry
35 {
48 class SMTKCORE_EXPORT Manager : smtkEnableSharedPtr(Manager)
49 {
50 public:
53 
54  virtual ~Manager() = default;
55 
57  template<typename Backend>
59  {
60  auto entry = std::make_shared<Backend>();
61  if (m_backends.find(entry->index()) == m_backends.end())
62  {
63  m_backends[entry->index()] = entry;
64  if (auto resourceManager = m_resourceManager.lock())
65  {
66  this->constructGeometry(resourceManager, *entry);
67  }
68  return true;
69  }
70  return false;
71  }
72 
74  template<typename Backend>
76  {
77  Backend entry;
78  auto it = m_backends.find(entry.index());
79  if (it == m_backends.end())
80  {
81  return false;
82  }
83  m_backends.erase(it);
84  return true;
85  }
86 
88  void visitBackends(std::function<void(const Backend&)> visitor) const;
89 
91  void registerResourceManager(const smtk::resource::Manager::Ptr& manager);
92 
93 protected:
95  void constructGeometry(
96  const std::shared_ptr<smtk::resource::Manager>& resourceManager,
97  Backend& backend);
98 
99 private:
100  Manager() = default;
101 
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;
108 };
109 
110 } // namespace geometry
111 } // namespace smtk
112 
113 #endif // smtk_geometry_Manager_h
smtk
The main namespace for the Simulation Modeling Tool Kit (SMTK).
Definition: doc.h:33
PublicPointerDefs.h
smtk::geometry::Manager::registerBackend
bool registerBackend()
Register a geometry backend type with the resource manager.
Definition: Manager.h:58
smtk::geometry::Manager
Maintain a list of backends for which resources should provide geometry.
Definition: Manager.h:48
smtkTypedefs
#define smtkTypedefs(...)
Used by smtkTypeMacro()
Definition: SharedFromThis.h:21
smtkCreateMacro
#define smtkCreateMacro(...)
Add static create() methods to a class.
Definition: SharedFromThis.h:113
smtkEnableSharedPtr
#define smtkEnableSharedPtr(...)
An abbreviation for enabling shared pointers.
Definition: SharedFromThis.h:154
TypeName.h
Named type functions.
smtk::geometry::Manager::unregisterBackend
bool unregisterBackend()
Unregister a geometry backend type with the resource manager.
Definition: Manager.h:75
smtk::geometry::Backend::index
virtual index_t index() const
Index is a compile-time intrinsic of the derived backend. It is used for disambiguation of backends.
Definition: Backend.h:35
smtk::geometry::Backend
This is an empty class used by geometry providers to specify their interface.
Definition: Backend.h:28
SharedFromThis.h
Macros for dealing with shared-pointer classes.