Skip to content

Commit 5729d97

Browse files
DataBlobImpl: added option to use custom memory allocator
1 parent 5196c52 commit 5729d97

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

Common/interface/DataBlobImpl.hpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "../../Primitives/interface/BasicTypes.h"
3535
#include "../../Primitives/interface/DataBlob.h"
3636
#include "../../Primitives/interface/MemoryAllocator.h"
37+
#include "STDAllocator.hpp"
3738
#include "RefCntAutoPtr.hpp"
3839
#include "ObjectBase.hpp"
3940

@@ -47,6 +48,7 @@ class DataBlobImpl final : public Diligent::ObjectBase<IDataBlob>
4748
typedef ObjectBase<IDataBlob> TBase;
4849

4950
static RefCntAutoPtr<DataBlobImpl> Create(size_t InitialSize = 0, const void* pData = nullptr);
51+
static RefCntAutoPtr<DataBlobImpl> Create(IMemoryAllocator* pAllocator, size_t InitialSize = 0, const void* pData = nullptr);
5052
static RefCntAutoPtr<DataBlobImpl> MakeCopy(const IDataBlob* pDataBlob);
5153

5254
~DataBlobImpl() override;
@@ -81,10 +83,13 @@ class DataBlobImpl final : public Diligent::ObjectBase<IDataBlob>
8183
template <typename AllocatorType, typename ObjectType>
8284
friend class MakeNewRCObj;
8385

84-
explicit DataBlobImpl(IReferenceCounters* pRefCounters, size_t InitialSize = 0, const void* pData = nullptr);
86+
DataBlobImpl(IReferenceCounters* pRefCounters,
87+
IMemoryAllocator& Allocator,
88+
size_t InitialSize = 0,
89+
const void* pData = nullptr);
8590

8691
private:
87-
std::vector<Uint8> m_DataBuff;
92+
std::vector<Uint8, STDAllocatorRawMem<Uint8>> m_DataBuff;
8893
};
8994

9095
class DataBlobAllocatorAdapter final : public IMemoryAllocator

Common/src/DataBlobImpl.cpp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,23 @@
2727

2828
#include "pch.h"
2929
#include "DataBlobImpl.hpp"
30+
#include "DefaultRawMemoryAllocator.hpp"
3031

3132
#include <cstring>
3233

3334
namespace Diligent
3435
{
3536

37+
RefCntAutoPtr<DataBlobImpl> DataBlobImpl::Create(IMemoryAllocator* pAllocator, size_t InitialSize, const void* pData)
38+
{
39+
if (pAllocator == nullptr)
40+
pAllocator = &DefaultRawMemoryAllocator::GetAllocator();
41+
return RefCntAutoPtr<DataBlobImpl>{MakeNewRCObj<DataBlobImpl>()(*pAllocator, InitialSize, pData)};
42+
}
43+
3644
RefCntAutoPtr<DataBlobImpl> DataBlobImpl::Create(size_t InitialSize, const void* pData)
3745
{
38-
return RefCntAutoPtr<DataBlobImpl>{MakeNewRCObj<DataBlobImpl>()(InitialSize, pData)};
46+
return Create(nullptr, InitialSize, pData);
3947
}
4048

4149
RefCntAutoPtr<DataBlobImpl> DataBlobImpl::MakeCopy(const IDataBlob* pDataBlob)
@@ -46,9 +54,12 @@ RefCntAutoPtr<DataBlobImpl> DataBlobImpl::MakeCopy(const IDataBlob* pDataBlob)
4654
return Create(pDataBlob->GetSize(), pDataBlob->GetConstDataPtr());
4755
}
4856

49-
DataBlobImpl::DataBlobImpl(IReferenceCounters* pRefCounters, size_t InitialSize, const void* pData) :
57+
DataBlobImpl::DataBlobImpl(IReferenceCounters* pRefCounters,
58+
IMemoryAllocator& Allocator,
59+
size_t InitialSize,
60+
const void* pData) :
5061
TBase{pRefCounters},
51-
m_DataBuff(InitialSize)
62+
m_DataBuff{InitialSize, Uint8{}, STD_ALLOCATOR_RAW_MEM(Uint8, Allocator, "Allocator for vector<Uint8>")}
5263
{
5364
if (!m_DataBuff.empty() && pData != nullptr)
5465
{

0 commit comments

Comments
 (0)