SlHelpers
Unique.h
1 // SPDX-License-Identifier: GPL-2.0-only
2 
3 #pragma once
4 
5 #include <memory>
6 
7 namespace SlHelpers {
8 
14 template <typename T>
15 class Deleter {
16 public:
17  Deleter() = delete;
18 
23  Deleter(bool free) : m_free(free) {}
24 
29  void operator()(T *ptr) const;
30 
32  using Unique = std::unique_ptr<T, Deleter<T>>;
33 private:
34  bool m_free;
35 };
36 
40 template <typename T>
41 struct UniqueHolder : public Deleter<T>::Unique {
43  UniqueHolder() : UniqueHolder(nullptr) { }
44 
50  UniqueHolder(T *ptr, bool free = true) : Deleter<T>::Unique(ptr, Deleter<T>{free}) {}
51 
56  operator T *() const { return Deleter<T>::Unique::get(); }
57 };
58 
59 }
Wrapper around std::unique_ptr for easier re-definition of free.
Definition: Unique.h:41
UniqueHolder(T *ptr, bool free=true)
Construct UniqueHolder holding ptr.
Definition: Unique.h:50
Deleter(bool free)
Construct a Deleter.
Definition: Unique.h:23
void operator()(T *ptr) const
The operator called to free the pointer ptr.
The Deleter for UniqueHolder types.
Definition: Unique.h:15
std::unique_ptr< T, Deleter< T > > Unique
Deleter and UniqueHolder are just wrappers around std::unique_ptr.
Definition: Unique.h:32
UniqueHolder()
Construct UniqueHolder holding a nullptr.
Definition: Unique.h:43
Definition: Color.h:8