Engine
Frameworkcreatedbymeusableforthecreationofsimplegames.CurrentlysupportsOpenGL(Verysimple)andVulkan.
NewOverrides.cpp
Go to the documentation of this file.
2 
3 #include <malloc.h>
4 
5 namespace
6 {
7  void *allocate(std::size_t size, std::size_t alignment = sizeof(void*))
8  {
9  void *allocatedMemory = nullptr;
10 
11  do
12  {
13  allocatedMemory = _aligned_malloc(size, sizeof(void*));
14 
15  if (!allocatedMemory)
16  {
17  std::new_handler handler = std::get_new_handler();
18 
19  if (handler)
20  handler();
21  else
22  throw std::bad_alloc();
23  }
24  } while (!allocatedMemory);
25 
26  return allocatedMemory;
27  }
28 }
29 
30 void *operator new(std::size_t count)
31 {
32  return allocate(count);
33 }
34 
35 void *operator new[](std::size_t count)
36 {
37  return ::operator new(count);
38 }
39 
40 void *operator new(std::size_t count, std::nothrow_t const &tag) noexcept
41 {
42  (void)tag;
43 
44  return _aligned_malloc(count, sizeof(void*));
45 }
46 
47 void *operator new[](std::size_t count, std::nothrow_t const &tag) noexcept
48 {
49  return operator new(count, tag);
50 }
51 
52 void *operator new[](
53  std::size_t size,
54  std::size_t alignment,
55  std::size_t /*alignmentOffset*/,
56  char const* /*name*/,
57  int /*flags*/,
58  unsigned /*debugFlags*/,
59  char const* /*file*/,
60  int /*line*/)
61 {
62  return allocate(size, alignment);
63 }
64 
65 void *operator new[](
66  std::size_t size,
67  char const* name,
68  int flags,
69  unsigned debugFlags,
70  char const* file,
71  int line)
72 {
73  return operator new[](
74  size,
75  sizeof(void*),
76  0,
77  name,
78  flags,
79  debugFlags,
80  file,
81  line);
82 }
83 
84 void operator delete(void *ptr) noexcept
85 {
86  _aligned_free(ptr);
87 }
88 
89 void operator delete[](void *ptr) noexcept
90 {
91  operator delete(ptr);
92 }
93 
94 void operator delete(void *ptr, std::size_t count) noexcept
95 {
96  (void)count;
97  _aligned_free(ptr);
98 }
99 
100 void operator delete[](void *ptr, std::size_t count) noexcept
101 {
102  operator delete(ptr, count);
103 }
104 
105 void operator delete(void *ptr, std::nothrow_t const &tag) noexcept
106 {
107  (void)tag;
108  _aligned_free(ptr);
109 }
110 
111 void operator delete[](void *ptr, std::nothrow_t const &tag) noexcept
112 {
113  ::operator delete(ptr, tag);
114 }