OSVR-Core
PluginSpecificRegistrationContextImpl.h
Go to the documentation of this file.
1 
11 // Copyright 2014 Sensics, Inc.
12 //
13 // Licensed under the Apache License, Version 2.0 (the "License");
14 // you may not use this file except in compliance with the License.
15 // You may obtain a copy of the License at
16 //
17 // http://www.apache.org/licenses/LICENSE-2.0
18 //
19 // Unless required by applicable law or agreed to in writing, software
20 // distributed under the License is distributed on an "AS IS" BASIS,
21 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22 // See the License for the specific language governing permissions and
23 // limitations under the License.
24 
25 #ifndef INCLUDED_PluginSpecificRegistrationContextImpl_h_GUID_E8A348C1_28DC_4691_6214_32F75A6665F0
26 #define INCLUDED_PluginSpecificRegistrationContextImpl_h_GUID_E8A348C1_28DC_4691_6214_32F75A6665F0
27 
28 // Internal Includes
31 #include <osvr/Util/UniquePtr.h>
33 #include <osvr/Util/AnyMap.h>
34 
35 // Library/third-party includes
36 #include <libfunctionality/PluginHandle.h>
37 
38 // Standard includes
39 #include <vector>
40 #include <functional>
41 
42 namespace osvr {
43 
44 namespace pluginhost {
50  public:
52  PluginSpecificRegistrationContextImpl(std::string const &name);
53 
58 
62  void takePluginHandle(libfunc::PluginHandle &handle);
63 
72  void setParent(RegistrationContext &parent);
73 
77  virtual RegistrationContext &getParent();
78 
82  virtual RegistrationContext const &getParent() const;
83 
87 
92  void instantiateDriver(const std::string &driverName,
93  const std::string &params = std::string()) const;
94 
96  virtual util::AnyMap &data();
97 
99  virtual util::AnyMap const &data() const;
100 
105 
108  virtual void registerDataWithDeleteCallback(
109  OSVR_PluginDataDeleteCallback deleteCallback, void *pluginData);
110 
111  virtual void registerHardwareDetectCallback(
112  OSVR_HardwareDetectCallback detectCallback, void *userData);
114  const char *name, OSVR_DriverInstantiationCallback constructor,
115  void *userData);
117 
118  private:
120  typedef unique_ptr<void, OSVR_PluginDataDeleteCallback> PluginDataPtr;
122  typedef std::vector<PluginDataPtr> PluginDataList;
123 
124  PluginDataList m_dataList;
125  libfunc::PluginHandle m_handle;
126  RegistrationContext *m_parent;
127 
130  typedef std::vector<HardwareDetectCallback> HardwareDetectCallbackList;
131  HardwareDetectCallbackList m_hardwareDetectCallbacks;
132 
133  typedef std::function<OSVR_ReturnCode(const char *)>
134  DriverInstantiationCallback;
135  typedef std::map<std::string, DriverInstantiationCallback>
136  DriverInstantiationMap;
137  DriverInstantiationMap m_driverInstantiationCallbacks;
138 
139  util::AnyMap m_data;
140  };
141 
142 } // namespace pluginhost
143 } // namespace osvr
144 
145 #endif // INCLUDED_PluginSpecificRegistrationContextImpl_h_GUID_E8A348C1_28DC_4691_6214_32F75A6665F0
void setParent(RegistrationContext &parent)
Set parent registration context.
Definition: PluginSpecificRegistrationContextImpl.cpp:65
virtual void registerDriverInstantiationCallback(const char *name, OSVR_DriverInstantiationCallback constructor, void *userData)
Register a callback for constructing a driver by name with parameters.
Definition: PluginSpecificRegistrationContextImpl.cpp:141
Class responsible for hosting plugins, along with their registration and destruction.
Definition: RegistrationContext.h:53
virtual util::AnyMap & data()
Access the data storage map.
Definition: PluginSpecificRegistrationContextImpl.cpp:165
The main namespace for all C++ elements of the framework, internal and external.
Definition: namespace_osvr.dox:3
Header providing a templated functor wrapping the holding and calling of function pointer and userdat...
Class providing the external interface of a registration context backing a single plugin...
Definition: PluginSpecificRegistrationContext.h:52
Header to bring unique_ptr into the osvr namespace.
A data structure storing "any" by name, to reduce coupling.
Definition: AnyMap.h:42
void(* OSVR_PluginDataDeleteCallback)(void *pluginData)
Function type of a Plugin Data Delete callback.
Definition: PluginCallbackTypesC.h:48
Header including the full PluginKit C API.
void instantiateDriver(const std::string &driverName, const std::string &params=std::string()) const
Call a driver instantiation callback for the given driver name.
Definition: PluginSpecificRegistrationContextImpl.cpp:102
OSVR_ReturnCode(* OSVR_HardwareDetectCallback)(OSVR_PluginRegContext ctx, void *userData)
Function type of a Hardware Detect callback.
Definition: PluginCallbackTypesC.h:51
void takePluginHandle(libfunc::PluginHandle &handle)
Assume ownership of the plugin handle keeping the plugin library loaded.
Definition: PluginSpecificRegistrationContextImpl.cpp:60
Header declaring the osvr::util::AnyMap structure.
void triggerHardwareDetectCallbacks()
Call all hardware detect callbacks registered by this plugin, if any.
Definition: PluginSpecificRegistrationContextImpl.cpp:92
virtual RegistrationContext & getParent()
Get parent registration context.
Definition: PluginSpecificRegistrationContextImpl.cpp:74
~PluginSpecificRegistrationContextImpl()
Destructor.
Definition: PluginSpecificRegistrationContextImpl.cpp:48
PluginSpecificRegistrationContextImpl(std::string const &name)
Constructor.
Definition: PluginSpecificRegistrationContextImpl.cpp:40
A class template turning a callback with some number of arguments, with a userdata pointer last...
Definition: CallbackWrapper.h:45
virtual void registerHardwareDetectCallback(OSVR_HardwareDetectCallback detectCallback, void *userData)
Register a callback to be invoked on some hardware detection event.
Definition: PluginSpecificRegistrationContextImpl.cpp:128
OSVR_ReturnCode(* OSVR_DriverInstantiationCallback)(OSVR_PluginRegContext ctx, const char *params, void *userData)
Function type of a driver instantiation callback.
Definition: PluginCallbackTypesC.h:55
Internal class backing the context of registrations performed by a single plugin. ...
Definition: PluginSpecificRegistrationContextImpl.h:48
virtual void registerDataWithDeleteCallback(OSVR_PluginDataDeleteCallback deleteCallback, void *pluginData)
Register data and a delete callback to be called on plugin unload.
Definition: PluginSpecificRegistrationContextImpl.cpp:118