diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-10-21 20:24:25 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-10-21 20:24:25 +0200 |
| commit | 662860f03cdff8ea18b691dca1f3c84a4aaf07d5 (patch) | |
| tree | b3869c84e6a146ff183e0e201ab7160ce5d2a9a6 /dev/LibC++/base_alloc.h | |
| parent | 32312160ea0c1fc2fd1e893721260de44dfdd78c (diff) | |
IMP: Major refactor of header and source files extensions.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/LibC++/base_alloc.h')
| -rw-r--r-- | dev/LibC++/base_alloc.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/dev/LibC++/base_alloc.h b/dev/LibC++/base_alloc.h new file mode 100644 index 0000000..51ed861 --- /dev/null +++ b/dev/LibC++/base_alloc.h @@ -0,0 +1,49 @@ +/* ------------------------------------------- + + Copyright ZKA Web Services Co. + +------------------------------------------- */ + +#pragma once + +#include <LibC++/defines.hxx> + +namespace std::base_alloc +{ + /// @brief allocate a new class. + /// @tparam KindClass the class type to allocate. + template <typename KindClass, typename... Args> + inline KindClass* allocate(Args&&... args) + { + return new KindClass(forward(args)...); + } + + /// @brief allocate a new class. + /// @note aborts on error. + /// @tparam KindClass the class type to allocate. + template <typename KindClass, typename... Args> + inline KindClass* allocate_nothrow(Args&&... args) noexcept + { + return allocate(forward(args)...); + } + + /// @brief free a class. + /// @tparam KindClass the class type to allocate. + template <typename KindClass> + inline void release(KindClass ptr) + { + if (!ptr) + return; + + delete ptr; + } + + /// @brief destroy and free a class. + /// @note aborts on error. + /// @tparam KindClass the class type to allocate. + template <typename KindClass> + inline void release_nothrow(KindClass ptr) noexcept + { + release(ptr); + } +} // namespace std::base_alloc |
