BsManagedDataBlock.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. //__________________________ Banshee Project - A modern game development toolkit _________________________________//
  2. //_____________________________________ www.banshee-project.com __________________________________________________//
  3. //________________________ Copyright (c) 2014 Marko Pintera. All rights reserved. ________________________________//
  4. #include "BsManagedDataBlock.h"
  5. #include "BsException.h"
  6. namespace BansheeEngine
  7. {
  8. ManagedDataBlock::ManagedDataBlock(UINT8* data, UINT32 size, std::function<void(UINT8*)> deallocator)
  9. :mData(data), mSize(size), mManaged(false), mIsDataOwner(true), mDeallocator(deallocator)
  10. { }
  11. ManagedDataBlock::ManagedDataBlock(UINT32 size)
  12. :mSize(size), mManaged(true), mIsDataOwner(true), mDeallocator(nullptr)
  13. {
  14. mData = (UINT8*)bs_alloc<ScratchAlloc>(size);
  15. }
  16. ManagedDataBlock::ManagedDataBlock(const ManagedDataBlock& source)
  17. {
  18. mData = source.mData;
  19. mSize = source.mSize;
  20. mManaged = source.mManaged;
  21. mDeallocator = source.mDeallocator;
  22. mIsDataOwner = true;
  23. source.mIsDataOwner = false;
  24. }
  25. ManagedDataBlock::~ManagedDataBlock()
  26. {
  27. if(mManaged && mIsDataOwner)
  28. {
  29. if(mDeallocator != nullptr)
  30. mDeallocator(mData);
  31. else
  32. bs_free<ScratchAlloc>(mData);
  33. }
  34. }
  35. }