vtkSharedMemoryCommunicator.h

Go to the documentation of this file.
00001 /* $Id: vtkSharedMemoryCommunicator.h,v 1.2 2008/09/26 02:46:13 pfb Exp $ */
00002 /*=========================================================================
00003 
00004   Program:   Visualization Toolkit
00005   Module:    $RCSfile: vtkSharedMemoryCommunicator.h,v $
00006 
00007   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00008   All rights reserved.
00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00010 
00011      This software is distributed WITHOUT ANY WARRANTY; without even
00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00013      PURPOSE.  See the above copyright notice for more information.
00014 
00015 =========================================================================*/
00016 
00017 #ifndef __vtkSharedMemoryCommunicator_h
00018 #define __vtkSharedMemoryCommunicator_h
00019 
00024 #include "vtkCommunicator.h"
00025 
00026 class vtkThreadedController;
00027 class vtkSharedMemoryCommunicatorMessage;
00028 class vtkSimpleCriticalSection;
00029 class vtkThreadMessager;
00030 
00049 class VTK_PARALLEL_EXPORT vtkSharedMemoryCommunicator : public vtkCommunicator
00050   {
00051   /****************************************************************************/
00052                              public:
00053   vtkTypeRevisionMacro( vtkSharedMemoryCommunicator,vtkCommunicator);
00054  
00060   static vtkSharedMemoryCommunicator* New();
00061 
00067   virtual void PrintSelf(ostream& os, vtkIndent indent);
00068 
00077   virtual int Send(int* data, int length, int remoteThreadId, int tag);
00078 
00087   virtual int Send(unsigned long* data, int length, int remoteThreadId, 
00088                    int tag);
00089 
00098   virtual int Send(char* data, int length, int remoteThreadId, int tag);
00099 
00108   virtual int Send(unsigned char* data, int length, int remoteThreadId, int tag);
00109 
00118   virtual int Send(float* data, int length, int remoteThreadId, int tag);
00119 
00128   virtual int Send(double* data, int length, int remoteThreadId, int tag);
00129 #ifdef VTK_USE_64BIT_IDS
00130 
00138   virtual int Send(vtkIdType* data, int length, int remoteThreadId, int tag);
00139 #endif
00140 
00149   virtual int Send(vtkDataObject* data, int remoteThreadId, int tag);
00150 
00159   virtual int Send(vtkDataArray* data, int remoteThreadId, int tag);
00160 
00170   virtual int Receive(int* data, int length, int remoteThreadId, 
00171                       int tag);
00172 
00182   virtual int Receive(unsigned long* data, int length, 
00183                       int remoteThreadId, int tag);
00184 
00194   virtual int Receive(char* data, int length, int remoteThreadId, 
00195                       int tag);
00196 
00206   virtual int Receive(unsigned char* data, int length, int remoteThreadId, 
00207                       int tag);
00208 
00218   virtual int Receive(float* data, int length, int remoteThreadId, 
00219                       int tag);
00220 
00230   virtual int Receive(double* data, int length, int remoteThreadId, 
00231                       int tag);
00232 #ifdef VTK_USE_64BIT_IDS
00233 
00242   virtual int Receive(vtkIdType* data, int length, int remoteThreadId, 
00243                       int tag);
00244 #endif
00245 
00255   virtual int Receive(vtkDataObject *data, int remoteThreadId, int tag);
00256 
00266   virtual int Receive(vtkDataArray *data, int remoteThreadId, int tag);
00267 
00268 //BTX
00269 
00270   friend class vtkThreadedController;
00271 
00272 //ETX
00273 
00274   /****************************************************************************/
00275                              protected:
00276 
00277   int NumberOfThreads;
00278   int Initialized;
00279   void Initialize(int nThreads, int forceDeepCopy);
00280 
00281   int LocalThreadId;
00282   int WaitingForId;
00283 
00284   int ForceDeepCopy;
00285 
00291   vtkSimpleCriticalSection* MessageListLock;
00292 
00293 
00297   vtkSharedMemoryCommunicator** Communicators;
00298 
00299   vtkSharedMemoryCommunicator* Parent;
00300   
00304   vtkSharedMemoryCommunicatorMessage *MessageListStart;
00305   vtkSharedMemoryCommunicatorMessage *MessageListEnd;
00306 
00310   vtkSharedMemoryCommunicator();
00311 
00315   ~vtkSharedMemoryCommunicator();
00316 
00325   int Send(vtkDataObject* object, void *data, int dataLength, 
00326            int remoteThreadId, int tag);
00327 
00337   int Receive(vtkDataObject* object, void *data, int dataLength, 
00338               int remoteThreadId, int tag);
00339 
00348   int Send(vtkDataArray* object, int dataLength, 
00349            int remoteThreadId, int tag);
00350 
00360   int Receive(vtkDataArray* object, int dataLength, 
00361               int remoteThreadId, int tag);
00362 
00363   vtkSharedMemoryCommunicatorMessage* NewMessage(vtkDataObject* object,
00364                                                  void* data, 
00365                                                  int dataLength);
00366   vtkSharedMemoryCommunicatorMessage* NewMessage(vtkDataArray* object,
00367                                                  void* data, 
00368                                                  int dataLength);
00369   void DeleteMessage(vtkSharedMemoryCommunicatorMessage *message);
00370   void AddMessage(vtkSharedMemoryCommunicatorMessage *message);
00371   vtkSharedMemoryCommunicatorMessage* FindMessage(int sendId, int tag);
00372 
00373   vtkThreadMessager* Messager;
00374 
00375   void SignalNewMessage(vtkSharedMemoryCommunicator* receiveCommunicator);
00376 
00377   void WaitForNewMessage();
00378 
00379   /****************************************************************************/
00380                              private:
00381 
00385   vtkSharedMemoryCommunicator(const vtkSharedMemoryCommunicator&);
00386   void operator=(const vtkSharedMemoryCommunicator&);
00387   };
00388 
00389 /*
00390  * $Log: vtkSharedMemoryCommunicator.h,v $
00391  * Revision 1.2  2008/09/26 02:46:13  pfb
00392  * Added note about depreciation.
00393  *
00394  * Revision 1.1  2006/03/22 13:09:31  pfb
00395  * Initial rev.
00396  *
00397  *
00398  */
00399 
00403 #endif //  __vtkSharedMemoryCommunicator_h