#ifndef QUERY_LIBRARY_HPP #define QUERY_LIBRARY_HPP #include #if defined(_MSC_VER) || defined(__MINGW32__) #define _WINSOCKAPI_ #include #else #include #endif namespace matador::utils { #ifndef MATADOR_DOXYGEN_DOC #if defined(_MSC_VER) || defined(__MINGW32__) typedef FARPROC func_ptr; #else typedef void *func_ptr; #endif #endif /* MATADOR_DOXYGEN_DOC */ /** * @class library * @brief Helps to load and unload * external libraries. * * This class represents a loader and un-loader * for an external library. The path to the library * is given by a string. * It can be loaded and unloaded. Furthermore it * provides a method to get a pointer to an function * exported by the library. The function is identified * by a name. */ class library { public: /** * Create a unspecified library serializable */ library() = default; /** * Create a library for the given lib path * * @param lib The path to the library to map. */ explicit library(std::string lib); ~library(); /** * Load the underlying library. * If the library path is invalid * or the library cannot be loaded * false is returned. * * @return True on successful library loading. */ bool load(); /** * Sets the library (and subsequently close and * overwrite an already instantiated library) and * load the underlying library. If the library * path is invalid or the library cannot be loaded * false is returned. * * @param lib The path to the library to load. * @return True on successful library loading. */ bool load(const std::string &lib); /** * Unload an loaded library. If * the library isn't loaded or an * error occurred while unloading * false is returned. * * @return True on successful unloading. */ bool unload(); /** * Returns the pointer to the exported * function of the library identified * by the given name. * * @param f The name of the exported function. * @return The pointer to the function. */ [[nodiscard]] func_ptr function(const std::string &f) const; private: std::string lib_; #if defined(_WIN32) || defined(__MINGW32__) HMODULE handle_ = nullptr; #else void *handle_ = nullptr; #endif }; } #endif //QUERY_LIBRARY_HPP