BsDynLibManager.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsDynLibManager.h"
  4. #include "BsDynLib.h"
  5. namespace BansheeEngine
  6. {
  7. DynLibManager::DynLibManager()
  8. {
  9. }
  10. DynLib* DynLibManager::load(const String& filename)
  11. {
  12. auto iterFind = mLoadedLibraries.find(filename);
  13. if (iterFind != mLoadedLibraries.end())
  14. {
  15. return iterFind->second;
  16. }
  17. else
  18. {
  19. DynLib* newLib = new (bs_alloc<DynLib>()) DynLib(filename);
  20. mLoadedLibraries[filename] = newLib;
  21. return newLib;
  22. }
  23. }
  24. void DynLibManager::unload(DynLib* lib)
  25. {
  26. auto iterFind = mLoadedLibraries.find(lib->getName());
  27. if (iterFind != mLoadedLibraries.end())
  28. {
  29. mLoadedLibraries.erase(iterFind);
  30. }
  31. lib->unload();
  32. bs_delete(lib);
  33. }
  34. DynLibManager::~DynLibManager()
  35. {
  36. // Unload & delete resources in turn
  37. for(auto& entry : mLoadedLibraries)
  38. {
  39. entry.second->unload();
  40. bs_delete(entry.second);
  41. }
  42. // Empty the list
  43. mLoadedLibraries.clear();
  44. }
  45. DynLibManager& gDynLibManager()
  46. {
  47. return DynLibManager::instance();
  48. }
  49. }