2
0

BsDynLibManager.cpp 1.1 KB

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