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__