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_PSBASICTEMPLATES_H
31#define PSFOUNDATION_PSBASICTEMPLATES_H
32
33#include "Ps.h"
34
35namespace physx
36{
37namespace shdfnd
38{
39template <typename A>
40struct Equal
41{
42 bool operator()(const A& a, const A& b) const
43 {
44 return a == b;
45 }
46};
47
48template <typename A>
49struct Less
50{
51 bool operator()(const A& a, const A& b) const
52 {
53 return a < b;
54 }
55};
56
57template <typename A>
58struct Greater
59{
60 bool operator()(const A& a, const A& b) const
61 {
62 return a > b;
63 }
64};
65
66template <class F, class S>
67class Pair
68{
69 public:
70 F first;
71 S second;
72 Pair() : first(F()), second(S())
73 {
74 }
75 Pair(const F& f, const S& s) : first(f), second(s)
76 {
77 }
78 Pair(const Pair& p) : first(p.first), second(p.second)
79 {
80 }
81 // CN - fix for /.../PsBasicTemplates.h(61) : warning C4512: 'physx::shdfnd::Pair<F,S>' : assignment operator could
82 // not be generated
83 Pair& operator=(const Pair& p)
84 {
85 first = p.first;
86 second = p.second;
87 return *this;
88 }
89 bool operator==(const Pair& p) const
90 {
91 return first == p.first && second == p.second;
92 }
93 bool operator<(const Pair& p) const
94 {
95 if(first < p.first)
96 return true;
97 else
98 return !(p.first < first) && (second < p.second);
99 }
100};
101
102template <unsigned int A>
103struct LogTwo
104{
105 static const unsigned int value = LogTwo<(A >> 1)>::value + 1;
106};
107template <>
108struct LogTwo<1>
109{
110 static const unsigned int value = 0;
111};
112
113template <typename T>
114struct UnConst
115{
116 typedef T Type;
117};
118template <typename T>
119struct UnConst<const T>
120{
121 typedef T Type;
122};
123
124template <typename T>
125T pointerOffset(void* p, ptrdiff_t offset)
126{
127 return reinterpret_cast<T>(reinterpret_cast<char*>(p) + offset);
128}
129template <typename T>
130T pointerOffset(const void* p, ptrdiff_t offset)
131{
132 return reinterpret_cast<T>(reinterpret_cast<const char*>(p) + offset);
133}
134
135template <class T>
136PX_CUDA_CALLABLE PX_INLINE void swap(T& x, T& y)
137{
138 const T tmp = x;
139 x = y;
140 y = tmp;
141}
142
143} // namespace shdfnd
144} // namespace physx
145
146#endif // #ifndef PSFOUNDATION_PSBASICTEMPLATES_H
147

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