diff options
Diffstat (limited to 'logic')
| -rw-r--r-- | logic/state.cpp | 45 | ||||
| -rw-r--r-- | logic/state.hpp | 22 | 
2 files changed, 60 insertions, 7 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; +} diff --git a/logic/state.hpp b/logic/state.hpp index c400df18..abce1daf 100644 --- a/logic/state.hpp +++ b/logic/state.hpp @@ -14,19 +14,27 @@  #include "mappings.hpp"  #include "extensions.hpp"  #include "work.hpp" -#include <vector> +#include "export.hpp" + +#include <memory>  #include <QString> -struct State +struct OTR_LOGIC_EXPORT State  { -    explicit State(const QString& library_path) : -        modules(library_path), -        ev(modules.extensions()), -        pose(s.all_axis_opts) -    {} +    using dylib_ptr = Modules::dylib_ptr; +    using dylib_list = Modules::dylib_list; + +    explicit State(const QString& library_path); +    static std::tuple<dylib_ptr, int> module_by_name(const QString& name, dylib_list& list); + +    dylib_ptr current_tracker(); +    dylib_ptr current_protocol(); +    dylib_ptr current_filter(); +      Modules modules;      event_handler ev;      main_settings s; +    module_settings m;      Mappings pose;      std::shared_ptr<Work> work;  }; | 
