diff options
| author | assiduous <assiduous@diligentgraphics.com> | 2020-10-20 20:26:21 +0000 |
|---|---|---|
| committer | assiduous <assiduous@diligentgraphics.com> | 2020-10-20 20:26:21 +0000 |
| commit | 13b0b54987db2684e46e337d2e5be5b81366083b (patch) | |
| tree | 40f2f3c7b180c7728bc8676cd32614e16fac17a0 /Common/interface | |
| parent | Renamed USAGE_STATIC to USAGE_IMMUTABLE (API240077) (diff) | |
| download | DiligentCore-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.hpp | 23 |
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()); } |
