diff options
Diffstat (limited to 'src/lib/netlist/plib/palloc.h')
-rw-r--r-- | src/lib/netlist/plib/palloc.h | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/lib/netlist/plib/palloc.h b/src/lib/netlist/plib/palloc.h index a9b03353b37..ad42d14c690 100644 --- a/src/lib/netlist/plib/palloc.h +++ b/src/lib/netlist/plib/palloc.h @@ -262,6 +262,9 @@ namespace plib { using allocator_type = arena_allocator<aligned_arena, T, ALIGN>; template <typename T> + using unique_pool_ptr = std::unique_ptr<T, arena_deleter<aligned_arena, T>>; + + template <typename T> using owned_pool_ptr = plib::owned_ptr<T, arena_deleter<aligned_arena, T>>; static inline aligned_arena &instance() @@ -300,16 +303,24 @@ namespace plib { #endif } -#if 0 template<typename T, typename... Args> - owned_pool_ptr<T> make_poolptr(Args&&... args) + unique_pool_ptr<T> make_unique(Args&&... args) { auto *mem = allocate(alignof(T), sizeof(T)); - return owned_pool_ptr<T>(new (mem) T(std::forward<Args>(args)...), true, arena_deleter<aligned_arena, T>(*this)); + try + { + auto *mema = new (mem) T(std::forward<Args>(args)...); + return unique_pool_ptr<T>(mema, arena_deleter<aligned_arena, T>(*this)); + } + catch (...) + { + deallocate(mem); + throw; + } } -#endif + template<typename T, typename... Args> - owned_pool_ptr<T> make_poolptr(Args&&... args) + owned_pool_ptr<T> make_owned(Args&&... args) { auto *mem = allocate(alignof(T), sizeof(T)); try @@ -324,6 +335,12 @@ namespace plib { } } + bool operator ==(const aligned_arena &rhs) const + { + plib::unused_var(rhs); + return true; + } + }; template <typename T, std::size_t ALIGN> |