summaryrefslogtreecommitdiffhomepage
path: root/logic/state.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'logic/state.cpp')
-rw-r--r--logic/state.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/logic/state.cpp b/logic/state.cpp
new file mode 100644
index 00000000..afdf5b12
--- /dev/null
+++ b/logic/state.cpp
@@ -0,0 +1,45 @@
+#include "state.hpp"
+
+#include <iterator>
+
+using dylib_ptr = Modules::dylib_ptr;
+using dylib_list = Modules::dylib_list;
+
+std::tuple<dylib_ptr, int> State::module_by_name(const QString& name, dylib_list& list)
+{
+ auto it = std::find_if(list.cbegin(), list.cend(), [&name](const dylib_ptr& lib) {
+ if (!lib)
+ return name.isEmpty();
+ else
+ return name == lib->module_name;
+ });
+
+ if (it == list.cend())
+ return { nullptr, -1 };
+ else
+ return { *it, int(std::distance(list.cbegin(), it)) };
+}
+
+State::State(const QString& library_path) :
+ modules(library_path),
+ ev(modules.extensions()),
+ pose(s.all_axis_opts)
+{}
+
+dylib_ptr State::current_tracker()
+{
+ auto [ptr, idx] = module_by_name(m.tracker_dll, modules.trackers());
+ return ptr;
+}
+
+dylib_ptr State::current_protocol()
+{
+ auto [ptr, idx] = module_by_name(m.protocol_dll, modules.protocols());
+ return ptr;
+}
+
+dylib_ptr State::current_filter()
+{
+ auto [ptr, idx] = module_by_name(m.filter_dll, modules.filters());
+ return ptr;
+}