fbxsdk/core/arch/fbxnew.h Source File
 
 
 
fbxsdk/core/arch/fbxnew.h
Go to the documentation of this file.
00001 /****************************************************************************************
00002  
00003    Copyright (C) 2013 Autodesk, Inc.
00004    All rights reserved.
00005  
00006    Use of this software is subject to the terms of the Autodesk license agreement
00007    provided at the time of installation or download, or which otherwise accompanies
00008    this software in either electronic or hard copy form.
00009  
00010 ****************************************************************************************/
00011 
00020 #ifndef _FBXSDK_CORE_ARCH_NEW_H_
00021 #define _FBXSDK_CORE_ARCH_NEW_H_
00022 
00023 #include <fbxsdk/fbxsdk_def.h>
00024 
00025 #include <new>
00026 
00027 #if defined(FBXSDK_COMPILER_MSC)
00028         #pragma warning(push)
00029         #pragma warning(disable : 4345) //warning C4345: behavior change: an object of POD type constructed with an initializer of the form () will be default-initialized
00030 #endif
00031 
00032 #include <fbxsdk/fbxsdk_nsbegin.h>
00033 
00034 //Type traits for primitive types
00035 template<typename T> struct FbxSimpleType { enum {value = 0}; };
00036 template<typename T> struct FbxSimpleType<T*> { enum {value = 1}; };
00037 template<typename T> struct FbxSimpleType<const T> { enum {value = FbxSimpleType<T>::value}; };
00038 template<typename T, size_t n> struct FbxSimpleType<T[n]> { enum {value = FbxSimpleType<T>::value}; };
00039 
00040 #define FBXSDK_DEFINE_SIMPLE_TYPE(T) template<> struct FbxSimpleType<T>{ union {T t;} catcherr; enum {value = 1};}
00041 
00042 FBXSDK_DEFINE_SIMPLE_TYPE(bool);
00043 FBXSDK_DEFINE_SIMPLE_TYPE(char);
00044 FBXSDK_DEFINE_SIMPLE_TYPE(unsigned char);
00045 FBXSDK_DEFINE_SIMPLE_TYPE(short);
00046 FBXSDK_DEFINE_SIMPLE_TYPE(unsigned short);
00047 FBXSDK_DEFINE_SIMPLE_TYPE(int);
00048 FBXSDK_DEFINE_SIMPLE_TYPE(unsigned int);
00049 FBXSDK_DEFINE_SIMPLE_TYPE(long);
00050 FBXSDK_DEFINE_SIMPLE_TYPE(unsigned long);
00051 FBXSDK_DEFINE_SIMPLE_TYPE(float);
00052 FBXSDK_DEFINE_SIMPLE_TYPE(double);
00053 FBXSDK_DEFINE_SIMPLE_TYPE(long double);
00054 FBXSDK_DEFINE_SIMPLE_TYPE(long long);
00055 FBXSDK_DEFINE_SIMPLE_TYPE(unsigned long long);
00056 
00057 #define FBXSDK_IS_SIMPLE_TYPE(T) ((bool)FbxSimpleType<T>::value)
00058 
00059 template<typename T> T* FbxNew()
00060 {
00061         T* p = (T*)FbxMalloc(sizeof(T));
00062         return new(p)T();
00063 }
00064 
00065 template<typename T, typename T1> T* FbxNew(T1& p1)
00066 {
00067         T* p = (T*)FbxMalloc(sizeof(T));
00068         return new(p)T(p1);
00069 }
00070 
00071 template<typename T, typename T1> T* FbxNew(const T1& p1)
00072 {
00073         T* p = (T*)FbxMalloc(sizeof(T));
00074         return new(p)T(p1);
00075 }
00076 
00077 template<typename T, typename T1, typename T2> T* FbxNew(T1& p1, T2& p2)
00078 {
00079         T* p = (T*)FbxMalloc(sizeof(T));
00080         return new(p)T(p1, p2);
00081 }
00082 
00083 template<typename T, typename T1, typename T2> T* FbxNew(T1& p1, const T2& p2)
00084 {
00085         T* p = (T*)FbxMalloc(sizeof(T));
00086         return new(p)T(p1, p2);
00087 }
00088 
00089 template<typename T, typename T1, typename T2> T* FbxNew(const T1& p1, T2& p2)
00090 {
00091         T* p = (T*)FbxMalloc(sizeof(T));
00092         return new(p)T(p1, p2);
00093 }
00094 
00095 template<typename T, typename T1, typename T2> T* FbxNew(const T1& p1, const T2& p2)
00096 {
00097         T* p = (T*)FbxMalloc(sizeof(T));
00098         return new(p)T(p1, p2);
00099 }
00100 
00101 template<typename T, typename T1, typename T2, typename T3> T* FbxNew(T1& p1, T2& p2, T3& p3)
00102 {
00103         T* p = (T*)FbxMalloc(sizeof(T));
00104         return new(p)T(p1, p2, p3);
00105 }
00106 
00107 template<typename T, typename T1, typename T2, typename T3> T* FbxNew(T1& p1, T2& p2, const T3& p3)
00108 {
00109         T* p = (T*)FbxMalloc(sizeof(T));
00110         return new(p)T(p1, p2, p3);
00111 }
00112 
00113 template<typename T, typename T1, typename T2, typename T3> T* FbxNew(T1& p1, const T2& p2, T3& p3)
00114 {
00115         T* p = (T*)FbxMalloc(sizeof(T));
00116         return new(p)T(p1, p2, p3);
00117 }
00118 
00119 template<typename T, typename T1, typename T2, typename T3> T* FbxNew(T1& p1, const T2& p2, const T3& p3)
00120 {
00121         T* p = (T*)FbxMalloc(sizeof(T));
00122         return new(p)T(p1, p2, p3);
00123 }
00124 
00125 template<typename T, typename T1, typename T2, typename T3> T* FbxNew(const T1& p1, T2& p2, T3& p3)
00126 {
00127         T* p = (T*)FbxMalloc(sizeof(T));
00128         return new(p)T(p1, p2, p3);
00129 }
00130 
00131 template<typename T, typename T1, typename T2, typename T3> T* FbxNew(const T1& p1, T2& p2, const T3& p3)
00132 {
00133         T* p = (T*)FbxMalloc(sizeof(T));
00134         return new(p)T(p1, p2, p3);
00135 }
00136 
00137 template<typename T, typename T1, typename T2, typename T3> T* FbxNew(const T1& p1, const T2& p2, T3& p3)
00138 {
00139         T* p = (T*)FbxMalloc(sizeof(T));
00140         return new(p)T(p1, p2, p3);
00141 }
00142 
00143 template<typename T, typename T1, typename T2, typename T3> T* FbxNew(const T1& p1, const T2& p2, const T3& p3)
00144 {
00145         T* p = (T*)FbxMalloc(sizeof(T));
00146         return new(p)T(p1, p2, p3);
00147 }
00148 
00149 template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(T1& p1, T2& p2, T3& p3, T4& p4)
00150 {
00151         T* p = (T*)FbxMalloc(sizeof(T));
00152         return new(p)T(p1, p2, p3, p4);
00153 }
00154 
00155 template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(T1& p1, T2& p2, T3& p3, const T4& p4)
00156 {
00157         T* p = (T*)FbxMalloc(sizeof(T));
00158         return new(p)T(p1, p2, p3, p4);
00159 }
00160 
00161 template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(T1& p1, T2& p2, const T3& p3, T4& p4)
00162 {
00163         T* p = (T*)FbxMalloc(sizeof(T));
00164         return new(p)T(p1, p2, p3, p4);
00165 }
00166 
00167 template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(T1& p1, T2& p2, const T3& p3, const T4& p4)
00168 {
00169         T* p = (T*)FbxMalloc(sizeof(T));
00170         return new(p)T(p1, p2, p3, p4);
00171 }
00172 
00173 template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(T1& p1, const T2& p2, T3& p3, T4& p4)
00174 {
00175         T* p = (T*)FbxMalloc(sizeof(T));
00176         return new(p)T(p1, p2, p3, p4);
00177 }
00178 
00179 template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(T1& p1, const T2& p2, T3& p3, const T4& p4)
00180 {
00181         T* p = (T*)FbxMalloc(sizeof(T));
00182         return new(p)T(p1, p2, p3, p4);
00183 }
00184 
00185 template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(T1& p1, const T2& p2, const T3& p3, T4& p4)
00186 {
00187         T* p = (T*)FbxMalloc(sizeof(T));
00188         return new(p)T(p1, p2, p3, p4);
00189 }
00190 
00191 template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(T1& p1, const T2& p2, const T3& p3, const T4& p4)
00192 {
00193         T* p = (T*)FbxMalloc(sizeof(T));
00194         return new(p)T(p1, p2, p3, p4);
00195 }
00196 
00197 template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(const T1& p1, T2& p2, T3& p3, T4& p4)
00198 {
00199         T* p = (T*)FbxMalloc(sizeof(T));
00200         return new(p)T(p1, p2, p3, p4);
00201 }
00202 
00203 template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(const T1& p1, T2& p2, T3& p3, const T4& p4)
00204 {
00205         T* p = (T*)FbxMalloc(sizeof(T));
00206         return new(p)T(p1, p2, p3, p4);
00207 }
00208 
00209 template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(const T1& p1, T2& p2, const T3& p3, T4& p4)
00210 {
00211         T* p = (T*)FbxMalloc(sizeof(T));
00212         return new(p)T(p1, p2, p3, p4);
00213 }
00214 
00215 template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(const T1& p1, T2& p2, const T3& p3, const T4& p4)
00216 {
00217         T* p = (T*)FbxMalloc(sizeof(T));
00218         return new(p)T(p1, p2, p3, p4);
00219 }
00220 
00221 template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(const T1& p1, const T2& p2, T3& p3, T4& p4)
00222 {
00223         T* p = (T*)FbxMalloc(sizeof(T));
00224         return new(p)T(p1, p2, p3, p4);
00225 }
00226 
00227 template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(const T1& p1, const T2& p2, T3& p3, const T4& p4)
00228 {
00229         T* p = (T*)FbxMalloc(sizeof(T));
00230         return new(p)T(p1, p2, p3, p4);
00231 }
00232 
00233 template<typename T, typename T1, typename T2, typename T3, typename T4> T* FbxNew(const T1& p1, const T2& p2, const T3& p3, T4& p4)
00234 {
00235         T* p = (T*)FbxMalloc(sizeof(T));
00236         return new(p)T(p1, p2, p3, p4);
00237 }
00238 
00239 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)
00240 {
00241         T* p = (T*)FbxMalloc(sizeof(T));
00242         return new(p)T(p1, p2, p3, p4);
00243 }
00244 
00245 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)
00246 {
00247         T* p = (T*)FbxMalloc(sizeof(T));
00248         return new(p)T(p1,p2,p3,p4,p5);
00249 }
00250 
00251 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)
00252 {
00253         T* p = (T*)FbxMalloc(sizeof(T));
00254         return new(p)T(p1,p2,p3,p4,p5);
00255 }
00256 
00257 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)
00258 {
00259         T* p = (T*)FbxMalloc(sizeof(T));
00260         return new(p)T(p1,p2,p3,p4,p5);
00261 }
00262 
00263 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)
00264 {
00265         T* p = (T*)FbxMalloc(sizeof(T));
00266         return new(p)T(p1,p2,p3,p4,p5);
00267 }
00268 
00269 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)
00270 {
00271         T* p = (T*)FbxMalloc(sizeof(T));
00272         return new(p)T(p1,p2,p3,p4,p5);
00273 }
00274 
00275 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)
00276 {
00277         T* p = (T*)FbxMalloc(sizeof(T));
00278         return new(p)T(p1,p2,p3,p4,p5);
00279 }
00280 
00281 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)
00282 {
00283         T* p = (T*)FbxMalloc(sizeof(T));
00284         return new(p)T(p1,p2,p3,p4,p5);
00285 }
00286 
00287 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)
00288 {
00289         T* p = (T*)FbxMalloc(sizeof(T));
00290         return new(p)T(p1,p2,p3,p4,p5);
00291 }
00292 
00293 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)
00294 {
00295         T* p = (T*)FbxMalloc(sizeof(T));
00296         return new(p)T(p1,p2,p3,p4,p5);
00297 }
00298 
00299 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)
00300 {
00301         T* p = (T*)FbxMalloc(sizeof(T));
00302         return new(p)T(p1,p2,p3,p4,p5);
00303 }
00304 
00305 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)
00306 {
00307         T* p = (T*)FbxMalloc(sizeof(T));
00308         return new(p)T(p1,p2,p3,p4,p5);
00309 }
00310 
00311 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)
00312 {
00313         T* p = (T*)FbxMalloc(sizeof(T));
00314         return new(p)T(p1,p2,p3,p4,p5);
00315 }
00316 
00317 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)
00318 {
00319         T* p = (T*)FbxMalloc(sizeof(T));
00320         return new(p)T(p1,p2,p3,p4,p5,p6);
00321 }
00322 
00323 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)
00324 {
00325         T* p = (T*)FbxMalloc(sizeof(T));
00326         return new(p)T(p1,p2,p3,p4,p5,p6,p7);
00327 }
00328 
00329 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)
00330 {
00331         T* p = (T*)FbxMalloc(sizeof(T));
00332         return new(p)T(p1,p2,p3,p4,p5,p6,p7,p8);
00333 }
00334 
00335 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)
00336 {
00337         T* p = (T*)FbxMalloc(sizeof(T));
00338         return new(p)T(p1,p2,p3,p4,p5,p6,p7,p8,p9);
00339 }
00340 
00341 template<typename T> void FbxDelete(T* p)
00342 {
00343         if( p )
00344         {
00345                 ((T*)p)->~T();
00346                 FbxFree(p);
00347         }
00348 }
00349 
00350 template<typename T> void FbxDelete(const T* p)
00351 {
00352         if( p )
00353         {
00354                 ((T*)p)->~T();
00355                 FbxFree(const_cast<T*>(p));
00356         }
00357 }
00358 
00359 template<typename T> T* FbxNewArray(const int n)
00360 {
00361         if( FBXSDK_IS_SIMPLE_TYPE(T) )
00362         {
00363                 return (T*)FbxMalloc(sizeof(T)*n);
00364         }
00365         else
00366         {
00367                 void* pTmp = FbxMalloc(sizeof(T) * n + sizeof(int));
00368                 T* p = (T*)((int*)pTmp+1);
00369                 *((int*)pTmp) = n;
00370                 for( int i = 0; i < n; ++i )
00371                         new((T*)p+i)T;  //in-place new, not allocating memory so it is safe.
00372                 return p;
00373         }
00374 }
00375 
00376 template<typename T> void FbxDeleteArray(T* p)
00377 {
00378         if( p )
00379         {
00380                 if( !FBXSDK_IS_SIMPLE_TYPE(T) )
00381                 {
00382                         for(int i=0;i<((int*)p)[-1];++i)
00383                                 ((T*)p)[i].~T();
00384                         FbxFree((int*)p-1);
00385                 }
00386                 else
00387                 {
00388                         FbxFree((void*)p);
00389                 }
00390         }
00391 }
00392 
00393 #define FBXSDK_FRIEND_NEW()\
00394         template<typename T>\
00395         friend T* FBXSDK_NAMESPACE::FbxNew();\
00396         template<typename T, typename T1>\
00397         friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1);\
00398         template<typename T, typename T1>\
00399         friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1);\
00400         template<typename T, typename T1, typename T2>\
00401         friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, T2& p2);\
00402         template<typename T, typename T1, typename T2>\
00403         friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, const T2& p2);\
00404         template<typename T, typename T1, typename T2>\
00405         friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2);\
00406         template<typename T, typename T1, typename T2>\
00407         friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2);\
00408         template<typename T, typename T1, typename T2, typename T3>\
00409         friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, T2& p2, T3& p3);\
00410         template<typename T, typename T1, typename T2, typename T3>\
00411         friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, T2& p2, const T3& p3);\
00412         template<typename T, typename T1, typename T2, typename T3>\
00413         friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, const T2& p2, T3& p3);\
00414         template<typename T, typename T1, typename T2, typename T3>\
00415         friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, const T2& p2, const T3& p3);\
00416         template<typename T, typename T1, typename T2, typename T3>\
00417         friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, T3& p3);\
00418         template<typename T, typename T1, typename T2, typename T3>\
00419         friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, const T3& p3);\
00420         template<typename T, typename T1, typename T2, typename T3>\
00421         friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, T3& p3);\
00422         template<typename T, typename T1, typename T2, typename T3>\
00423         friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3);\
00424     \
00425         template<typename T, typename T1, typename T2, typename T3, typename T4>\
00426         friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, T2& p2, T3& p3, T4& p4);\
00427         template<typename T, typename T1, typename T2, typename T3, typename T4>\
00428         friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, T2& p2, T3& p3, const T4& p4);\
00429         template<typename T, typename T1, typename T2, typename T3, typename T4>\
00430         friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, T2& p2, const T3& p3, T4& p4);\
00431         template<typename T, typename T1, typename T2, typename T3, typename T4>\
00432         friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, T2& p2, const T3& p3, const T4& p4);\
00433         template<typename T, typename T1, typename T2, typename T3, typename T4>\
00434         friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, const T2& p2, T3& p3, T4& p4);\
00435         template<typename T, typename T1, typename T2, typename T3, typename T4>\
00436         friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, const T2& p2, T3& p3, const T4& p4);\
00437         template<typename T, typename T1, typename T2, typename T3, typename T4>\
00438         friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, const T2& p2, const T3& p3, T4& p4);\
00439         template<typename T, typename T1, typename T2, typename T3, typename T4>\
00440         friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, const T2& p2, const T3& p3, const T4& p4);\
00441         template<typename T, typename T1, typename T2, typename T3, typename T4>\
00442         friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, T3& p3, T4& p4);\
00443         template<typename T, typename T1, typename T2, typename T3, typename T4>\
00444         friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, T3& p3, const T4& p4);\
00445         template<typename T, typename T1, typename T2, typename T3, typename T4>\
00446         friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, const T3& p3, T4& p4);\
00447         template<typename T, typename T1, typename T2, typename T3, typename T4>\
00448         friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, const T3& p3, const T4& p4);\
00449         template<typename T, typename T1, typename T2, typename T3, typename T4>\
00450         friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, T3& p3, T4& p4);\
00451         template<typename T, typename T1, typename T2, typename T3, typename T4>\
00452         friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, T3& p3, const T4& p4);\
00453         template<typename T, typename T1, typename T2, typename T3, typename T4>\
00454         friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, T4& p4);\
00455         template<typename T, typename T1, typename T2, typename T3, typename T4>\
00456         friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4);\
00457     \
00458     template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
00459     friend T* FBXSDK_NAMESPACE::FbxNew(T1& p1, T2& p2, T3& p3, T4& p4, T5& p5);\
00460     template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
00461     friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, T3& p3, T4& p4, T5& p5);\
00462     template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
00463     friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, T3& p3, T4& p4, T5& p5);\
00464     template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
00465     friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, const T3& p3, T4& p4, T5& p5);\
00466     template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
00467     friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, T3& p3, const T4& p4, T5& p5);\
00468     template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
00469     friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, T2& p2, T3& p3, T4& p4, const T5& p5);\
00470     template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
00471     friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, T4& p4, T5& p5);\
00472     template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
00473     friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, T3& p3, const T4& p4, T5& p5);\
00474     template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
00475     friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, T3& p3, T4& p4, const T5& p5);\
00476     template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
00477     friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4, T5& p5);\
00478     template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
00479     friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, T4& p4, const T5& p5);\
00480     template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5>\
00481     friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4, const T5& p5);\
00482     \
00483         template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>\
00484         friend T* FBXSDK_NAMESPACE::FbxNew(const T1& p1, const T2& p2, const T3& p3, const T4& p4, const T5& p5, const T6& p6);\
00485         template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>\
00486         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);\
00487         template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>\
00488         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);\
00489         template<typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>\
00490         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);\
00491         template<typename T>\
00492         friend void FBXSDK_NAMESPACE::FbxDelete(T* p);\
00493         template<typename T>\
00494         friend void FBXSDK_NAMESPACE::FbxDelete(const T* p);\
00495         template<typename T>\
00496         friend T* FBXSDK_NAMESPACE::FbxNewArray(const int n);\
00497         template<typename T>\
00498         friend void FBXSDK_NAMESPACE::FbxDeleteArray(T* p);
00499 
00500 #ifdef FBXSDK_COMPILER_MSC
00501         #pragma warning(pop)
00502 #endif
00503 
00504 #include <fbxsdk/fbxsdk_nsend.h>
00505 
00506 #endif /* _FBXSDK_CORE_ARCH_NEW_H_ */