Salome HOME
c4309b754a3fa082c66d5df09c19a40426a726e0
[modules/kernel.git] / src / Communication / Receivers.hxx
1 #ifndef _RECEIVERS_HXX_
2 #define _RECEIVERS_HXX_
3
4 #include "SALOME_Comm_i.hxx"
5 #include "Receiver.hxx"
6 #ifdef HAVE_MPI2
7 #include "mpi.h"
8 #endif
9
10 /*!
11   Receiver used for transfert with CORBA when no copy is required remotely and locally.
12  */
13 template<class T,class TCorba,class TSeqCorba,class CorbaSender,class servForT,class ptrForT>
14 class CorbaNCNoCopyReceiver : public Receiver<T,servForT,ptrForT>
15 {
16 private:
17   CorbaSender _mySender;
18 public:
19   CorbaNCNoCopyReceiver(CorbaSender mySender);
20   ~CorbaNCNoCopyReceiver();
21   T *getValue(long &size);
22 private:
23   T *getDistValue(long &size);
24 };
25
26 /*!
27   Receiver used for transfert with CORBA when copy is not required remotely but required locally.
28  */
29 template<class T,class TCorba,class TSeqCorba,class CorbaSender,class servForT,class ptrForT>
30 class CorbaNCWithCopyReceiver : public Receiver<T,servForT,ptrForT>
31 {
32 private:
33   CorbaSender _mySender;
34 public:
35   CorbaNCWithCopyReceiver(CorbaSender mySender);
36   ~CorbaNCWithCopyReceiver();
37   T *getValue(long &size);
38 private:
39   T *getDistValue(long &size);
40 };
41
42 /*!
43   Receiver used for transfert with CORBA when copy is required remotely but not required locally.
44  */
45 template<class T,class TCorba,class TSeqCorba,class CorbaSender,class servForT,class ptrForT>
46 class CorbaWCNoCopyReceiver : public Receiver<T,servForT,ptrForT>
47 {
48 private:
49   CorbaSender  _mySender;
50 public:
51   CorbaWCNoCopyReceiver(CorbaSender mySender);
52   ~CorbaWCNoCopyReceiver();
53   T *getValue(long &size);
54 private:
55   T *getDistValue(long &size);
56 };
57
58 /*!
59   Receiver used for transfert with CORBA when copy is required both remotely and locally.
60  */
61 template<class T,class TCorba,class TSeqCorba,class CorbaSender,class servForT,class ptrForT>
62 class CorbaWCWithCopyReceiver : public Receiver<T,servForT,ptrForT>
63 {
64 private:
65   CorbaSender _mySender;
66 public:
67   CorbaWCWithCopyReceiver(CorbaSender mySender);
68   ~CorbaWCWithCopyReceiver();
69   T *getValue(long &size);
70 private:
71   T *getDistValue(long &size);
72 };
73
74 #ifdef HAVE_MPI2
75 /*!
76   Receiver for MPI transfert.
77  */
78 template<class T,MPI_Datatype T2,class CorbaSender,class servForT,class ptrForT>
79 class MPIReceiver : public Receiver<T,servForT,ptrForT>
80 {
81 private:
82   CorbaSender _mySender;
83 public:
84   MPIReceiver(CorbaSender mySender);
85   ~MPIReceiver();
86   T *getValue(long &size);
87 private:
88   T *getDistValue(long &size);
89 };
90 #endif
91
92 #ifdef HAVE_SOCKET
93
94 class XDR;
95
96 /*!
97   Receiver for transfert with sockets.
98  */
99 template<class T,int (*myFunc)(XDR*,T*),class CorbaSender,class servForT,class ptrForT>
100 class SocketReceiver : public Receiver<T,servForT,ptrForT>
101 {
102 private:
103   CorbaSender _mySender;
104   int _clientSockfd;
105   bool _senderDestruc;
106 public:
107   SocketReceiver(CorbaSender mySender);
108   ~SocketReceiver();
109   T *getValue(long &size);
110 private:
111   T *getDistValue(long &size);
112   void initCom();
113   void connectCom(const char *, int);
114   void closeCom();
115 };
116 #endif
117
118 #include "Receivers.cxx"
119
120 #endif
121