#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: struct Resources { std::vector> stimBuffApiLibs; }; 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> findStimBuffApiLibByApiName( const std::string& apiName); StimBuffApiLib &getStimBuffApiLibByApiName(const std::string& apiName); void unloadStimBuffApiLib(const std::string& libraryPath); void loadAllStimBuffApiLibsFromOptions( const std::shared_ptr& componentThread); void unloadAllStimBuffApiLibs(void); body::BodyViralPostingInvoker initializeStimBuffApiLibCReq( StimBuffApiLib &lib, bool acquireSbamLock=true); body::BodyViralPostingInvoker finalizeStimBuffApiLibCReq( StimBuffApiLib &lib, bool acquireSbamLock=true); body::BodyViralPostingInvoker initializeAllStimBuffApiLibsCReq(); body::BodyViralPostingInvoker finalizeAllStimBuffApiLibsCReq(); std::string stringifyLibs() const; private: StimBuffApiManager() : s("StimBuffApiManager") {} ~StimBuffApiManager() = default; StimBuffApiManager(const StimBuffApiManager&) = delete; StimBuffApiManager& operator=(const StimBuffApiManager&) = delete; public: sscl::SharedResourceGroup s; public: static std::optional searchForLibInSmoSearchPaths( const std::string& libraryPath); }; } // namespace stim_buff } // namespace smo #endif // SENSE_API_MANAGER_H