BsManagedDataBlock.cpp 864 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #include "BsManagedDataBlock.h"
  2. #include "BsException.h"
  3. namespace BansheeEngine
  4. {
  5. ManagedDataBlock::ManagedDataBlock(UINT8* data, UINT32 size, std::function<void(UINT8*)> deallocator)
  6. :mData(data), mSize(size), mManaged(false), mIsDataOwner(true), mDeallocator(deallocator)
  7. { }
  8. ManagedDataBlock::ManagedDataBlock(UINT32 size)
  9. :mSize(size), mManaged(true), mIsDataOwner(true), mDeallocator(nullptr)
  10. {
  11. mData = (UINT8*)bs_alloc(size);
  12. }
  13. ManagedDataBlock::ManagedDataBlock(const ManagedDataBlock& source)
  14. {
  15. mData = source.mData;
  16. mSize = source.mSize;
  17. mManaged = source.mManaged;
  18. mDeallocator = source.mDeallocator;
  19. mIsDataOwner = true;
  20. source.mIsDataOwner = false;
  21. }
  22. ManagedDataBlock::~ManagedDataBlock()
  23. {
  24. if(mManaged && mIsDataOwner)
  25. {
  26. if(mDeallocator != nullptr)
  27. mDeallocator(mData);
  28. else
  29. bs_free(mData);
  30. }
  31. }
  32. }