#include "MantidKernel/DllOpen.h"
#include "MantidKernel/LibraryWrapper.h"

namespace Mantid {
namespace Kernel {

/// Constructor
LibraryWrapper::LibraryWrapper() : module(0) {}

/// Destructor
LibraryWrapper::~LibraryWrapper() {
  // Close lib
  if (module) {
    DllOpen::CloseDll(module);
    module = 0;
  }
}

/** Opens a DLL.
 *  @param libName :: The name of the file to open (not including the
 * lib/so/dll).
 *  @return True if DLL is opened or already open.
 */
bool LibraryWrapper::OpenLibrary(const std::string &libName) {
  if (!module) {
    // Load dynamically loaded library
    module = DllOpen::OpenDll(libName);

    if (!module) {
      return false;
    }
  }

  return true;
}

/** Opens a DLL.
 *  @param libName :: The name of the file to open (not including the
 * lib/so/dll).
 *  @param filePath :: The filepath to the directory where the library is.
 *  @return True if DLL is opened or already open
 */
bool LibraryWrapper::OpenLibrary(const std::string &libName,
                                 const std::string &filePath) {
  if (!module) {
    // Load dynamically loaded library
    module = DllOpen::OpenDll(libName, filePath);
    if (!module) {
      return false;
    }
  }

  return true;
}

} // namespace Kernel
} // namespace Mantid