xsi_icenodecontext.h Source File
 
 
 
xsi_icenodecontext.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 __XSIICENODECONTEXT_H__
00018 #define __XSIICENODECONTEXT_H__
00019 
00020 #include <xsi_context.h>
00021 #include <xsi_time.h>
00022 #include <xsi_longarray.h>
00023 
00024 namespace XSI {
00025 
00026 class CStatus;
00027 class CBaseDataArray;
00028 class CBaseDataArray2D;
00029 class CIndexSet;
00030 
00031 //*****************************************************************************
00040 //*****************************************************************************
00041 
00042 class SICPPSDKDECL ICENodeContext : public Context
00043 {
00044 public:
00045 
00046         friend class CBaseDataArray;
00047         friend class CBaseDataArray2D;
00048         friend class CIndexSet;
00049         friend class CICEGeometry;
00050         friend class CICEPortState;
00051 
00053         ICENodeContext();
00054 
00056         ~ICENodeContext();
00057 
00061         ICENodeContext(const CRef& in_ref);
00062 
00066         ICENodeContext(const ICENodeContext& in_obj);
00067 
00072         bool IsA( siClassID in_ClassID) const;
00073 
00077         siClassID GetClassID() const;
00078 
00083         ICENodeContext& operator=(const ICENodeContext& in_obj);
00084 
00090         ICENodeContext& operator=(const CRef& in_ref);
00091 
00097         CStatus GetGroupInstanceCount( ULONG in_grpUniqID, ULONG& out_inst_count ) const;
00098 
00102         ULONG GetEvaluationThreadCount( ) const;
00103 
00109         ULONG GetCurrentThreadIndex( ) const;
00110 
00117         ULONG GetNumberOfElementsToProcess( ) const;
00118 
00146         CStatus PutNumberOfElementsToProcess( ULONG in_nElements );
00147 
00155         CStatus GetPortInfo( ULONG in_nPortID, siICENodeDataType& out_type, siICENodeStructureType& out_struct, siICENodeContextType& out_context ) const;
00156 
00166         CStatus GetPortInfo(    ULONG in_nPortID,
00167                                                         siICENodeDataType& out_type,
00168                                                         siICENodeStructureType& out_struct,
00169                                                         siICENodeContextType& out_context,
00170                                                         CString& out_customDataType ) const;
00171 
00175         ULONG GetEvaluatedOutputPortID( ) const;
00176 
00181         CTime GetTime() const;
00182 
00190         ULONG GetEvaluationPhaseIndex( ) const;
00191 
00199         CStatus SetLastEvaluationPhase( );
00200 
00221         CStatus AddEvaluationPhaseInputPort( ULONG in_portid, const XSI::CLongArray& in_portInstances=XSI::CLongArray() );
00222 
00235         CStatus SetAsElementDataVarying( );
00236 
00242         CStatus SetAsTimeVarying( );
00243 
00244         private:
00245 
00246         // API for handling the data array
00247         CStatus AcquireIndexSet( CIndexSet& io_set ) const;
00248         CStatus AcquireIndexSetFromPort( CIndexSet& io_set, ULONG in_nInputPortID, ULONG in_nInstanceIndex ) const;
00249         CStatus ReleaseIndexSet( CIndexSet& io_set );
00250         CStatus RemoveElementFromIndexSet( CIndexSet& io_set, LONG in_index, LONG& out_nNewIndex, bool& out_bEnd );
00251         CStatus GetFilteredCountFromIndexSet( const CIndexSet& in_set, ULONG& out_ulCount ) const;
00252         CStatus AcquireInputDataArray( CBaseDataArray& io_dataArray, siICENodeDataType in_requiredDataType, ULONG in_port_uniq_index, ULONG in_grp_instance_index ) const;
00253         CStatus CopyFromInputDataArray( CBaseDataArray& io_dataArray, siICENodeDataType in_requiredDataType, ULONG in_port_uniq_index, ULONG in_grp_instance_index ) const;
00254         CStatus AcquireOutputDataArray( CBaseDataArray& io_dataArray, siICENodeDataType in_requiredDataType ) const;
00255         CStatus ReleaseDataArray( CBaseDataArray& io_dataArray );
00256 
00257         CStatus SetCustomTypeData( CBaseDataArray& io_dataArray, ULONG in_nArrayIndex, const unsigned char* in_ptr, ULONG in_nSize );
00258         CStatus GetCustomTypeData( CBaseDataArray& io_dataArray, ULONG in_nArrayIndex, const unsigned char** out_pptr, ULONG& out_nSize ) const;
00259         CStatus GetCustomTypeData( CBaseDataArray& io_dataArray, ULONG in_nArrayIndex, unsigned char** out_pptr, ULONG& out_nSize ) const;
00260         unsigned char* ResizeCustomTypeData( CBaseDataArray& io_dataArray, ULONG in_index, ULONG in_nSize );
00261 
00262         CStatus SetStringData( CBaseDataArray& io_dataArray, ULONG in_nArrayIndex, const wchar_t* in_ptr, ULONG in_nSize );
00263         CStatus GetStringData( CBaseDataArray& io_dataArray, ULONG in_nArrayIndex, const wchar_t** out_pptr, ULONG& out_nSize ) const;
00264         CStatus GetStringData( CBaseDataArray& io_dataArray, ULONG in_nArrayIndex, wchar_t** out_pptr, ULONG& out_nSize ) const;
00265         wchar_t* ResizeStringData( CBaseDataArray& io_dataArray, ULONG in_index, ULONG in_nSize );
00266 
00267         // API for handling the 2D data array
00268         CStatus AcquireInputDataArray2D( CBaseDataArray2D& io_dataArray, siICENodeDataType in_requiredDataType, ULONG in_port_uniq_index, ULONG in_grp_instance_index ) const;
00269         CStatus CopyFromInputDataArray2D( CBaseDataArray2D& io_dataArray, siICENodeDataType in_requiredDataType, ULONG in_port_uniq_index, ULONG in_grp_instance_index ) const;
00270         CStatus AcquireOutputDataArray2D( CBaseDataArray2D& io_dataArray, siICENodeDataType in_requiredDataType ) const;
00271         CStatus ResizeSubArray( CBaseDataArray2D& io_dataArray, ULONG in_nArrayIndex, ULONG in_nSize, void*& out_ppData, ULONG& out_nCount, ULONG& out_nStartBit ) ;
00272         CStatus GetSubArray( CBaseDataArray2D& io_dataArray, ULONG in_nArrayIndex, void*& out_ppData, ULONG& out_nCount, ULONG& out_nStartBit ) const;
00273 
00274         CStatus SetCustomTypeData2D( CBaseDataArray& io_dataArray, ULONG in_nAccessIndex, ULONG in_nArrayIndex, const unsigned char* in_ptr, ULONG in_nSize );
00275         CStatus GetCustomTypeData2D( CBaseDataArray& io_dataArray, ULONG in_nAccessIndex,       ULONG in_nArrayIndex, const unsigned char**     out_pptr, ULONG& out_nSize ) const;
00276         CStatus GetCustomTypeData2D( CBaseDataArray& io_dataArray, ULONG in_nAccessIndex,       ULONG in_nArrayIndex, unsigned char**   out_pptr, ULONG& out_nSize ) const;
00277         unsigned char* ResizeCustomTypeData2D( CBaseDataArray& io_dataArray, ULONG in_nAccessIndex, ULONG in_nArrayIndex, ULONG in_nSize );
00278 
00279         CStatus SetStringData2D( CBaseDataArray& io_dataArray, ULONG in_nAccessIndex, ULONG in_nArrayIndex, const wchar_t* in_ptr, ULONG in_nCount );
00280         CStatus GetStringData2D( CBaseDataArray& io_dataArray, ULONG in_nAccessIndex,   ULONG in_nArrayIndex, const wchar_t**   out_pptr, ULONG& out_nCount ) const;
00281         CStatus GetStringData2D( CBaseDataArray& io_dataArray, ULONG in_nAccessIndex,   ULONG in_nArrayIndex, wchar_t** out_pptr, ULONG& out_nCount ) const;
00282         wchar_t* ResizeStringData2D( CBaseDataArray& io_dataArray, ULONG in_nAccessIndex, ULONG in_nArrayIndex, ULONG in_nCount );
00283 
00284         ICENodeContext * operator&() const;
00285         ICENodeContext * operator&();
00286 };
00287 
00288 };
00289 #endif // __XSIICENODECONTEXT_H__