xsi_dataarray.h
Go to the documentation of this file.

    00001 //*****************************************************************************
    00011 //*****************************************************************************
    00012
    00013 #if (_MSC_VER > 1000) || defined(SGI_COMPILER)
    00014 #pragma once
    00015 #endif
    00016
    00017 #ifndef __XSIDATAARRAY_H__
    00018 #define __XSIDATAARRAY_H__
    00019
    00020 #include <sicppsdk.h>
    00021 #include <xsi_icenodecontext.h>
    00022 #include <xsi_indexset.h>
    00023
    00024 #include <xsi_vector2f.h>
    00025 #include <xsi_vector3f.h>
    00026 #include <xsi_vector4f.h>
    00027 #include <xsi_quaternionf.h>
    00028 #include <xsi_rotationf.h>
    00029 #include <xsi_matrix3f.h>
    00030 #include <xsi_matrix4f.h>
    00031 #include <xsi_color4f.h>
    00032 #include <xsi_shape.h>
    00033
    00034 namespace XSI {
    00035
    00036 class CBaseDataArray
    00037 {
    00038     public:
    00039     friend class ICENodeContext;
    00040
    00041     CBaseDataArray() :
    00042         m_nHandle(UINT_MAX),
    00043         m_pData(NULL),
    00044         m_bIsConstant(true),
    00045         m_nCount(1)
    00046     {}
    00047
    00048     protected:
    00049     SICPPSDK_INLINE ICENodeContext& GetContextRef();
    00050     SICPPSDK_INLINE ULONG& GetHandleRef();
    00051     SICPPSDK_INLINE void*& GetDataRef();
    00052     SICPPSDK_INLINE bool& GetConstantRef();
    00053     SICPPSDK_INLINE ULONG& GetCountRef();
    00054
    00055     virtual SICPPSDK_INLINE CStatus AcquireInputDataArray( XSI::siICENodeDataType in_arrayDataType, ULONG in_nInputPortID, ULONG in_nInstanceIndex );
    00056     virtual SICPPSDK_INLINE CStatus CopyFromInputDataArray( XSI::siICENodeDataType in_arrayDataType, ULONG in_nInputPortID, ULONG in_nInstanceIndex );
    00057     virtual SICPPSDK_INLINE CStatus AcquireOutputDataArray( XSI::siICENodeDataType in_arrayDataType );
    00058     virtual SICPPSDK_INLINE CStatus ReleaseDataArray( );
    00059     SICPPSDK_INLINE CStatus SetCustomTypeData( ULONG in_nIndex, const unsigned char* in_pData, ULONG in_nSize );
    00060     SICPPSDK_INLINE CStatus GetCustomTypeData( ULONG in_nIndex, const unsigned char** out_ppData, ULONG& out_nSize ) const;
    00061     SICPPSDK_INLINE CStatus GetCustomTypeData( ULONG in_nIndex, unsigned char** out_ppData, ULONG& out_nSize ) const;
    00062     SICPPSDK_INLINE unsigned char* ResizeCustomTypeData( ULONG in_nIndex, ULONG in_nSize );
    00063
    00064     SICPPSDK_INLINE CStatus SetStringData( ULONG in_nIndex, const wchar_t* in_pData, ULONG in_nSize );
    00065     SICPPSDK_INLINE CStatus GetStringData( ULONG in_nIndex, const wchar_t** out_ppData, ULONG& out_nSize ) const;
    00066     SICPPSDK_INLINE CStatus GetStringData( ULONG in_nIndex, wchar_t** out_ppData, ULONG& out_nSize ) const;
    00067     SICPPSDK_INLINE wchar_t* ResizeStringData( ULONG in_nIndex, ULONG in_nSize );
    00068
    00069     ICENodeContext m_ctxt;
    00070     ULONG m_nHandle;
    00071     void* m_pData;
    00072     bool m_bIsConstant;
    00073     ULONG m_nCount;
    00074 };
    00075
    00076 SICPPSDK_INLINE CStatus CBaseDataArray::AcquireInputDataArray( XSI::siICENodeDataType in_arrayDataType, ULONG in_nInputPortID, ULONG in_nInstanceIndex )
    00077 {
    00078     return m_ctxt.AcquireInputDataArray( *this, in_arrayDataType, in_nInputPortID, in_nInstanceIndex );
    00079 }
    00080
    00081 SICPPSDK_INLINE CStatus CBaseDataArray::CopyFromInputDataArray( XSI::siICENodeDataType in_arrayDataType, ULONG in_nInputPortID, ULONG in_nInstanceIndex )
    00082 {
    00083     return m_ctxt.CopyFromInputDataArray( *this, in_arrayDataType, in_nInputPortID, in_nInstanceIndex );
    00084 }
    00085
    00086 SICPPSDK_INLINE CStatus CBaseDataArray::AcquireOutputDataArray( XSI::siICENodeDataType in_arrayDataType )
    00087 {
    00088     return m_ctxt.AcquireOutputDataArray( *this, in_arrayDataType );
    00089 }
    00090
    00091 SICPPSDK_INLINE CStatus CBaseDataArray::ReleaseDataArray( )
    00092 {
    00093     return m_ctxt.ReleaseDataArray( *this );
    00094 }
    00095
    00096 SICPPSDK_INLINE CStatus CBaseDataArray::SetCustomTypeData( ULONG in_nIndex, const unsigned char* in_pData, ULONG in_nSize )
    00097 {
    00098     return m_ctxt.SetCustomTypeData( *this, in_nIndex, in_pData, in_nSize );
    00099 }
    00100
    00101 SICPPSDK_INLINE CStatus CBaseDataArray::GetCustomTypeData( ULONG in_nIndex, const unsigned char** out_ppData, ULONG& out_nSize ) const
    00102 {
    00103     return m_ctxt.GetCustomTypeData( (CBaseDataArray&)*this, in_nIndex, out_ppData, out_nSize );
    00104 }
    00105
    00106 SICPPSDK_INLINE CStatus CBaseDataArray::GetCustomTypeData( ULONG in_nIndex, unsigned char** out_ppData, ULONG& out_nSize ) const
    00107 {
    00108     return m_ctxt.GetCustomTypeData( (CBaseDataArray&)*this, in_nIndex, out_ppData, out_nSize );
    00109 }
    00110
    00111 SICPPSDK_INLINE unsigned char* CBaseDataArray::ResizeCustomTypeData( ULONG in_nIndex, ULONG in_nSize )
    00112 {
    00113     return m_ctxt.ResizeCustomTypeData( *this, in_nIndex, in_nSize );
    00114 }
    00115
    00116 SICPPSDK_INLINE CStatus CBaseDataArray::SetStringData( ULONG in_nIndex, const wchar_t* in_pData, ULONG in_nSize )
    00117 {
    00118     return m_ctxt.SetStringData( *this, in_nIndex, in_pData, in_nSize );
    00119 }
    00120
    00121 SICPPSDK_INLINE CStatus CBaseDataArray::GetStringData( ULONG in_nIndex, const wchar_t** out_ppData, ULONG& out_nSize ) const
    00122 {
    00123     return m_ctxt.GetStringData( (CBaseDataArray&)*this, in_nIndex, out_ppData, out_nSize );
    00124 }
    00125
    00126 SICPPSDK_INLINE CStatus CBaseDataArray::GetStringData( ULONG in_nIndex, wchar_t** out_ppData, ULONG& out_nSize ) const
    00127 {
    00128     return m_ctxt.GetStringData( (CBaseDataArray&)*this, in_nIndex, out_ppData, out_nSize );
    00129 }
    00130
    00131 SICPPSDK_INLINE wchar_t* CBaseDataArray::ResizeStringData( ULONG in_nIndex, ULONG in_nSize )
    00132 {
    00133     return m_ctxt.ResizeStringData( *this, in_nIndex, in_nSize );
    00134 }
    00135
    00136 SICPPSDK_INLINE ICENodeContext& CBaseDataArray::GetContextRef()
    00137 {
    00138     return m_ctxt;
    00139 }
    00140
    00141 SICPPSDK_INLINE ULONG& CBaseDataArray::GetHandleRef()
    00142 {
    00143     return m_nHandle;
    00144 }
    00145
    00146 SICPPSDK_INLINE void*& CBaseDataArray::GetDataRef()
    00147 {
    00148     return m_pData;
    00149 }
    00150
    00151 SICPPSDK_INLINE bool& CBaseDataArray::GetConstantRef()
    00152 {
    00153     return m_bIsConstant;
    00154 }
    00155
    00156 SICPPSDK_INLINE ULONG& CBaseDataArray::GetCountRef()
    00157 {
    00158     return m_nCount;
    00159 }
    00160
    00161 //*****************************************************************************
    00206 //*****************************************************************************
    00207
    00208 template <class T>
    00209 class CDataArray : public CBaseDataArray
    00210 {
    00211 public:
    00228     typedef T TData;
    00229
    00235     SICPPSDK_INLINE CDataArray( ICENodeContext& in_ctxt, ULONG in_nInputPortID, ULONG in_nInstanceIndex=0 ) ;
    00236
    00240     SICPPSDK_INLINE CDataArray( ICENodeContext& in_ctxt ) ;
    00241
    00244     SICPPSDK_INLINE CDataArray< T >( ) ;
    00245
    00248     SICPPSDK_INLINE ~CDataArray( );
    00249
    00255     SICPPSDK_INLINE const TData& operator[]( ULONG in_nIndex ) const;
    00256
    00263     SICPPSDK_INLINE TData& operator[]( ULONG in_nIndex ) ;
    00264
    00281     SICPPSDK_INLINE CStatus CopyFrom( ULONG in_nInputPortID, ULONG in_nInstanceIndex=0 ) ;
    00282
    00286     SICPPSDK_INLINE ULONG GetCount() const;
    00287
    00291     SICPPSDK_INLINE bool IsConstant() const;
    00292
    00293 private:
    00294     SICPPSDK_INLINE void Clear();
    00295     static SICPPSDK_INLINE XSI::siICENodeDataType GetDefaultType( );
    00296
    00297 #ifdef _DEBUG
    00298     TData* m_pDebugData;
    00299 #endif
    00300
    00301 };
    00302
    00303 template< class T >
    00304 SICPPSDK_INLINE CDataArray<T>::CDataArray( )
    00305 {
    00306 #ifdef _DEBUG
    00307     m_pDebugData = NULL;
    00308 #endif
    00309 }
    00310
    00311 template< class T >
    00312 SICPPSDK_INLINE CDataArray<T>::CDataArray( ICENodeContext& in_ctxt, ULONG in_nInputPortID, ULONG in_nInstanceIndex )
    00313 {
    00314     m_ctxt = in_ctxt;
    00315
    00316     AcquireInputDataArray( GetDefaultType(), in_nInputPortID, in_nInstanceIndex );
    00317
    00318 #ifdef _DEBUG
    00319     m_pDebugData = (T*)GetDataRef();
    00320 #endif
    00321 }
    00322
    00323 template< class T >
    00324 SICPPSDK_INLINE CDataArray<T>::CDataArray( ICENodeContext& in_ctxt )
    00325 {
    00326     m_ctxt = in_ctxt;
    00327
    00328     AcquireOutputDataArray( GetDefaultType() );
    00329
    00330 #ifdef _DEBUG
    00331     m_pDebugData = (T*)GetDataRef();
    00332 #endif
    00333 }
    00334
    00335 template< class T >
    00336 SICPPSDK_INLINE CDataArray<T>::~CDataArray( )
    00337 {
    00338     ReleaseDataArray( );
    00339 }
    00340
    00341 template< class T >
    00342 SICPPSDK_INLINE const T& CDataArray<T>::operator[]( ULONG in_index ) const
    00343 {
    00344     assert( !m_bIsConstant ? in_index < m_nCount : true );
    00345     T* pData = (T*)GetDataRef();
    00346
    00347     if (!pData)
    00348     {
    00349         assert( pData != NULL );
    00350         static T defVal;
    00351         return defVal;
    00352     }
    00353
    00354     if (m_bIsConstant)
    00355     {
    00356         return *pData;
    00357     }
    00358
    00359     return pData[in_index];
    00360 }
    00361
    00362 template< class T >
    00363 SICPPSDK_INLINE T& CDataArray<T>::operator[]( ULONG in_index )
    00364 {
    00365     assert( !m_bIsConstant ? in_index < m_nCount : true );
    00366     T* pData = (T*)GetDataRef();
    00367
    00368     if (!pData)
    00369     {
    00370         assert( pData != NULL );
    00371         static T defVal;
    00372         return defVal;
    00373     }
    00374
    00375     if (m_bIsConstant)
    00376     {
    00377         return *pData;
    00378     }
    00379
    00380     return pData[in_index];
    00381 }
    00382
    00383 template< class T >
    00384 SICPPSDK_INLINE CStatus CDataArray<T>::CopyFrom( ULONG in_nInputPortID, ULONG in_nInstanceIndex )
    00385 {
    00386     CStatus st = CopyFromInputDataArray( GetDefaultType(), in_nInputPortID, in_nInstanceIndex );
    00387
    00388 #ifdef _DEBUG
    00389     m_pDebugData = (T*)GetDataRef();
    00390 #endif
    00391
    00392     return st;
    00393 }
    00394
    00395 template< class T >
    00396 SICPPSDK_INLINE void CDataArray<T>::Clear()
    00397 {
    00398     ReleaseDataArray( );
    00399     m_nHandle = UINT_MAX;
    00400     m_nCount = 0;
    00401     m_bIsConstant = false;
    00402 }
    00403
    00404 template< class T >
    00405 SICPPSDK_INLINE ULONG CDataArray<T>::GetCount() const
    00406 {
    00407     return m_nCount;
    00408 }
    00409
    00410 template< class T >
    00411 SICPPSDK_INLINE bool CDataArray<T>::IsConstant() const
    00412 {
    00413     return m_bIsConstant;
    00414 }
    00415
    00416 //*****************************************************************************
    00417 // NB: Do not use the Doxygen \class tag for this template!!!
    00424 //*****************************************************************************
    00425 template<>
    00426 class CDataArray< bool > : public CBaseDataArray
    00427 {
    00428     public:
    00429
    00432     SICPPSDK_INLINE CDataArray< bool >( ) ;
    00433
    00439     SICPPSDK_INLINE CDataArray< bool >( ICENodeContext& in_ctxt, ULONG in_nInputPortID, ULONG in_nInstanceIndex=0 ) ;
    00440
    00444     SICPPSDK_INLINE CDataArray< bool >( ICENodeContext& in_ctxt ) ;
    00445
    00448     SICPPSDK_INLINE ~CDataArray< bool >( );
    00449
    00466     SICPPSDK_INLINE CStatus CopyFrom( ULONG in_nInputPortID, ULONG in_nInstanceIndex=0 ) ;
    00467
    00473     SICPPSDK_INLINE const bool operator[]( ULONG in_nIndex ) const;
    00474
    00481     SICPPSDK_INLINE CStatus Set( ULONG in_nIndex, bool in_bVal ) ;
    00482
    00486     SICPPSDK_INLINE ULONG GetCount() const;
    00487
    00491     SICPPSDK_INLINE bool IsConstant() const;
    00492
    00493 private:
    00494     SICPPSDK_INLINE void Clear();
    00495     static SICPPSDK_INLINE XSI::siICENodeDataType GetDefaultType( );
    00496
    00497     CBitsetHelper m_bitset;
    00498 };
    00499
    00500 SICPPSDK_INLINE CDataArray<bool>::CDataArray( )
    00501 {
    00502 }
    00503
    00504 SICPPSDK_INLINE CDataArray<bool>::CDataArray( ICENodeContext& in_ctxt, ULONG in_nInputPortID, ULONG in_nInstanceIndex )
    00505 {
    00506     m_ctxt = in_ctxt;
    00507
    00508     AcquireInputDataArray( GetDefaultType(), in_nInputPortID, in_nInstanceIndex );
    00509
    00510     m_bitset.GetCountRef() = GetCountRef();
    00511     m_bitset.GetArrayRef() = (ULONG*)GetDataRef();
    00512 }
    00513
    00514 SICPPSDK_INLINE CDataArray<bool>::CDataArray( ICENodeContext& in_ctxt )
    00515 {
    00516     m_ctxt = in_ctxt;
    00517     m_bIsConstant = true;
    00518     m_nCount = 1;
    00519
    00520     AcquireOutputDataArray( GetDefaultType() );
    00521
    00522     m_bitset.GetCountRef() = m_nCount;
    00523     m_bitset.GetArrayRef() = (ULONG*)GetDataRef();
    00524 }
    00525
    00526 SICPPSDK_INLINE CDataArray<bool>::~CDataArray( )
    00527 {
    00528     ReleaseDataArray( );
    00529 }
    00530
    00531 SICPPSDK_INLINE CStatus CDataArray<bool>::CopyFrom( ULONG in_nInputPortID, ULONG in_nInstanceIndex )
    00532 {
    00533     CStatus st = CopyFromInputDataArray( GetDefaultType(), in_nInputPortID, in_nInstanceIndex );
    00534
    00535     m_bitset.GetCountRef() = GetCountRef();
    00536     m_bitset.GetArrayRef() = (ULONG*)GetDataRef();
    00537
    00538     return st;
    00539 }
    00540
    00541 SICPPSDK_INLINE CStatus CDataArray<bool>::Set( ULONG in_nIndex, bool in_bVal )
    00542 {
    00543     return m_bitset.SetBit( in_nIndex, in_bVal );
    00544 }
    00545
    00546 SICPPSDK_INLINE const bool CDataArray<bool>::operator[] ( ULONG in_nIndex ) const
    00547 {
    00548     ULONG nIndex = m_bIsConstant ? 0 : in_nIndex;
    00549     return m_bitset.GetBit( nIndex );
    00550 }
    00551
    00552 SICPPSDK_INLINE void CDataArray<bool>::Clear()
    00553 {
    00554     ReleaseDataArray( );
    00555     m_nHandle = UINT_MAX;
    00556     m_bIsConstant = true;
    00557     m_nCount = 1;
    00558     m_bitset.Clear();
    00559 }
    00560
    00561 SICPPSDK_INLINE XSI::siICENodeDataType CDataArray<bool>::GetDefaultType()
    00562 {
    00563     return siICENodeDataBool;
    00564 }
    00565
    00566 SICPPSDK_INLINE ULONG CDataArray<bool>::GetCount() const
    00567 {
    00568     return m_nCount;
    00569 }
    00570
    00571 SICPPSDK_INLINE bool CDataArray<bool>::IsConstant() const
    00572 {
    00573     return m_bIsConstant;
    00574 }
    00575
    00576 //*****************************************************************************
    00583 //*****************************************************************************
    00584 class CDataArrayCustomType : public CBaseDataArray
    00585 {
    00586     public:
    00587     typedef unsigned char TData;
    00588
    00591     SICPPSDK_INLINE CDataArrayCustomType( ) ;
    00592
    00598     SICPPSDK_INLINE CDataArrayCustomType( ICENodeContext& in_ctxt, ULONG in_nInputPortID, ULONG in_nInstanceIndex=0 ) ;
    00599
    00603     SICPPSDK_INLINE CDataArrayCustomType( ICENodeContext& in_ctxt ) ;
    00604
    00607     SICPPSDK_INLINE ~CDataArrayCustomType( );
    00608
    00625     SICPPSDK_INLINE CStatus CopyFrom( ULONG in_nInputPortID, ULONG in_nInstanceIndex=0 ) ;
    00626
    00635     SICPPSDK_INLINE CStatus SetData( ULONG in_nIndex, const TData* in_pData, ULONG in_nSize );
    00636
    00646     SICPPSDK_INLINE CStatus GetData( ULONG in_nIndex, const TData** out_ppData, ULONG& out_nSize  ) const;
    00647
    00657     SICPPSDK_INLINE CStatus GetData( ULONG in_nIndex, TData** out_ppData, ULONG& out_nSize  ) const;
    00658
    00664     SICPPSDK_INLINE TData* Resize( ULONG in_nIndex, ULONG in_nSize );
    00665
    00669     SICPPSDK_INLINE ULONG GetCount() const;
    00670
    00674     SICPPSDK_INLINE bool IsConstant() const;
    00675
    00676 private:
    00677     SICPPSDK_INLINE void Clear();
    00678     static SICPPSDK_INLINE XSI::siICENodeDataType GetDefaultType( );
    00679 };
    00680
    00681 SICPPSDK_INLINE CDataArrayCustomType::CDataArrayCustomType( )
    00682 {
    00683 }
    00684
    00685 SICPPSDK_INLINE CDataArrayCustomType::CDataArrayCustomType( ICENodeContext& in_ctxt, ULONG in_nInputPortID, ULONG in_nInstanceIndex )
    00686 {
    00687     m_ctxt = in_ctxt;
    00688
    00689     AcquireInputDataArray( GetDefaultType(), in_nInputPortID, in_nInstanceIndex );
    00690 }
    00691
    00692 SICPPSDK_INLINE CDataArrayCustomType::CDataArrayCustomType( ICENodeContext& in_ctxt )
    00693 {
    00694     m_ctxt = in_ctxt;
    00695
    00696     AcquireOutputDataArray( GetDefaultType() );
    00697 }
    00698
    00699 SICPPSDK_INLINE CDataArrayCustomType::~CDataArrayCustomType( )
    00700 {
    00701     ReleaseDataArray( );
    00702 }
    00703
    00704 SICPPSDK_INLINE CStatus CDataArrayCustomType::CopyFrom( ULONG in_nInputPortID, ULONG in_nInstanceIndex )
    00705 {
    00706     return CopyFromInputDataArray( GetDefaultType(), in_nInputPortID, in_nInstanceIndex );
    00707 }
    00708
    00709 SICPPSDK_INLINE void CDataArrayCustomType::Clear()
    00710 {
    00711     ReleaseDataArray( );
    00712     m_nHandle = UINT_MAX;
    00713     m_bIsConstant = false;
    00714     m_nCount = 0;
    00715 }
    00716
    00717 SICPPSDK_INLINE ULONG CDataArrayCustomType::GetCount() const
    00718 {
    00719     return m_nCount;
    00720 }
    00721
    00722 SICPPSDK_INLINE bool CDataArrayCustomType::IsConstant() const
    00723 {
    00724     return m_bIsConstant;
    00725 }
    00726
    00727 SICPPSDK_INLINE CStatus CDataArrayCustomType::SetData( ULONG in_nIndex, const TData* in_pData, ULONG in_nSize )
    00728 {
    00729     return SetCustomTypeData( in_nIndex, in_pData, in_nSize );
    00730 }
    00731
    00732 SICPPSDK_INLINE CStatus CDataArrayCustomType::GetData( ULONG in_nIndex, const TData** out_ppData, ULONG& out_nSize ) const
    00733 {
    00734     return GetCustomTypeData( in_nIndex, out_ppData, out_nSize );
    00735 }
    00736
    00737 SICPPSDK_INLINE CStatus CDataArrayCustomType::GetData( ULONG in_nIndex, TData** out_ppData, ULONG& out_nSize ) const
    00738 {
    00739     return GetCustomTypeData( in_nIndex, out_ppData, out_nSize );
    00740 }
    00741
    00742 SICPPSDK_INLINE CDataArrayCustomType::TData* CDataArrayCustomType::Resize( ULONG in_nIndex, ULONG in_nSize )
    00743 {
    00744     return ResizeCustomTypeData( in_nIndex, in_nSize );
    00745 }
    00746
    00747 //*****************************************************************************
    00755 //*****************************************************************************
    00756 class CDataArrayString : public CBaseDataArray
    00757 {
    00758     public:
    00759     typedef wchar_t TData;
    00760
    00763     SICPPSDK_INLINE CDataArrayString( ) ;
    00764
    00770     SICPPSDK_INLINE CDataArrayString( ICENodeContext& in_ctxt, ULONG in_nInputPortID, ULONG in_nInstanceIndex=0 ) ;
    00771
    00775     SICPPSDK_INLINE CDataArrayString( ICENodeContext& in_ctxt ) ;
    00776
    00779     SICPPSDK_INLINE ~CDataArrayString( );
    00780
    00797     SICPPSDK_INLINE CStatus CopyFrom( ULONG in_nInputPortID, ULONG in_nInstanceIndex=0 ) ;
    00798
    00805     SICPPSDK_INLINE CStatus SetData( ULONG in_nIndex, const CString& in_str );
    00806
    00812     SICPPSDK_INLINE CStatus GetData( ULONG in_nIndex, CString& out_str ) const;
    00813
    00819     SICPPSDK_INLINE CString operator[]( ULONG in_nIndex ) const;
    00820
    00829     SICPPSDK_INLINE CStatus SetData( ULONG in_nIndex, const TData* in_pData, ULONG in_nCount );
    00830
    00843     SICPPSDK_INLINE CStatus GetData( ULONG in_nIndex, const TData** out_ppStr, ULONG& out_nCount ) const;
    00844
    00854     SICPPSDK_INLINE CStatus GetData( ULONG in_nIndex, TData** out_ppStr, ULONG& out_nCount ) const;
    00855
    00861     SICPPSDK_INLINE TData* Resize( ULONG in_nIndex, ULONG in_nCount );
    00862
    00866     SICPPSDK_INLINE ULONG GetCount() const;
    00867
    00871     SICPPSDK_INLINE bool IsConstant() const;
    00872
    00873 private:
    00874     SICPPSDK_INLINE void Clear();
    00875     static SICPPSDK_INLINE XSI::siICENodeDataType GetDefaultType( );
    00876 };
    00877
    00878 SICPPSDK_INLINE CDataArrayString::CDataArrayString( )
    00879 {
    00880 }
    00881
    00882 SICPPSDK_INLINE CDataArrayString::CDataArrayString( ICENodeContext& in_ctxt, ULONG in_nInputPortID, ULONG in_nInstanceIndex )
    00883 {
    00884     m_ctxt = in_ctxt;
    00885
    00886     AcquireInputDataArray( GetDefaultType(), in_nInputPortID, in_nInstanceIndex );
    00887 }
    00888
    00889 SICPPSDK_INLINE CDataArrayString::CDataArrayString( ICENodeContext& in_ctxt )
    00890 {
    00891     m_ctxt = in_ctxt;
    00892
    00893     AcquireOutputDataArray( GetDefaultType() );
    00894 }
    00895
    00896 SICPPSDK_INLINE CDataArrayString::~CDataArrayString( )
    00897 {
    00898     ReleaseDataArray( );
    00899 }
    00900
    00901 SICPPSDK_INLINE CStatus CDataArrayString::CopyFrom( ULONG in_nInputPortID, ULONG in_nInstanceIndex )
    00902 {
    00903     return CopyFromInputDataArray( GetDefaultType(), in_nInputPortID, in_nInstanceIndex );
    00904 }
    00905
    00906 SICPPSDK_INLINE void CDataArrayString::Clear()
    00907 {
    00908     ReleaseDataArray( );
    00909     m_nHandle = UINT_MAX;
    00910     m_bIsConstant = false;
    00911     m_nCount = 0;
    00912 }
    00913
    00914 SICPPSDK_INLINE ULONG CDataArrayString::GetCount() const
    00915 {
    00916     return m_nCount;
    00917 }
    00918
    00919 SICPPSDK_INLINE bool CDataArrayString::IsConstant() const
    00920 {
    00921     return m_bIsConstant;
    00922 }
    00923
    00924 SICPPSDK_INLINE CStatus CDataArrayString::SetData( ULONG in_nIndex, const CString& in_str )
    00925 {
    00926     return SetStringData( in_nIndex, in_str.GetWideString(), in_str.Length() );
    00927 }
    00928
    00929 SICPPSDK_INLINE CStatus CDataArrayString::GetData( ULONG in_nIndex, CString& out_str ) const
    00930 {
    00931     const wchar_t* pzStr;
    00932     ULONG nSize;
    00933     CStatus st = GetStringData( in_nIndex, &pzStr, nSize );
    00934     out_str = CString( pzStr, nSize );
    00935     return st;
    00936 }
    00937
    00938 SICPPSDK_INLINE CString CDataArrayString::operator[]( ULONG i ) const
    00939 {
    00940     CString str;
    00941     GetData( i, str );
    00942     return str;
    00943 }
    00944
    00945 SICPPSDK_INLINE CStatus CDataArrayString::SetData( ULONG in_nIndex, const TData* in_pData, ULONG in_nSize )
    00946 {
    00947     return SetStringData( in_nIndex, in_pData, in_nSize );
    00948 }
    00949
    00950 SICPPSDK_INLINE CStatus CDataArrayString::GetData( ULONG in_nIndex, const TData** out_ppData, ULONG& out_nSize ) const
    00951 {
    00952     return GetStringData( in_nIndex, out_ppData, out_nSize );
    00953 }
    00954
    00955 SICPPSDK_INLINE CStatus CDataArrayString::GetData( ULONG in_nIndex, TData** out_ppData, ULONG& out_nSize ) const
    00956 {
    00957     return GetStringData( in_nIndex, out_ppData, out_nSize );
    00958 }
    00959
    00960 SICPPSDK_INLINE CDataArrayString::TData* CDataArrayString::Resize( ULONG in_nIndex, ULONG in_nSize )
    00961 {
    00962     return ResizeStringData( in_nIndex, in_nSize );
    00963 }
    00964
    01041 typedef XSI::CDataArray< float > CDataArrayFloat;
    01042 typedef XSI::CDataArray< LONG > CDataArrayLong;
    01043 typedef XSI::CDataArray< bool > CDataArrayBool;
    01044 typedef XSI::CDataArray< XSI::MATH::CVector2f > CDataArrayVector2f;
    01045 typedef XSI::CDataArray< XSI::MATH::CVector3f > CDataArrayVector3f;
    01046 typedef XSI::CDataArray< XSI::MATH::CVector4f > CDataArrayVector4f;
    01047 typedef XSI::CDataArray< XSI::MATH::CQuaternionf > CDataArrayQuaternionf;
    01048 typedef XSI::CDataArray< XSI::MATH::CRotationf > CDataArrayRotationf;
    01049 typedef XSI::CDataArray< XSI::MATH::CMatrix3f > CDataArrayMatrix3f;
    01050 typedef XSI::CDataArray< XSI::MATH::CMatrix4f > CDataArrayMatrix4f;
    01051 typedef XSI::CDataArray< XSI::MATH::CColor4f > CDataArrayColor4f;
    01052 typedef XSI::CDataArray< XSI::MATH::CShape> CDataArrayShape;
    01053
    01054 template<> SICPPSDK_INLINE XSI::siICENodeDataType CDataArrayFloat::GetDefaultType( ){return siICENodeDataFloat;}
    01055 template<> SICPPSDK_INLINE XSI::siICENodeDataType CDataArrayLong::GetDefaultType( ){return siICENodeDataLong;}
    01056 template<> SICPPSDK_INLINE XSI::siICENodeDataType CDataArrayVector2f::GetDefaultType( ){return siICENodeDataVector2;}
    01057 template<> SICPPSDK_INLINE XSI::siICENodeDataType CDataArrayVector3f::GetDefaultType( ){return siICENodeDataVector3;}
    01058 template<> SICPPSDK_INLINE XSI::siICENodeDataType CDataArrayVector4f::GetDefaultType( ){return siICENodeDataVector4;}
    01059 template<> SICPPSDK_INLINE XSI::siICENodeDataType CDataArrayQuaternionf::GetDefaultType( ){return siICENodeDataQuaternion;}
    01060 template<> SICPPSDK_INLINE XSI::siICENodeDataType CDataArrayMatrix3f::GetDefaultType( ){return siICENodeDataMatrix33;}
    01061 template<> SICPPSDK_INLINE XSI::siICENodeDataType CDataArrayMatrix4f::GetDefaultType( ){return siICENodeDataMatrix44;}
    01062 template<> SICPPSDK_INLINE XSI::siICENodeDataType CDataArrayColor4f::GetDefaultType( ){return siICENodeDataColor4;}
    01063 template<> SICPPSDK_INLINE XSI::siICENodeDataType CDataArrayRotationf::GetDefaultType( ){return siICENodeDataRotation;}
    01064 template<> SICPPSDK_INLINE XSI::siICENodeDataType CDataArrayShape::GetDefaultType( ){return siICENodeDataShape;}
    01065 SICPPSDK_INLINE XSI::siICENodeDataType CDataArrayCustomType::GetDefaultType(){return siICENodeDataCustomType;}
    01066 SICPPSDK_INLINE XSI::siICENodeDataType CDataArrayString::GetDefaultType(){return siICENodeDataString;}
    01067
    01068 };
    01069
    01070 #endif // __XSIDATAARRAY_H__