#ifndef SENSE_API_MANAGER_H #define SENSE_API_MANAGER_H #include #include #include #include #include #include #include #include #include #include #include namespace smo { namespace stim_buff { class StimBuffApiManager { public: static StimBuffApiManager& getInstance() { static StimBuffApiManager instance; return instance; } void initialize(void) {}; void finalize(void) {}; StimBuffApiLib& loadStimBuffApiLib( const std::string& libraryPath, const std::shared_ptr& componentThread); std::optional> getStimBuffApiLib( const std::string& libraryPath); std::optional> getStimBuffApiLibByApiName( const std::string& apiName); void unloadStimBuffApiLib(const std::string& libraryPath); void initializeStimBuffApiLib(StimBuffApiLib& lib); void finalizeStimBuffApiLib(StimBuffApiLib& lib); void loadAllStimBuffApiLibsFromOptions( const std::shared_ptr& componentThread); void unloadAllStimBuffApiLibs(void); void initializeAllStimBuffApiLibs(void); void finalizeAllStimBuffApiLibs(void); std::string stringifyLibs() const; private: StimBuffApiManager() : qutex("StimBuffApiManager") {} ~StimBuffApiManager() = default; StimBuffApiManager(const StimBuffApiManager&) = delete; StimBuffApiManager& operator=(const StimBuffApiManager&) = delete; std::vector> stimBuffApiLibs; public: Qutex qutex; public: static std::optional searchForLibInSmoSearchPaths( const std::string& libraryPath); }; } // namespace stim_buff } // namespace smo #endif // SENSE_API_MANAGER_H