#ifndef COMPARATOR_API_MANAGER_H #define COMPARATOR_API_MANAGER_H #include #include #include #include #include #include #include #include #include #include #include namespace smo { namespace comparator_lib { class ComparatorApiManager { public: struct Resources { std::vector> libs; std::unordered_map< uint64_t, std::shared_ptr> typeRegistry; }; static ComparatorApiManager& getInstance() { static ComparatorApiManager instance; return instance; } ComparatorLib& loadComparatorLib(const std::string& libraryPath); void unloadComparatorLib(const std::string& libraryPath); void unloadAllComparatorLibs(void); std::optional> getComparatorLib( const std::string& libraryPath); std::shared_ptr getComparatorType( cologex::ComparatorTypeId typeId); std::unique_ptr getNewComparatorInstance( cologex::ComparatorTypeId typeId); std::unique_ptr getNewComparatorInstance( const std::shared_ptr& comparatorType); public: sscl::SharedResourceGroup s; private: ComparatorApiManager() : s("ComparatorApiManager") {} ~ComparatorApiManager() = default; ComparatorApiManager(const ComparatorApiManager&) = delete; ComparatorApiManager& operator=(const ComparatorApiManager&) = delete; }; } // namespace comparator_lib } // namespace smo #endif // COMPARATOR_API_MANAGER_H