1//
2// Redistribution and use in source and binary forms, with or without
3// modification, are permitted provided that the following conditions
4// are met:
5// * Redistributions of source code must retain the above copyright
6// notice, this list of conditions and the following disclaimer.
7// * Redistributions in binary form must reproduce the above copyright
8// notice, this list of conditions and the following disclaimer in the
9// documentation and/or other materials provided with the distribution.
10// * Neither the name of NVIDIA CORPORATION nor the names of its
11// contributors may be used to endorse or promote products derived
12// from this software without specific prior written permission.
13//
14// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
15// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25//
26// Copyright (c) 2008-2021 NVIDIA Corporation. All rights reserved.
27// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
28// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
29
30#ifndef PSFOUNDATION_PSUSERALLOCATED_H
31#define PSFOUNDATION_PSUSERALLOCATED_H
32
33#include "PsAllocator.h"
34
35namespace physx
36{
37namespace shdfnd
38{
39/**
40Provides new and delete using a UserAllocator.
41Guarantees that 'delete x;' uses the UserAllocator too.
42*/
43class UserAllocated
44{
45 public:
46 // PX_SERIALIZATION
47 PX_INLINE void* operator new(size_t, void* address)
48 {
49 return address;
50 }
51 //~PX_SERIALIZATION
52 // Matching operator delete to the above operator new. Don't ask me
53 // how this makes any sense - Nuernberger.
54 PX_INLINE void operator delete(void*, void*)
55 {
56 }
57
58 template <typename Alloc>
59 PX_INLINE void* operator new(size_t size, Alloc alloc, const char* fileName, int line)
60 {
61 return alloc.allocate(size, fileName, line);
62 }
63 template <typename Alloc>
64 PX_INLINE void* operator new(size_t size, size_t /*align*/, Alloc alloc, const char* fileName, int line)
65 {
66 // align is not respected, we have 16bit aligned allocator
67 return alloc.allocate(size, fileName, line);
68 }
69 template <typename Alloc>
70 PX_INLINE void* operator new [](size_t size, Alloc alloc, const char* fileName, int line)
71 { return alloc.allocate(size, fileName, line); }
72 template <typename Alloc>
73 PX_INLINE void* operator new [](size_t size, size_t /*align*/, Alloc alloc, const char* fileName, int line)
74 {
75 // align is not respected, we have 16bit aligned allocator
76 return alloc.allocate(size, fileName, line);
77 }
78
79 // placement delete
80 template <typename Alloc>
81 PX_INLINE void operator delete(void* ptr, Alloc alloc, const char* fileName, int line)
82 {
83 PX_UNUSED(fileName);
84 PX_UNUSED(line);
85 alloc.deallocate(ptr);
86 }
87 template <typename Alloc>
88 PX_INLINE void operator delete [](void* ptr, Alloc alloc, const char* fileName, int line)
89 {
90 PX_UNUSED(fileName);
91 PX_UNUSED(line);
92 alloc.deallocate(ptr);
93 } PX_INLINE void
94 operator delete(void* ptr)
95 {
96 NonTrackingAllocator().deallocate(ptr);
97 }
98 PX_INLINE void operator delete [](void* ptr)
99 { NonTrackingAllocator().deallocate(ptr); }
100};
101} // namespace shdfnd
102} // namespace physx
103
104#endif // #ifndef PSFOUNDATION_PSUSERALLOCATED_H
105

source code of qtquick3dphysics/src/3rdparty/PhysX/source/foundation/include/PsUserAllocated.h