00001
00011
00012
00013 #if (_MSC_VER > 1000) || defined(SGI_COMPILER)
00014 #pragma once
00015 #endif
00016
00017 #ifndef __XSIDATAARRAY2D_H__
00018 #define __XSIDATAARRAY2D_H__
00019
00020 #include <sicppsdk.h>
00021 #include <xsi_icenodecontext.h>
00022 #include <xsi_indexset.h>
00023 #include <xsi_dataarray.h>
00024
00025 #include <xsi_vector2f.h>
00026 #include <xsi_vector3f.h>
00027 #include <xsi_vector4f.h>
00028 #include <xsi_quaternionf.h>
00029 #include <xsi_rotationf.h>
00030 #include <xsi_matrix3f.h>
00031 #include <xsi_matrix4f.h>
00032 #include <xsi_color4f.h>
00033
00034 namespace XSI {
00035
00036 class ICENodeContext;
00037
00038 class CBaseDataArray2D : public CBaseDataArray
00039 {
00040 public:
00041 friend class ICENodeContext;
00042
00043 CBaseDataArray2D() : m_bIsSubArrayConstant(false) {}
00044
00045 protected:
00046 SICPPSDK_INLINE CStatus AcquireInputDataArray( XSI::siICENodeDataType in_arrayDataType, ULONG in_nInputPortID, ULONG in_nInstanceIndex );
00047 SICPPSDK_INLINE CStatus CopyFromInputDataArray( XSI::siICENodeDataType in_arrayDataType, ULONG in_nInputPortID, ULONG in_nInstanceIndex );
00048 SICPPSDK_INLINE CStatus AcquireOutputDataArray( XSI::siICENodeDataType in_arrayDataType );
00049 SICPPSDK_INLINE CStatus ReleaseDataArray( );
00050 SICPPSDK_INLINE CStatus GetSubArray( ULONG in_nArrayIndex, void*& out_ppData, ULONG& out_nCount, ULONG& out_nStartBit ) const;
00051 SICPPSDK_INLINE CStatus ResizeSubArray( ULONG in_nArrayIndex, ULONG in_nSize, void*& out_ppData, ULONG& out_nCount, ULONG& out_nStartBit );
00052 SICPPSDK_INLINE bool GetSubArrayConstant() const;
00053 SICPPSDK_INLINE bool& GetSubArrayConstantRef();
00054
00055 SICPPSDK_INLINE CStatus SetCustomTypeData2D( ULONG in_nAccessIndex, ULONG in_nIndex, const unsigned char* in_pData, ULONG in_nSize );
00056 SICPPSDK_INLINE CStatus GetCustomTypeData2D( ULONG in_nAccessIndex, ULONG in_nIndex, const unsigned char** out_ppData, ULONG& out_nSize ) const;
00057 SICPPSDK_INLINE CStatus GetCustomTypeData2D( ULONG in_nAccessIndex, ULONG in_nIndex, unsigned char** out_ppData, ULONG& out_nSize ) const;
00058 SICPPSDK_INLINE unsigned char* ResizeCustomTypeData2D( ULONG in_nAccessIndex, ULONG in_nArrayIndex, ULONG in_nSize );
00059
00060 SICPPSDK_INLINE CStatus SetStringData2D( ULONG in_nAccessIndex, ULONG in_nIndex, const wchar_t* in_pData, ULONG in_nCount );
00061 SICPPSDK_INLINE CStatus GetStringData2D( ULONG in_nAccessIndex, ULONG in_nIndex, const wchar_t** out_ppData, ULONG& out_nCount ) const;
00062 SICPPSDK_INLINE CStatus GetStringData2D( ULONG in_nAccessIndex, ULONG in_nIndex, wchar_t** out_ppData, ULONG& out_nCount ) const;
00063 SICPPSDK_INLINE wchar_t* ResizeStringData2D( ULONG in_nAccessIndex, ULONG in_nArrayIndex, ULONG in_nCount );
00064
00065 private:
00066 bool m_bIsSubArrayConstant;
00067 };
00068
00069 SICPPSDK_INLINE CStatus CBaseDataArray2D::AcquireInputDataArray( XSI::siICENodeDataType in_arrayDataType, ULONG in_nInputPortID, ULONG in_nInstanceIndex )
00070 {
00071 return m_ctxt.AcquireInputDataArray2D( *this, in_arrayDataType, in_nInputPortID, in_nInstanceIndex );
00072 }
00073
00074 SICPPSDK_INLINE CStatus CBaseDataArray2D::CopyFromInputDataArray( XSI::siICENodeDataType in_arrayDataType, ULONG in_nInputPortID, ULONG in_nInstanceIndex )
00075 {
00076 return m_ctxt.CopyFromInputDataArray2D( *this, in_arrayDataType, in_nInputPortID, in_nInstanceIndex );
00077 }
00078
00079 SICPPSDK_INLINE CStatus CBaseDataArray2D::AcquireOutputDataArray( XSI::siICENodeDataType in_arrayDataType )
00080 {
00081 return m_ctxt.AcquireOutputDataArray2D( *this, in_arrayDataType );
00082 }
00083
00084 SICPPSDK_INLINE CStatus CBaseDataArray2D::ReleaseDataArray( )
00085 {
00086 return m_ctxt.ReleaseDataArray( *this );
00087 }
00088
00089 SICPPSDK_INLINE CStatus CBaseDataArray2D::ResizeSubArray( ULONG in_nArrayIndex, ULONG in_nSize, void*& out_ppData, ULONG& out_nCount, ULONG& out_nStartBit )
00090 {
00091 return m_ctxt.ResizeSubArray( *this, in_nArrayIndex, in_nSize, out_ppData, out_nCount, out_nStartBit );
00092 }
00093
00094 SICPPSDK_INLINE CStatus CBaseDataArray2D::GetSubArray( ULONG in_nArrayIndex, void*& out_ppData, ULONG& out_nCount, ULONG& out_nStartBit ) const
00095 {
00096 return m_ctxt.GetSubArray( (CBaseDataArray2D&)*this, in_nArrayIndex, out_ppData, out_nCount, out_nStartBit );
00097 }
00098
00099 SICPPSDK_INLINE bool& CBaseDataArray2D::GetSubArrayConstantRef()
00100 {
00101 return m_bIsSubArrayConstant;
00102 }
00103
00104 SICPPSDK_INLINE bool CBaseDataArray2D::GetSubArrayConstant() const
00105 {
00106 return m_bIsSubArrayConstant;
00107 }
00108
00109 SICPPSDK_INLINE CStatus CBaseDataArray2D::SetCustomTypeData2D( ULONG in_nAccessIndex, ULONG in_nIndex, const unsigned char* in_pData, ULONG in_nSize )
00110 {
00111 return m_ctxt.SetCustomTypeData2D( *this, in_nAccessIndex, in_nIndex, in_pData, in_nSize );
00112 }
00113
00114 SICPPSDK_INLINE CStatus CBaseDataArray2D::GetCustomTypeData2D( ULONG in_nAccessIndex, ULONG in_nIndex, const unsigned char** out_ppData, ULONG& out_nSize ) const
00115 {
00116 return m_ctxt.GetCustomTypeData2D( (CBaseDataArray&)*this, in_nAccessIndex, in_nIndex, out_ppData, out_nSize );
00117 }
00118
00119 SICPPSDK_INLINE CStatus CBaseDataArray2D::GetCustomTypeData2D( ULONG in_nAccessIndex, ULONG in_nIndex, unsigned char** out_ppData, ULONG& out_nSize ) const
00120 {
00121 return m_ctxt.GetCustomTypeData2D( (CBaseDataArray&)*this, in_nAccessIndex, in_nIndex, out_ppData, out_nSize );
00122 }
00123
00124 SICPPSDK_INLINE unsigned char* CBaseDataArray2D::ResizeCustomTypeData2D( ULONG in_nAccessIndex, ULONG in_nArrayIndex, ULONG in_nSize )
00125 {
00126 return m_ctxt.ResizeCustomTypeData2D( *this, in_nAccessIndex, in_nArrayIndex, in_nSize );
00127 }
00128
00129 SICPPSDK_INLINE CStatus CBaseDataArray2D::SetStringData2D( ULONG in_nAccessIndex, ULONG in_nIndex, const wchar_t* in_pData, ULONG in_nCount )
00130 {
00131 return m_ctxt.SetStringData2D( *this, in_nAccessIndex, in_nIndex, in_pData, in_nCount );
00132 }
00133
00134 SICPPSDK_INLINE CStatus CBaseDataArray2D::GetStringData2D( ULONG in_nAccessIndex, ULONG in_nIndex, const wchar_t** out_ppData, ULONG& out_nCount ) const
00135 {
00136 return m_ctxt.GetStringData2D( (CBaseDataArray&)*this, in_nAccessIndex, in_nIndex, out_ppData, out_nCount );
00137 }
00138
00139 SICPPSDK_INLINE CStatus CBaseDataArray2D::GetStringData2D( ULONG in_nAccessIndex, ULONG in_nIndex, wchar_t** out_ppData, ULONG& out_nCount ) const
00140 {
00141 return m_ctxt.GetStringData2D( (CBaseDataArray&)*this, in_nAccessIndex, in_nIndex, out_ppData, out_nCount );
00142 }
00143
00144 SICPPSDK_INLINE wchar_t* CBaseDataArray2D::ResizeStringData2D( ULONG in_nAccessIndex, ULONG in_nArrayIndex, ULONG in_nCount )
00145 {
00146 return m_ctxt.ResizeStringData2D( *this, in_nAccessIndex, in_nArrayIndex, in_nCount );
00147 }
00148
00149
00222
00223
00224 template <class T>
00225 class CDataArray2D : public CBaseDataArray2D
00226 {
00227 public:
00228
00245 typedef T TData;
00246
00247
00253
00254
00255 class Accessor
00256 {
00257 public:
00258 friend class CDataArray2D<T>;
00259
00262 Accessor( ) : m_pData(NULL), m_nCount(0), m_bIsConstant(false)
00263 {
00264 }
00265
00268 Accessor( const Accessor& in_accessor )
00269 {
00270 *this = in_accessor;
00271 }
00272
00277 Accessor& operator=( const Accessor& in_accessor )
00278 {
00279 m_pData = in_accessor.m_pData;
00280 m_nCount = in_accessor.m_nCount;
00281 m_bIsConstant = in_accessor.m_bIsConstant;
00282 return *this;
00283 }
00284
00288 ULONG GetCount() const
00289 {
00290 return m_nCount;
00291 }
00292
00298 const T& operator[]( ULONG in_nIndex ) const
00299 {
00300 return m_pData[ m_bIsConstant ? 0 : in_nIndex ];
00301 }
00302
00361 T& operator[]( ULONG in_nIndex )
00362 {
00363 return m_pData[ m_bIsConstant ? 0 : in_nIndex ];
00364 }
00365
00366 private:
00367 void*& GetDataRef()
00368 {
00369 return (void*&)m_pData;
00370 }
00371
00372 ULONG& GetCountRef()
00373 {
00374 return m_nCount;
00375 }
00376
00377 void SetAsConstant( bool in_bConst )
00378 {
00379 m_bIsConstant = in_bConst;
00380 }
00381
00382 T* m_pData;
00383 ULONG m_nCount;
00384 bool m_bIsConstant;
00385 };
00386
00392 SICPPSDK_INLINE CDataArray2D( ICENodeContext& in_ctxt, ULONG in_nInputPortID, ULONG in_nInstanceIndex=0 ) ;
00393
00397 SICPPSDK_INLINE CDataArray2D( ICENodeContext& in_ctxt ) ;
00398
00401 SICPPSDK_INLINE CDataArray2D( ) ;
00402
00405 SICPPSDK_INLINE ~CDataArray2D( );
00406
00423 SICPPSDK_INLINE CStatus CopyFrom( ULONG in_nInputPortID, ULONG in_nInstanceIndex=0 ) ;
00424
00430 SICPPSDK_INLINE Accessor operator[]( ULONG in_nArrayIndex ) const;
00431
00438 SICPPSDK_INLINE Accessor Resize( ULONG in_nArrayIndex, ULONG in_nSize );
00439
00443 SICPPSDK_INLINE ULONG GetCount() const;
00444
00448 SICPPSDK_INLINE bool IsConstant() const;
00449
00450 private:
00451 SICPPSDK_INLINE Accessor Get( ULONG in_nArrayIndex ) const;
00452 SICPPSDK_INLINE void Clear();
00453 static SICPPSDK_INLINE XSI::siICENodeDataType GetDefaultType( );
00454 };
00455
00456 template< class T >
00457 SICPPSDK_INLINE CDataArray2D<T>::CDataArray2D( ICENodeContext& in_ctxt, ULONG in_nInputPortID, ULONG in_nInstanceIndex )
00458 {
00459 m_ctxt = in_ctxt;
00460
00461 AcquireInputDataArray( GetDefaultType(), in_nInputPortID, in_nInstanceIndex );
00462 }
00463
00464 template< class T >
00465 SICPPSDK_INLINE CDataArray2D<T>::CDataArray2D( ICENodeContext& in_ctxt )
00466 {
00467 m_ctxt = in_ctxt;
00468
00469 AcquireOutputDataArray( GetDefaultType() );
00470 }
00471
00472 template< class T >
00473 SICPPSDK_INLINE CDataArray2D<T>::~CDataArray2D( )
00474 {
00475 ReleaseDataArray( );
00476 }
00477
00478 template< class T >
00479 SICPPSDK_INLINE CDataArray2D<T>::CDataArray2D( )
00480 {
00481 }
00482
00483 template< class T >
00484 SICPPSDK_INLINE CStatus CDataArray2D<T>::CopyFrom( ULONG in_nInputPortID, ULONG in_nInstanceIndex )
00485 {
00486 return CopyFromInputDataArray( GetDefaultType(), in_nInputPortID, in_nInstanceIndex );
00487 }
00488
00489 template< class T >
00490 SICPPSDK_INLINE typename CDataArray2D<T>::Accessor CDataArray2D<T>::Get( ULONG in_nArrayIndex ) const
00491 {
00492 Accessor a;
00493 ULONG nNotused;
00494 GetSubArray( in_nArrayIndex, a.GetDataRef(), (ULONG&)a.GetCountRef(), nNotused );
00495 a.SetAsConstant( GetSubArrayConstant() );
00496
00497 return a;
00498 }
00499
00500 template< class T >
00501 SICPPSDK_INLINE typename CDataArray2D<T>::Accessor CDataArray2D<T>::operator[]( ULONG in_nArrayIndex ) const
00502 {
00503 return Get( in_nArrayIndex );
00504 }
00505
00506 template< class T >
00507 SICPPSDK_INLINE typename CDataArray2D<T>::Accessor CDataArray2D<T>::Resize( ULONG in_nArrayIndex, ULONG in_nSize )
00508 {
00509 ULONG nNotused;
00510 Accessor a;
00511 ResizeSubArray( in_nArrayIndex, in_nSize, a.GetDataRef(), (ULONG&)a.GetCountRef(), nNotused );
00512 a.SetAsConstant( GetSubArrayConstant() );
00513 return a;
00514 }
00515
00516 template< class T >
00517 SICPPSDK_INLINE void CDataArray2D<T>::Clear()
00518 {
00519 ReleaseDataArray( );
00520 m_nHandle = UINT_MAX;
00521 m_nCount = 0;
00522 m_bIsConstant = false;
00523 m_bIsSubArrayConstant = false;
00524 }
00525
00526 template< class T >
00527 SICPPSDK_INLINE ULONG CDataArray2D<T>::GetCount() const
00528 {
00529 return m_nCount;
00530 }
00531
00532 template< class T >
00533 SICPPSDK_INLINE bool CDataArray2D<T>::IsConstant() const
00534 {
00535 return m_bIsConstant;
00536 }
00537
00538
00539
00546
00547
00548 template <>
00549 class CDataArray2D<bool> : public CBaseDataArray2D
00550 {
00551 public:
00552
00559
00560 class Accessor
00561 {
00562 public:
00563 friend class CDataArray2D<bool>;
00564
00567 Accessor( ) : m_nStartbit(0), m_bIsConstant(false)
00568 {
00569 }
00570
00573 Accessor( const Accessor& in_accessor )
00574 {
00575 *this = in_accessor;
00576 }
00577
00582 Accessor& operator=( const Accessor& in_accessor )
00583 {
00584 m_bitset = in_accessor.m_bitset;
00585 m_nStartbit = in_accessor.m_nStartbit;
00586 m_bIsConstant = in_accessor.m_bIsConstant;
00587 return *this;
00588 }
00589
00595 const bool operator[] ( ULONG in_nIndex ) const
00596 {
00597 ULONG nIndex = m_nStartbit + (m_bitset.GetCount() == UINT_MAX ? 0 : in_nIndex);
00598 return m_bitset.GetBit( nIndex );
00599 }
00600
00607 CStatus Set( ULONG in_nIndex, bool in_bVal )
00608 {
00609 return m_bitset.SetBit( m_nStartbit + in_nIndex, in_bVal );
00610 }
00611
00615 ULONG GetCount() const
00616 {
00617 return m_bitset.GetCount( );
00618 }
00619
00620 private:
00621
00622 void SetAsConstant( bool in_bConst )
00623 {
00624 m_bIsConstant = in_bConst;
00625 }
00626
00627 ULONG m_nStartbit;
00628 CBitsetHelper m_bitset;
00629 bool m_bIsConstant;
00630 };
00631
00637 SICPPSDK_INLINE CDataArray2D( ICENodeContext& in_ctxt, ULONG in_nInputPortID, ULONG in_nInstanceIndex=0 ) ;
00638
00642 SICPPSDK_INLINE CDataArray2D( ICENodeContext& in_ctxt ) ;
00643
00646 SICPPSDK_INLINE CDataArray2D( ) ;
00647
00650 SICPPSDK_INLINE ~CDataArray2D( );
00651
00668 SICPPSDK_INLINE CStatus CopyFrom( ULONG in_nInputPortID, ULONG in_nInstanceIndex=0 ) ;
00669
00675 SICPPSDK_INLINE Accessor operator[]( ULONG in_nArrayIndex ) const;
00676
00683 SICPPSDK_INLINE Accessor Resize( ULONG in_nArrayIndex, ULONG in_nSize );
00684
00688 SICPPSDK_INLINE ULONG GetCount() const;
00689
00693 SICPPSDK_INLINE bool IsConstant() const;
00694
00695 private:
00696 SICPPSDK_INLINE Accessor Get( ULONG in_nArrayIndex ) const;
00697 static SICPPSDK_INLINE XSI::siICENodeDataType GetDefaultType( );
00698 };
00699
00700 SICPPSDK_INLINE CDataArray2D<bool>::CDataArray2D( )
00701 {
00702 }
00703
00704 SICPPSDK_INLINE CDataArray2D<bool>::CDataArray2D( ICENodeContext& in_ctxt, ULONG in_nInputPortID, ULONG in_nInstanceIndex )
00705 {
00706 m_ctxt = in_ctxt;
00707
00708 AcquireInputDataArray( GetDefaultType(), in_nInputPortID, in_nInstanceIndex );
00709 }
00710
00711 SICPPSDK_INLINE CDataArray2D<bool>::CDataArray2D( ICENodeContext& in_ctxt )
00712 {
00713 m_ctxt = in_ctxt;
00714
00715 AcquireOutputDataArray( GetDefaultType() );
00716 }
00717
00718 SICPPSDK_INLINE CDataArray2D<bool>::~CDataArray2D( )
00719 {
00720 ReleaseDataArray( );
00721 }
00722
00723 SICPPSDK_INLINE CStatus CDataArray2D<bool>::CopyFrom( ULONG in_nInputPortID, ULONG in_nInstanceIndex )
00724 {
00725 return CopyFromInputDataArray( GetDefaultType(), in_nInputPortID, in_nInstanceIndex );
00726 }
00727
00728 SICPPSDK_INLINE CDataArray2D<bool>::Accessor CDataArray2D<bool>::Get( ULONG in_nArrayIndex ) const
00729 {
00730 Accessor a;
00731 GetSubArray( in_nArrayIndex, (void*&)a.m_bitset.GetArrayRef(), (ULONG&)a.m_bitset.GetCountRef(), a.m_nStartbit );
00732 a.SetAsConstant( GetSubArrayConstant() );
00733 return a;
00734 }
00735
00736 SICPPSDK_INLINE CDataArray2D<bool>::Accessor CDataArray2D<bool>::operator[]( ULONG in_nArrayIndex ) const
00737 {
00738 return Get( in_nArrayIndex );
00739 }
00740
00741 SICPPSDK_INLINE CDataArray2D<bool>::Accessor CDataArray2D<bool>::Resize( ULONG in_nArrayIndex, ULONG in_nSize )
00742 {
00743 Accessor a;
00744 ResizeSubArray( in_nArrayIndex, in_nSize, (void*&)a.m_bitset.GetArrayRef(), (ULONG&)a.m_bitset.GetCountRef(), a.m_nStartbit );
00745 a.SetAsConstant( GetSubArrayConstant() );
00746 return a;
00747 }
00748
00749 SICPPSDK_INLINE ULONG CDataArray2D<bool>::GetCount() const
00750 {
00751 return m_nCount;
00752 }
00753
00754 SICPPSDK_INLINE bool CDataArray2D<bool>::IsConstant() const
00755 {
00756 return m_bIsConstant;
00757 }
00758
00759
00766
00767 class CDataArray2DCustomType : public CBaseDataArray2D
00768 {
00769 public:
00770
00771 typedef unsigned char TData;
00772
00773
00778
00779
00780 class Accessor
00781 {
00782 public:
00783 friend class CDataArray2DCustomType;
00784
00787 Accessor( ) : m_nAccessIndex(0), m_nCount(0), m_bIsConstant(false), m_pParent(NULL)
00788 {
00789 }
00790
00793 Accessor( const Accessor& in_accessor )
00794 {
00795 *this = in_accessor;
00796 }
00797
00802 Accessor& operator=( const Accessor& in_accessor )
00803 {
00804 m_nCount = in_accessor.m_nCount;
00805 m_nAccessIndex = in_accessor.m_nAccessIndex;
00806 m_bIsConstant = in_accessor.m_bIsConstant;
00807 m_pParent = in_accessor.m_pParent;
00808 return *this;
00809 }
00810
00819 SICPPSDK_INLINE CStatus SetData( ULONG in_nIndex, const TData* in_pData, ULONG in_nSize );
00820
00832 SICPPSDK_INLINE CStatus GetData( ULONG in_nIndex, const TData** out_ppData, ULONG& out_nSize ) const;
00833
00845 SICPPSDK_INLINE CStatus GetData( ULONG in_nIndex, TData** out_ppData, ULONG& out_nSize ) const;
00846
00853 SICPPSDK_INLINE TData* Resize( ULONG in_nIndex, ULONG in_nSize );
00854
00858 ULONG GetCount() const
00859 {
00860 return m_nCount;
00861 }
00862
00863 private:
00864 void SetAsConstant( bool in_bConst )
00865 {
00866 m_bIsConstant = in_bConst;
00867 }
00868
00869 void SetIndex( ULONG in_nIndex )
00870 {
00871 m_nAccessIndex = in_nIndex;
00872 }
00873
00874 void SetParent( CDataArray2DCustomType* in_pParent )
00875 {
00876 m_pParent = in_pParent;
00877 }
00878
00879 ULONG& GetCountRef()
00880 {
00881 return m_nCount;
00882 }
00883
00884 ULONG m_nAccessIndex;
00885 ULONG m_nCount;
00886 bool m_bIsConstant;
00887 CDataArray2DCustomType* m_pParent;
00888 };
00889
00895 SICPPSDK_INLINE CDataArray2DCustomType( ICENodeContext& in_ctxt, ULONG in_nInputPortID, ULONG in_nInstanceIndex=0 ) ;
00896
00900 SICPPSDK_INLINE CDataArray2DCustomType( ICENodeContext& in_ctxt ) ;
00901
00904 SICPPSDK_INLINE CDataArray2DCustomType( ) ;
00905
00908 SICPPSDK_INLINE ~CDataArray2DCustomType( );
00909
00926 SICPPSDK_INLINE CStatus CopyFrom( ULONG in_nInputPortID, ULONG in_nInstanceIndex=0 ) ;
00927
00933 SICPPSDK_INLINE Accessor operator[]( ULONG in_nArrayIndex ) const;
00934
00941 SICPPSDK_INLINE Accessor Resize( ULONG in_nArrayIndex, ULONG in_nSize );
00942
00946 SICPPSDK_INLINE ULONG GetCount() const;
00947
00951 SICPPSDK_INLINE bool IsConstant() const;
00952
00953 private:
00954 SICPPSDK_INLINE Accessor Get( ULONG in_nArrayIndex ) const;
00955 SICPPSDK_INLINE void Clear();
00956 static SICPPSDK_INLINE XSI::siICENodeDataType GetDefaultType( );
00957 };
00958
00959 SICPPSDK_INLINE CDataArray2DCustomType::CDataArray2DCustomType( ICENodeContext& in_ctxt, ULONG in_nInputPortID, ULONG in_nInstanceIndex )
00960 {
00961 m_ctxt = in_ctxt;
00962
00963 AcquireInputDataArray( GetDefaultType(), in_nInputPortID, in_nInstanceIndex );
00964 }
00965
00966 SICPPSDK_INLINE CDataArray2DCustomType::CDataArray2DCustomType( ICENodeContext& in_ctxt )
00967 {
00968 m_ctxt = in_ctxt;
00969
00970 AcquireOutputDataArray( GetDefaultType() );
00971 }
00972
00973 SICPPSDK_INLINE CDataArray2DCustomType::~CDataArray2DCustomType( )
00974 {
00975 ReleaseDataArray( );
00976 }
00977
00978 SICPPSDK_INLINE CDataArray2DCustomType::CDataArray2DCustomType( )
00979 {
00980 }
00981
00982 SICPPSDK_INLINE CStatus CDataArray2DCustomType::CopyFrom( ULONG in_nInputPortID, ULONG in_nInstanceIndex )
00983 {
00984 return CopyFromInputDataArray( GetDefaultType(), in_nInputPortID, in_nInstanceIndex );
00985 }
00986
00987 SICPPSDK_INLINE CDataArray2DCustomType::Accessor CDataArray2DCustomType::Get( ULONG in_nArrayIndex ) const
00988 {
00989 ULONG nNotused;
00990 void* pNotused;
00991
00992 Accessor a;
00993 GetSubArray( in_nArrayIndex, pNotused, (ULONG&)a.GetCountRef(), nNotused );
00994 a.SetParent( (CDataArray2DCustomType*)this );
00995 a.SetAsConstant( GetSubArrayConstant() );
00996 a.SetIndex( in_nArrayIndex );
00997 return a;
00998 }
00999
01000 SICPPSDK_INLINE CDataArray2DCustomType::Accessor CDataArray2DCustomType::operator[]( ULONG in_nArrayIndex ) const
01001 {
01002 return Get( in_nArrayIndex );
01003 }
01004
01005 SICPPSDK_INLINE CDataArray2DCustomType::Accessor CDataArray2DCustomType::Resize( ULONG in_nArrayIndex, ULONG in_nSize )
01006 {
01007 ULONG nNotused;
01008 void* pNotused;
01009
01010 Accessor a;
01011 ResizeSubArray( in_nArrayIndex, in_nSize, pNotused, (ULONG&)a.GetCountRef(), nNotused );
01012 a.SetParent( (CDataArray2DCustomType*)this );
01013 a.SetAsConstant( GetSubArrayConstant() );
01014 a.SetIndex( in_nArrayIndex );
01015 return a;
01016 }
01017
01018 SICPPSDK_INLINE void CDataArray2DCustomType::Clear()
01019 {
01020 ReleaseDataArray( );
01021 m_nHandle = UINT_MAX;
01022 m_nCount = 0;
01023 m_bIsConstant = false;
01024 }
01025
01026 SICPPSDK_INLINE ULONG CDataArray2DCustomType::GetCount() const
01027 {
01028 return m_nCount;
01029 }
01030
01031 SICPPSDK_INLINE bool CDataArray2DCustomType::IsConstant() const
01032 {
01033 return m_bIsConstant;
01034 }
01035
01036 SICPPSDK_INLINE CStatus CDataArray2DCustomType::Accessor::SetData( ULONG in_nIndex, const TData* in_pData, ULONG in_nSize )
01037 {
01038 return m_pParent->SetCustomTypeData2D( m_nAccessIndex, in_nIndex, in_pData, in_nSize );
01039 }
01040
01041 SICPPSDK_INLINE CStatus CDataArray2DCustomType::Accessor::GetData( ULONG in_nIndex, const TData** out_ppData, ULONG& out_nSize ) const
01042 {
01043 return m_pParent->GetCustomTypeData2D( m_nAccessIndex, in_nIndex, out_ppData, out_nSize );
01044 }
01045
01046 SICPPSDK_INLINE CStatus CDataArray2DCustomType::Accessor::GetData( ULONG in_nIndex, TData** out_ppData, ULONG& out_nSize ) const
01047 {
01048 return m_pParent->GetCustomTypeData2D( m_nAccessIndex, in_nIndex, out_ppData, out_nSize );
01049 }
01050
01051 SICPPSDK_INLINE CDataArray2DCustomType::TData* CDataArray2DCustomType::Accessor::Resize( ULONG in_nIndex, ULONG in_nSize )
01052 {
01053 return m_pParent->ResizeCustomTypeData2D( m_nAccessIndex, in_nIndex, in_nSize );
01054 }
01055
01056
01063
01064 class CDataArray2DString : public CBaseDataArray2D
01065 {
01066 public:
01067
01068 typedef wchar_t TData;
01069
01070
01075
01076
01077 class Accessor
01078 {
01079 public:
01080 friend class CDataArray2DString;
01081
01084 Accessor( ) : m_nAccessIndex(0), m_nCount(0), m_bIsConstant(false), m_pParent(NULL)
01085 {
01086 }
01087
01090 Accessor( const Accessor& in_accessor )
01091 {
01092 *this = in_accessor;
01093 }
01094
01099 Accessor& operator=( const Accessor& in_accessor )
01100 {
01101 m_nCount = in_accessor.m_nCount;
01102 m_nAccessIndex = in_accessor.m_nAccessIndex;
01103 m_bIsConstant = in_accessor.m_bIsConstant;
01104 m_pParent = in_accessor.m_pParent;
01105 return *this;
01106 }
01107
01113 SICPPSDK_INLINE CStatus SetData( ULONG in_nIndex, const CString& in_str );
01114
01120 SICPPSDK_INLINE CStatus GetData( ULONG in_nIndex, CString& out_str ) const;
01121
01127 SICPPSDK_INLINE CString operator[]( ULONG in_nIndex ) const;
01128
01136 SICPPSDK_INLINE CStatus SetData( ULONG in_nIndex, const TData* in_pStr, ULONG in_nSize );
01137
01151 SICPPSDK_INLINE CStatus GetData( ULONG in_nIndex, const TData** out_ppStr, ULONG& out_nCount ) const;
01152
01166 SICPPSDK_INLINE CStatus GetData( ULONG in_nIndex, TData** out_ppStr, ULONG& out_nCount ) const;
01167
01174 SICPPSDK_INLINE TData* Resize( ULONG in_nIndex, ULONG in_nCount );
01175
01179 ULONG GetCount() const
01180 {
01181 return m_nCount;
01182 }
01183
01184 private:
01185 void SetAsConstant( bool in_bConst )
01186 {
01187 m_bIsConstant = in_bConst;
01188 }
01189
01190 void SetIndex( ULONG in_nIndex )
01191 {
01192 m_nAccessIndex = in_nIndex;
01193 }
01194
01195 void SetParent( CDataArray2DString* in_pParent )
01196 {
01197 m_pParent = in_pParent;
01198 }
01199
01200 ULONG& GetCountRef()
01201 {
01202 return m_nCount;
01203 }
01204
01205 ULONG m_nAccessIndex;
01206 ULONG m_nCount;
01207 bool m_bIsConstant;
01208 CDataArray2DString* m_pParent;
01209 };
01210
01216 SICPPSDK_INLINE CDataArray2DString( ICENodeContext& in_ctxt, ULONG in_nInputPortID, ULONG in_nInstanceIndex=0 ) ;
01217
01221 SICPPSDK_INLINE CDataArray2DString( ICENodeContext& in_ctxt ) ;
01222
01225 SICPPSDK_INLINE CDataArray2DString( ) ;
01226
01229 SICPPSDK_INLINE ~CDataArray2DString( );
01230
01247 SICPPSDK_INLINE CStatus CopyFrom( ULONG in_nInputPortID, ULONG in_nInstanceIndex=0 ) ;
01248
01254 SICPPSDK_INLINE Accessor operator[]( ULONG in_nArrayIndex ) const;
01255
01262 SICPPSDK_INLINE Accessor Resize( ULONG in_nArrayIndex, ULONG in_nCount );
01263
01267 SICPPSDK_INLINE ULONG GetCount() const;
01268
01272 SICPPSDK_INLINE bool IsConstant() const;
01273
01274 private:
01275 SICPPSDK_INLINE Accessor Get( ULONG in_nArrayIndex ) const;
01276 SICPPSDK_INLINE void Clear();
01277 static SICPPSDK_INLINE XSI::siICENodeDataType GetDefaultType( );
01278 };
01279
01280 SICPPSDK_INLINE CDataArray2DString::CDataArray2DString( ICENodeContext& in_ctxt, ULONG in_nInputPortID, ULONG in_nInstanceIndex )
01281 {
01282 m_ctxt = in_ctxt;
01283
01284 AcquireInputDataArray( GetDefaultType(), in_nInputPortID, in_nInstanceIndex );
01285 }
01286
01287 SICPPSDK_INLINE CDataArray2DString::CDataArray2DString( ICENodeContext& in_ctxt )
01288 {
01289 m_ctxt = in_ctxt;
01290
01291 AcquireOutputDataArray( GetDefaultType() );
01292 }
01293
01294 SICPPSDK_INLINE CDataArray2DString::~CDataArray2DString( )
01295 {
01296 ReleaseDataArray( );
01297 }
01298
01299 SICPPSDK_INLINE CDataArray2DString::CDataArray2DString( )
01300 {
01301 }
01302
01303 SICPPSDK_INLINE CStatus CDataArray2DString::CopyFrom( ULONG in_nInputPortID, ULONG in_nInstanceIndex )
01304 {
01305 return CopyFromInputDataArray( GetDefaultType(), in_nInputPortID, in_nInstanceIndex );
01306 }
01307
01308 SICPPSDK_INLINE CDataArray2DString::Accessor CDataArray2DString::Get( ULONG in_nArrayIndex ) const
01309 {
01310 ULONG nNotused;
01311 void* pNotused;
01312
01313 Accessor a;
01314 GetSubArray( in_nArrayIndex, pNotused, (ULONG&)a.GetCountRef(), nNotused );
01315 a.SetParent( (CDataArray2DString*)this );
01316 a.SetAsConstant( GetSubArrayConstant() );
01317 a.SetIndex( in_nArrayIndex );
01318 return a;
01319 }
01320
01321 SICPPSDK_INLINE CDataArray2DString::Accessor CDataArray2DString::operator[]( ULONG in_nArrayIndex ) const
01322 {
01323 return Get( in_nArrayIndex );
01324 }
01325
01326 SICPPSDK_INLINE CDataArray2DString::Accessor CDataArray2DString::Resize( ULONG in_nArrayIndex, ULONG in_nSize )
01327 {
01328 ULONG nNotused;
01329 void* pNotused;
01330
01331 Accessor a;
01332 ResizeSubArray( in_nArrayIndex, in_nSize, pNotused, (ULONG&)a.GetCountRef(), nNotused );
01333 a.SetParent( (CDataArray2DString*)this );
01334 a.SetAsConstant( GetSubArrayConstant() );
01335 a.SetIndex( in_nArrayIndex );
01336 return a;
01337 }
01338
01339 SICPPSDK_INLINE void CDataArray2DString::Clear()
01340 {
01341 ReleaseDataArray( );
01342 m_nHandle = UINT_MAX;
01343 m_nCount = 0;
01344 m_bIsConstant = false;
01345 }
01346
01347 SICPPSDK_INLINE ULONG CDataArray2DString::GetCount() const
01348 {
01349 return m_nCount;
01350 }
01351
01352 SICPPSDK_INLINE bool CDataArray2DString::IsConstant() const
01353 {
01354 return m_bIsConstant;
01355 }
01356
01357 SICPPSDK_INLINE CStatus CDataArray2DString::Accessor::SetData( ULONG in_nIndex, const CString& in_str )
01358 {
01359 return m_pParent->SetStringData2D( m_nAccessIndex, in_nIndex, in_str.GetWideString(), in_str.Length() );
01360 }
01361
01362 SICPPSDK_INLINE CStatus CDataArray2DString::Accessor::GetData( ULONG in_nIndex, CString& out_str ) const
01363 {
01364 const wchar_t* pzStr;
01365 ULONG nSize;
01366 CStatus st = m_pParent->GetStringData2D( m_nAccessIndex, in_nIndex, &pzStr, nSize );
01367 out_str = CString(pzStr,nSize);
01368 return st;
01369 }
01370
01371 SICPPSDK_INLINE CString CDataArray2DString::Accessor::operator[]( ULONG i ) const
01372 {
01373 CString str;
01374 GetData( i, str );
01375 return str;
01376 }
01377
01378 SICPPSDK_INLINE CStatus CDataArray2DString::Accessor::SetData( ULONG in_nIndex, const TData* in_pData, ULONG in_nSize )
01379 {
01380 return m_pParent->SetStringData2D( m_nAccessIndex, in_nIndex, in_pData, in_nSize );
01381 }
01382
01383 SICPPSDK_INLINE CStatus CDataArray2DString::Accessor::GetData( ULONG in_nIndex, const TData** out_ppData, ULONG& out_nSize ) const
01384 {
01385 return m_pParent->GetStringData2D( m_nAccessIndex, in_nIndex, out_ppData, out_nSize );
01386 }
01387
01388 SICPPSDK_INLINE CStatus CDataArray2DString::Accessor::GetData( ULONG in_nIndex, TData** out_ppData, ULONG& out_nSize ) const
01389 {
01390 return m_pParent->GetStringData2D( m_nAccessIndex, in_nIndex, out_ppData, out_nSize );
01391 }
01392
01393 SICPPSDK_INLINE CDataArray2DString::TData* CDataArray2DString::Accessor::Resize( ULONG in_nIndex, ULONG in_nSize )
01394 {
01395 return m_pParent->ResizeStringData2D( m_nAccessIndex, in_nIndex, in_nSize );
01396 }
01397
01398
01476 typedef CDataArray2D< float > CDataArray2DFloat;
01477 typedef CDataArray2D< LONG > CDataArray2DLong;
01478 typedef CDataArray2D< bool > CDataArray2DBool;
01479 typedef CDataArray2D< XSI::MATH::CVector2f > CDataArray2DVector2f;
01480 typedef CDataArray2D< XSI::MATH::CVector3f > CDataArray2DVector3f;
01481 typedef CDataArray2D< XSI::MATH::CVector4f > CDataArray2DVector4f;
01482 typedef CDataArray2D< XSI::MATH::CQuaternionf > CDataArray2DQuaternionf;
01483 typedef CDataArray2D< XSI::MATH::CRotationf > CDataArray2DRotationf;
01484 typedef CDataArray2D< XSI::MATH::CMatrix3f > CDataArray2DMatrix3f;
01485 typedef CDataArray2D< XSI::MATH::CMatrix4f > CDataArray2DMatrix4f;
01486 typedef CDataArray2D< XSI::MATH::CColor4f > CDataArray2DColor4f;
01487 typedef XSI::CDataArray2D< XSI::MATH::CShape> CDataArray2DShape;
01488
01489 template<> SICPPSDK_INLINE siICENodeDataType CDataArray2DFloat::GetDefaultType( ){return siICENodeDataFloat;}
01490 SICPPSDK_INLINE siICENodeDataType CDataArray2DBool::GetDefaultType( ){return siICENodeDataBool;}
01491 template<> SICPPSDK_INLINE siICENodeDataType CDataArray2DLong::GetDefaultType( ){return siICENodeDataLong;}
01492 template<> SICPPSDK_INLINE siICENodeDataType CDataArray2DVector2f::GetDefaultType( ){return siICENodeDataVector2;}
01493 template<> SICPPSDK_INLINE siICENodeDataType CDataArray2DVector3f::GetDefaultType( ){return siICENodeDataVector3;}
01494 template<> SICPPSDK_INLINE siICENodeDataType CDataArray2DVector4f::GetDefaultType( ){return siICENodeDataVector4;}
01495 template<> SICPPSDK_INLINE siICENodeDataType CDataArray2DQuaternionf::GetDefaultType( ){return siICENodeDataQuaternion;}
01496 template<> SICPPSDK_INLINE siICENodeDataType CDataArray2DMatrix3f::GetDefaultType( ){return siICENodeDataMatrix33;}
01497 template<> SICPPSDK_INLINE siICENodeDataType CDataArray2DMatrix4f::GetDefaultType( ){return siICENodeDataMatrix44;}
01498 template<> SICPPSDK_INLINE siICENodeDataType CDataArray2DColor4f::GetDefaultType( ){return siICENodeDataColor4;}
01499 template<> SICPPSDK_INLINE siICENodeDataType CDataArray2DRotationf::GetDefaultType( ){return siICENodeDataRotation;}
01500 template<> SICPPSDK_INLINE XSI::siICENodeDataType CDataArray2DShape::GetDefaultType( ){return siICENodeDataShape;}
01501 SICPPSDK_INLINE XSI::siICENodeDataType CDataArray2DCustomType::GetDefaultType( ){return siICENodeDataCustomType;}
01502 SICPPSDK_INLINE XSI::siICENodeDataType CDataArray2DString::GetDefaultType( ){return siICENodeDataString;}
01503 };
01504
01505 #endif // __XSIDATAARRAY2D_H__