fbxnew.h 20 KB

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