00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
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
00269
00270 friend class vtkThreadedController;
00271
00272
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
00391
00392
00393
00394
00395
00396
00397
00398
00399
00403 #endif // __vtkSharedMemoryCommunicator_h