BsCoreObjectManager.h 911 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #pragma once
  2. #include "BsCorePrerequisites.h"
  3. #include "BsModule.h"
  4. namespace BansheeEngine
  5. {
  6. // TODO Low priority - Add debug option that would remember a call stack for each resource initialization,
  7. // so when we fail to release one we know which one it is.
  8. /**
  9. * @brief Manager that keeps track of all active CoreObjects.
  10. *
  11. * @note Thread safe.
  12. */
  13. class BS_CORE_EXPORT CoreObjectManager : public Module<CoreObjectManager>
  14. {
  15. public:
  16. CoreObjectManager();
  17. ~CoreObjectManager();
  18. /**
  19. * @brief Registers a new CoreObject notifying the manager the object
  20. * is created.
  21. */
  22. UINT64 registerObject(CoreObject* object);
  23. /**
  24. * @brief Unregisters a CoreObject notifying the manager the object
  25. * is destroyed.
  26. */
  27. void unregisterObject(CoreObject* object);
  28. private:
  29. UINT64 mNextAvailableID;
  30. Map<UINT64, CoreObject*> mObjects;
  31. BS_MUTEX(mObjectsMutex);
  32. };
  33. }