fennec
Loading...
Searching...
No Matches
new.h
Go to the documentation of this file.
1// =====================================================================================================================
2// fennec, a free and open source game engine
3// Copyright © 2025 Medusa Slockbower
4//
5// This program is free software: you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//2
15// You should have received a copy of the GNU General Public License
16// along with this program. If not, see <https://www.gnu.org/licenses/>.
17// =====================================================================================================================
18
30
31
32#ifndef FENNEC_MEMORY_NEW_H
33#define FENNEC_MEMORY_NEW_H
34
35#include <fennec/lang/types.h>
36#include <fennec/lang/utility.h>
37
38namespace fennec
39{
40
43enum class align_t : size_t;
44
48{
49 explicit nothrow_t() noexcept { }
50};
51
54size_t pagesize();
55
56template<typename TypeT> void construct(TypeT* ptr) {
57 new(ptr) TypeT();
58}
59
60template<typename TypeT> void construct(TypeT* ptr, const TypeT& val) {
61 new(ptr) TypeT(val);
62}
63
64template<typename TypeT> void construct(TypeT* ptr, TypeT&& val) {
65 new(ptr) TypeT(fennec::forward<TypeT>(val));
66}
67
68template<typename TypeT, typename...ArgsT> void construct(TypeT* ptr, ArgsT&&...args) {
69 new(ptr) TypeT(fennec::forward<ArgsT>(args)...);
70}
71
72template<typename TypeT> void destruct(TypeT* ptr) {
73 ptr->~TypeT();
74}
75
76}
77
78void* operator new (fennec::size_t size);
79void* operator new[](fennec::size_t size);
80void* operator new (fennec::size_t size, const fennec::nothrow_t&);
81void* operator new[](fennec::size_t size, const fennec::nothrow_t&);
82void* operator new (fennec::size_t size, fennec::align_t align);
83void* operator new[](fennec::size_t size, fennec::align_t align);
84void* operator new (fennec::size_t size, fennec::align_t align, const fennec::nothrow_t&);
85void* operator new[](fennec::size_t size, fennec::align_t align, const fennec::nothrow_t&);
86
87
88void operator delete (void* ptr) noexcept;
89void operator delete[](void* ptr) noexcept;
90void operator delete (void* ptr, fennec::size_t) noexcept;
91void operator delete[](void* ptr, fennec::size_t) noexcept;
92void operator delete (void* ptr, const fennec::nothrow_t&) noexcept;
93void operator delete[](void* ptr, const fennec::nothrow_t&) noexcept;
94void operator delete (void* ptr, fennec::size_t, const fennec::nothrow_t&) noexcept;
95void operator delete[](void* ptr, fennec::size_t, const fennec::nothrow_t&) noexcept;
96
97void operator delete (void* ptr, fennec::align_t) noexcept;
98void operator delete[](void* ptr, fennec::align_t) noexcept;
99void operator delete (void* ptr, fennec::size_t, fennec::align_t) noexcept;
100void operator delete[](void* ptr, fennec::size_t, fennec::align_t) noexcept;
101void operator delete (void* ptr, fennec::align_t, const fennec::nothrow_t&) noexcept;
102void operator delete[](void* ptr, fennec::align_t, const fennec::nothrow_t&) noexcept;
103
104template<typename TypeT> constexpr void* operator new (fennec::size_t, TypeT* ptr) { return ptr; }
105template<typename TypeT> constexpr void* operator new[](fennec::size_t, TypeT* ptr) { return ptr; }
106
107
108#endif // FENNEC_MEMORY_NEW_H
size_t pagesize()
Definition new.cpp:97
Type to handle explicit nothrow definitions.
Definition new.h:48
Types
size_t size_t
Unsigned Integer Type Returned By sizeof, sizeof..., and alignof
Definition types.h:250
Utility