summaryrefslogtreecommitdiffstats
path: root/Common/interface
diff options
context:
space:
mode:
authorassiduous <assiduous@diligentgraphics.com>2020-10-20 20:26:21 +0000
committerassiduous <assiduous@diligentgraphics.com>2020-10-20 20:26:21 +0000
commit13b0b54987db2684e46e337d2e5be5b81366083b (patch)
tree40f2f3c7b180c7728bc8676cd32614e16fac17a0 /Common/interface
parentRenamed USAGE_STATIC to USAGE_IMMUTABLE (API240077) (diff)
downloadDiligentCore-13b0b54987db2684e46e337d2e5be5b81366083b.tar.gz
DiligentCore-13b0b54987db2684e46e337d2e5be5b81366083b.zip
Improved exception safety of pipeline state object construction
Diffstat (limited to 'Common/interface')
-rw-r--r--Common/interface/LinearAllocator.hpp23
1 files changed, 17 insertions, 6 deletions
diff --git a/Common/interface/LinearAllocator.hpp b/Common/interface/LinearAllocator.hpp
index f8f779e5..dd137c47 100644
--- a/Common/interface/LinearAllocator.hpp
+++ b/Common/interface/LinearAllocator.hpp
@@ -50,11 +50,11 @@ public:
LinearAllocator& operator=(LinearAllocator&&) = delete;
// clang-format on
- explicit LinearAllocator(IMemoryAllocator& Allocator) :
+ explicit LinearAllocator(IMemoryAllocator& Allocator) noexcept :
m_pAllocator{&Allocator}
{}
- LinearAllocator(LinearAllocator&& Other) :
+ LinearAllocator(LinearAllocator&& Other) noexcept :
// clang-format off
m_pDataStart {Other.m_pDataStart },
m_pCurrPtr {Other.m_pCurrPtr },
@@ -87,7 +87,18 @@ public:
return Ptr;
}
- void AddSpace(size_t size, size_t alignment)
+ void* ReleaseOwnership() noexcept
+ {
+ m_pAllocator = nullptr;
+ return GetDataPtr();
+ }
+
+ void* GetDataPtr() const noexcept
+ {
+ return m_pDataStart;
+ }
+
+ void AddSpace(size_t size, size_t alignment) noexcept
{
VERIFY(m_pDataStart == nullptr, "Memory has already been allocated");
VERIFY(IsPowerOfTwo(alignment), "Alignment is not a power of two!");
@@ -117,18 +128,18 @@ public:
}
template <typename T>
- void AddSpace(size_t count = 1)
+ void AddSpace(size_t count = 1) noexcept
{
AddSpace(sizeof(T) * count, alignof(T));
}
- void AddSpaceForString(const Char* str)
+ void AddSpaceForString(const Char* str) noexcept
{
VERIFY_EXPR(str != nullptr);
AddSpace(strlen(str) + 1, 1);
}
- void AddSpaceForString(const String& str)
+ void AddSpaceForString(const String& str) noexcept
{
AddSpaceForString(str.c_str());
}