1/****************************************************************************************
2
3 Copyright (C) 2015 Autodesk, Inc.
4 All rights reserved.
5
6 Use of this software is subject to the terms of the Autodesk license agreement
7 provided at the time of installation or download, or which otherwise accompanies
8 this software in either electronic or hard copy form.
9
10****************************************************************************************/
11
12/** \file fbxnew.h
13 * New operator override templates.
14 *
15 * Instead of overloading the operator new in the FBX SDK, we provide a set of templates
16 * that are used internally to create objects. This mechanic allows the FBX SDK to call
17 * a different memory allocator.
18 * \see FbxSetMallocHandler FbxSetCallocHandler FbxSetReallocHandler FbxSetFreeHandler FbxSetMSizeHandler
19 */
20#ifndef _FBXSDK_CORE_ARCH_NEW_H_
21#define _FBXSDK_CORE_ARCH_NEW_H_
22
23#include <fbxsdk/fbxsdk_def.h>
24
25#include <new>
26
27#if defined(FBXSDK_COMPILER_MSC)
28 #pragma warning(push)
29 #pragma warning(disable : 4345) //warning C4345: behavior change: an object of POD type constructed with an initializer of the form () will be default-initialized
30#endif
31
32#include <fbxsdk/fbxsdk_nsbegin.h>
33
34//Type traits for primitive types
35template<typename T> struct FbxSimpleType { enum {value = 0}; };
36template<typename T> struct FbxSimpleType<T*> { enum {value = 1}; };
37template<typename T> struct FbxSimpleType<const T> { enum {value = FbxSimpleType<T>::value}; };
38template<typename T, size_t n> struct FbxSimpleType<T[n]> { enum {value = FbxSimpleType<T>::value}; };
39
40#define FBXSDK_DEFINE_SIMPLE_TYPE(T) template<> struct FbxSimpleType<T>{ union {T t;} catcherr; enum {value = 1};}
41
42FBXSDK_DEFINE_SIMPLE_TYPE(bool);
43FBXSDK_DEFINE_SIMPLE_TYPE(char);
44FBXSDK_DEFINE_SIMPLE_TYPE(unsigned char);
45FBXSDK_DEFINE_SIMPLE_TYPE(short);
46FBXSDK_DEFINE_SIMPLE_TYPE(unsigned short);
47FBXSDK_DEFINE_SIMPLE_TYPE(int);
48FBXSDK_DEFINE_SIMPLE_TYPE(unsigned int);
49FBXSDK_DEFINE_SIMPLE_TYPE(long);
50FBXSDK_DEFINE_SIMPLE_TYPE(unsigned long);
51FBXSDK_DEFINE_SIMPLE_TYPE(float);
52FBXSDK_DEFINE_SIMPLE_TYPE(double);
53FBXSDK_DEFINE_SIMPLE_TYPE(long double);
54FBXSDK_DEFINE_SIMPLE_TYPE(long long);
55FBXSDK_DEFINE_SIMPLE_TYPE(unsigned long long);
56
57#define FBXSDK_IS_SIMPLE_TYPE(T) ((bool)FbxSimpleType<T>::value)
58
59template<typename T> T* FbxNew()
60{
61 T* p = (T*)FbxMalloc(sizeof(T));
62 return new(p)T();
63}
64
65template<typename T, typename T1> T* FbxNew(T1& p1)
66{
67 T* p = (T*)FbxMalloc(sizeof(T));
68 return new(p)T(p1);
69}
70
71template<typename T, typename T1> T* FbxNew(const T1& p1)
72{
73 T* p = (T*)FbxMalloc(sizeof(T));
74 return new(p)T(p1);
75}
76
77template<typename T, typename T1, typename T2> T* FbxNew(T1& p1, T2& p2)
78{
79 T* p = (T*)FbxMalloc(sizeof(T));
80 return new(p)T(p1, p2);
81}
82
83template<typename T, typename T1, typename T2> T* FbxNew(T1& p1, const T2& p2)
84{
85 T* p = (T*)FbxMalloc(sizeof(T));
86 return new(p)T(p1, p2);
87}
88
89template<typename T, typename T1, typename T2> T* FbxNew(const T1& p1, T2& p2)
90{
91 T* p = (T*)FbxMalloc(sizeof(T));
92 return new(p)T(p1, p2);
93}
94
95template<typename T, typename T1, typename T2> T* FbxNew(const T1& p1, const T2& p2)
96{
97 T* p = (T*)FbxMalloc(sizeof(T));
98 return new(p)T(p1, p2);
99}
100
101template<typename T, typename T1, typename T2, typename T3> T* FbxNew(T1& p1, T2& p2, T3& p3)
102{
103 T* p = (T*)FbxMalloc(sizeof(T));
104 return new(p)T(p1, p2, p3);
105}
106
107template<typename T, typename T1, typename T2, typename T3> T* FbxNew(T1& p1, T2& p2, const T3& p3)
108{
109 T* p = (T*)FbxMalloc(sizeof(T));
110 return new(p)T(p1, p2, p3);
111}
112
113template<typename T, typename T1, typename T2, typename T3> T* FbxNew(T1& p1, const T2& p2, T3& p3)
114{
115 T* p = (T*)FbxMalloc(sizeof(T));
116 return new(p)T(p1, p2, p3);
117}
118
119template<typename T, typename T1, typename T2, typename T3> T* FbxNew(T1& p1, const T2& p2, const T3& p3)
120{
121 T* p = (T*)FbxMalloc(sizeof(T));
122 return new(p)T(p1, p2, p3);
123}
124
125template<typename T, typename T1, typename T2, typename T3> T* FbxNew(const T1& p1, T2& p2, T3& p3)
126{
127 T* p = (T*)FbxMalloc(sizeof(T));
128 return new(p)T(p1, p2, p3);
129}
130
131template<typename T, typename T1, typename T2, typename T3> T* FbxNew(const T1& p1, T2& p2, const T3& p3)
132{
133 T* p = (T*)FbxMalloc(sizeof(T));
134 return new(p)T(p1, p2, p3);
135}
136
137template<typename T, typename T1, typename T2, typename T3> T* FbxNew(const T1& p1, const T2& p2, T3& p3)
138{
139 T* p = (T*)FbxMalloc(sizeof(T));
140 return new(p)T(p1, p2, p3);
141}
142
143template<typename T, typename T1, typename T2, typename T3> T* FbxNew(const T1& p1, const T2& p2, const T3& p3)
144{
145 T* p = (T*)FbxMalloc(sizeof(T));
146 return new(p)T(p1, p2, p3);
147}
148
149template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(T1& p1, T2& p2, T3& p3, T4& p4)
150{
151 T* p = (T*)FbxMalloc(sizeof(T));
152 return new(p)T(p1, p2, p3, p4);
153}
154
155template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(T1& p1, T2& p2, T3& p3, const T4& p4)
156{
157 T* p = (T*)FbxMalloc(sizeof(T));
158 return new(p)T(p1, p2, p3, p4);
159}
160
161template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(T1& p1, T2& p2, const T3& p3, T4& p4)
162{
163 T* p = (T*)FbxMalloc(sizeof(T));
164 return new(p)T(p1, p2, p3, p4);
165}
166
167template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(T1& p1, T2& p2, const T3& p3, const T4& p4)
168{
169 T* p = (T*)FbxMalloc(sizeof(T));
170 return new(p)T(p1, p2, p3, p4);
171}
172
173template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(T1& p1, const T2& p2, T3& p3, T4& p4)
174{
175 T* p = (T*)FbxMalloc(sizeof(T));
176 return new(p)T(p1, p2, p3, p4);
177}
178
179template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(T1& p1, const T2& p2, T3& p3, const T4& p4)
180{
181 T* p = (T*)FbxMalloc(sizeof(T));
182 return new(p)T(p1, p2, p3, p4);
183}
184
185template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(T1& p1, const T2& p2, const T3& p3, T4& p4)
186{
187 T* p = (T*)FbxMalloc(sizeof(T));
188 return new(p)T(p1, p2, p3, p4);
189}
190
191template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(T1& p1, const T2& p2, const T3& p3, const T4& p4)
192{
193 T* p = (T*)FbxMalloc(sizeof(T));
194 return new(p)T(p1, p2, p3, p4);
195}
196
197template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(const T1& p1, T2& p2, T3& p3, T4& p4)
198{
199 T* p = (T*)FbxMalloc(sizeof(T));
200 return new(p)T(p1, p2, p3, p4);
201}
202
203template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(const T1& p1, T2& p2, T3& p3, const T4& p4)
204{
205 T* p = (T*)FbxMalloc(sizeof(T));
206 return new(p)T(p1, p2, p3, p4);
207}
208
209template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(const T1& p1, T2& p2, const T3& p3, T4& p4)
210{
211 T* p = (T*)FbxMalloc(sizeof(T));
212 return new(p)T(p1, p2, p3, p4);
213}
214
215template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(const T1& p1, T2& p2, const T3& p3, const T4& p4)
216{
217 T* p = (T*)FbxMalloc(sizeof(T));
218 return new(p)T(p1, p2, p3, p4);
219}
220
221template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(const T1& p1, const T2& p2, T3& p3, T4& p4)
222{
223 T* p = (T*)FbxMalloc(sizeof(T));
224 return new(p)T(p1, p2, p3, p4);
225}
226
227template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(const T1& p1, const T2& p2, T3& p3, const T4& p4)
228{
229 T* p = (T*)FbxMalloc(sizeof(T));
230 return new(p)T(p1, p2, p3, p4);
231}
232
233template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(const T1& p1, const T2& p2, const T3& p3, T4& p4)
234{
235 T* p = (T*)FbxMalloc(sizeof(T));
236 return new(p)T(p1, p2, p3, p4);
237}
238
239template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4)
240{
241 T* p = (T*)FbxMalloc(sizeof(T));
242 return new(p)T(p1, p2, p3, p4);
243}
244
245template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5> T* FbxNew(T1& p1, T2& p2, T3& p3, T4& p4, T5& p5)
246{
247 T* p = (T*)FbxMalloc(sizeof(T));
248 return new(p)T(p1,p2,p3,p4,p5);
249}
250
251template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5> T* FbxNew(const T1& p1, T2& p2, T3& p3, T4& p4, T5& p5)
252{
253 T* p = (T*)FbxMalloc(sizeof(T));
254 return new(p)T(p1,p2,p3,p4,p5);
255}
256
257template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5> T* FbxNew(const T1& p1, const T2& p2, T3& p3, T4& p4, T5& p5)
258{
259 T* p = (T*)FbxMalloc(sizeof(T));
260 return new(p)T(p1,p2,p3,p4,p5);
261}
262
263template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5> T* FbxNew(const T1& p1, T2& p2, const T3& p3, T4& p4, T5& p5)
264{
265 T* p = (T*)FbxMalloc(sizeof(T));
266 return new(p)T(p1,p2,p3,p4,p5);
267}
268
269template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5> T* FbxNew(const T1& p1, T2& p2, T3& p3, const T4& p4, T5& p5)
270{
271 T* p = (T*)FbxMalloc(sizeof(T));
272 return new(p)T(p1,p2,p3,p4,p5);
273}
274
275template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5> T* FbxNew(const T1& p1, T2& p2, T3& p3, T4& p4, const T5& p5)
276{
277 T* p = (T*)FbxMalloc(sizeof(T));
278 return new(p)T(p1,p2,p3,p4,p5);
279}
280
281template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5> T* FbxNew(const T1& p1, const T2& p2, const T3& p3, T4& p4, T5& p5)
282{
283 T* p = (T*)FbxMalloc(sizeof(T));
284 return new(p)T(p1,p2,p3,p4,p5);
285}
286
287template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5> T* FbxNew(const T1& p1, const T2& p2, T3& p3, const T4& p4, T5& p5)
288{
289 T* p = (T*)FbxMalloc(sizeof(T));
290 return new(p)T(p1,p2,p3,p4,p5);
291}
292
293template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5> T* FbxNew(const T1& p1, const T2& p2, T3& p3, T4& p4, const T5& p5)
294{
295 T* p = (T*)FbxMalloc(sizeof(T));
296 return new(p)T(p1,p2,p3,p4,p5);
297}
298
299template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5> T* FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4, T5& p5)
300{
301 T* p = (T*)FbxMalloc(sizeof(T));
302 return new(p)T(p1,p2,p3,p4,p5);
303}
304
305template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5> T* FbxNew(const T1& p1, const T2& p2, const T3& p3, T4& p4, const T5& p5)
306{
307 T* p = (T*)FbxMalloc(sizeof(T));
308 return new(p)T(p1,p2,p3,p4,p5);
309}
310
311template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5> T* FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4, const T5& p5)
312{
313 T* p = (T*)FbxMalloc(sizeof(T));
314 return new(p)T(p1,p2,p3,p4,p5);
315}
316
317template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6> T* FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4, const T5& p5, const T6& p6)
318{
319 T* p = (T*)FbxMalloc(sizeof(T));
320 return new(p)T(p1,p2,p3,p4,p5,p6);
321}
322
323template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7> T* FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4, const T5& p5, const T6& p6, const T7& p7)
324{
325 T* p = (T*)FbxMalloc(sizeof(T));
326 return new(p)T(p1,p2,p3,p4,p5,p6,p7);
327}
328
329template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8> T* FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4, const T5& p5, const T6& p6, const T7& p7, const T8& p8)
330{
331 T* p = (T*)FbxMalloc(sizeof(T));
332 return new(p)T(p1,p2,p3,p4,p5,p6,p7,p8);
333}
334
335template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9> T* FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4, const T5& p5, const T6& p6, const T7& p7, const T8& p8, const T9& p9)
336{
337 T* p = (T*)FbxMalloc(sizeof(T));
338 return new(p)T(p1,p2,p3,p4,p5,p6,p7,p8,p9);
339}
340
341template<typename T> void FbxDelete(T* p)
342{
343 if( p )
344 {
345 ((T*)p)->~T();
346 FbxFree(p);
347 }
348}
349
350template<typename T> void FbxDelete(const T* p)
351{
352 if( p )
353 {
354 ((T*)p)->~T();
355 FbxFree(const_cast<T*>(p));
356 }
357}
358
359template<typename T> T* FbxNewArray(const int n)
360{
361 if( FBXSDK_IS_SIMPLE_TYPE(T) )
362 {
363 return (T*)FbxMalloc(sizeof(T)*n);
364 }
365 else
366 {
367 void* pTmp = FbxMalloc(sizeof(T) * n + sizeof(int));
368 T* p = (T*)((int*)pTmp+1);
369 *((int*)pTmp) = n;
370 for( int i = 0; i < n; ++i )
371 {
372 new((T*)p+i)T; //in-place new, not allocating memory so it is safe.
373 }
374 return p;
375 }
376}
377
378template<typename T> void FbxDeleteArray(T* p)
379{
380 if( p )
381 {
382 if( !FBXSDK_IS_SIMPLE_TYPE(T) )
383 {
384 for( int i = 0; i < ((int*)p)[-1]; ++i )
385 {
386 ((T*)p)[i].~T();
387 }
388 FbxFree((int*)p-1);
389 }
390 else
391 {
392 FbxFree((void*)p);
393 }
394 }
395}
396
397#define FBXSDK_FRIEND_NEW()\
398 template<typename T>\
399 friend T* FBXSDK_NAMESPACE::FbxNew();\
400 template<typename T, typename T1>\
401 friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1);\
402 template<typename T, typename T1>\
403 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1);\
404 template<typename T, typename T1, typename T2>\
405 friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, T2& p2);\
406 template<typename T, typename T1, typename T2>\
407 friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, const T2& p2);\
408 template<typename T, typename T1, typename T2>\
409 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2);\
410 template<typename T, typename T1, typename T2>\
411 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2);\
412 template<typename T, typename T1, typename T2, typename T3>\
413 friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, T2& p2, T3& p3);\
414 template<typename T, typename T1, typename T2, typename T3>\
415 friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, T2& p2, const T3& p3);\
416 template<typename T, typename T1, typename T2, typename T3>\
417 friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, const T2& p2, T3& p3);\
418 template<typename T, typename T1, typename T2, typename T3>\
419 friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, const T2& p2, const T3& p3);\
420 template<typename T, typename T1, typename T2, typename T3>\
421 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, T3& p3);\
422 template<typename T, typename T1, typename T2, typename T3>\
423 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, const T3& p3);\
424 template<typename T, typename T1, typename T2, typename T3>\
425 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, T3& p3);\
426 template<typename T, typename T1, typename T2, typename T3>\
427 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3);\
428 \
429 template<typename T, typename T1, typename T2, typename T3, typename T4>\
430 friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, T2& p2, T3& p3, T4& p4);\
431 template<typename T, typename T1, typename T2, typename T3, typename T4>\
432 friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, T2& p2, T3& p3, const T4& p4);\
433 template<typename T, typename T1, typename T2, typename T3, typename T4>\
434 friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, T2& p2, const T3& p3, T4& p4);\
435 template<typename T, typename T1, typename T2, typename T3, typename T4>\
436 friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, T2& p2, const T3& p3, const T4& p4);\
437 template<typename T, typename T1, typename T2, typename T3, typename T4>\
438 friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, const T2& p2, T3& p3, T4& p4);\
439 template<typename T, typename T1, typename T2, typename T3, typename T4>\
440 friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, const T2& p2, T3& p3, const T4& p4);\
441 template<typename T, typename T1, typename T2, typename T3, typename T4>\
442 friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, const T2& p2, const T3& p3, T4& p4);\
443 template<typename T, typename T1, typename T2, typename T3, typename T4>\
444 friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, const T2& p2, const T3& p3, const T4& p4);\
445 template<typename T, typename T1, typename T2, typename T3, typename T4>\
446 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, T3& p3, T4& p4);\
447 template<typename T, typename T1, typename T2, typename T3, typename T4>\
448 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, T3& p3, const T4& p4);\
449 template<typename T, typename T1, typename T2, typename T3, typename T4>\
450 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, const T3& p3, T4& p4);\
451 template<typename T, typename T1, typename T2, typename T3, typename T4>\
452 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, const T3& p3, const T4& p4);\
453 template<typename T, typename T1, typename T2, typename T3, typename T4>\
454 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, T3& p3, T4& p4);\
455 template<typename T, typename T1, typename T2, typename T3, typename T4>\
456 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, T3& p3, const T4& p4);\
457 template<typename T, typename T1, typename T2, typename T3, typename T4>\
458 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, T4& p4);\
459 template<typename T, typename T1, typename T2, typename T3, typename T4>\
460 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4);\
461 \
462 template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
463 friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, T2& p2, T3& p3, T4& p4, T5& p5);\
464 template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
465 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, T3& p3, T4& p4, T5& p5);\
466 template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
467 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, T3& p3, T4& p4, T5& p5);\
468 template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
469 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, const T3& p3, T4& p4, T5& p5);\
470 template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
471 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, T3& p3, const T4& p4, T5& p5);\
472 template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
473 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, T3& p3, T4& p4, const T5& p5);\
474 template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
475 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, T4& p4, T5& p5);\
476 template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
477 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, T3& p3, const T4& p4, T5& p5);\
478 template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
479 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, T3& p3, T4& p4, const T5& p5);\
480 template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
481 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4, T5& p5);\
482 template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
483 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, T4& p4, const T5& p5);\
484 template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
485 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4, const T5& p5);\
486 \
487 template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>\
488 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4, const T5& p5, const T6& p6);\
489 template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>\
490 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4, const T5& p5, const T6& p6, const T7& p7);\
491 template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>\
492 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4, const T5& p5, const T6& p6, const T7& p7, const T8& p8);\
493 template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>\
494 friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4, const T5& p5, const T6& p6, const T7& p7, const T8& p8, const T9& p9);\
495 template<typename T>\
496 friend void FBXSDK_NAMESPACE::FbxDelete(T* p);\
497 template<typename T>\
498 friend void FBXSDK_NAMESPACE::FbxDelete(const T* p);\
499 template<typename T>\
500 friend T* FBXSDK_NAMESPACE::FbxNewArray(const int n);\
501 template<typename T>\
502 friend void FBXSDK_NAMESPACE::FbxDeleteArray(T* p);
503
504#ifdef FBXSDK_COMPILER_MSC
505 #pragma warning(pop)
506#endif
507
508#include <fbxsdk/fbxsdk_nsend.h>
509
510#endif /* _FBXSDK_CORE_ARCH_NEW_H_ */
511