Version: 9.16.0
Receivers.hxx
Go to the documentation of this file.
1// Copyright (C) 2007-2026 CEA, EDF, OPEN CASCADE
2//
3// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5//
6// This library is free software; you can redistribute it and/or
7// modify it under the terms of the GNU Lesser General Public
8// License as published by the Free Software Foundation; either
9// version 2.1 of the License, or (at your option) any later version.
10//
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14// Lesser General Public License for more details.
15//
16// You should have received a copy of the GNU Lesser General Public
17// License along with this library; if not, write to the Free Software
18// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19//
20// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21//
22
23#ifndef _RECEIVERS_HXX_
24#define _RECEIVERS_HXX_
25
26#ifdef HAVE_MPI2
27#include "mpi.h"
28#endif
29#include "SALOME_Comm_i.hxx"
30#include "Receiver.hxx"
31
35template<class T,class TCorba,class TSeqCorba,class CorbaSender,class servForT,class ptrForT>
36class CorbaNCNoCopyReceiver : public Receiver<T,servForT,ptrForT>
37{
38private:
39 CorbaSender _mySender;
40public:
41 CorbaNCNoCopyReceiver(CorbaSender mySender);
43 T *getValue(long &size);
44private:
45 T *getDistValue(long &size);
46};
47
51template<class T,class TCorba,class TSeqCorba,class CorbaSender,class servForT,class ptrForT>
52class CorbaNCWithCopyReceiver : public Receiver<T,servForT,ptrForT>
53{
54private:
55 CorbaSender _mySender;
56public:
57 CorbaNCWithCopyReceiver(CorbaSender mySender);
59 T *getValue(long &size);
60private:
61 T *getDistValue(long &size);
62};
63
67template<class T,class TCorba,class TSeqCorba,class CorbaSender,class servForT,class ptrForT>
68class CorbaWCNoCopyReceiver : public Receiver<T,servForT,ptrForT>
69{
70private:
71 CorbaSender _mySender;
72public:
73 CorbaWCNoCopyReceiver(CorbaSender mySender);
75 T *getValue(long &size);
76private:
77 T *getDistValue(long &size);
78};
79
83template<class T,class TCorba,class TSeqCorba,class CorbaSender,class servForT,class ptrForT>
84class CorbaWCWithCopyReceiver : public Receiver<T,servForT,ptrForT>
85{
86private:
87 CorbaSender _mySender;
88public:
89 CorbaWCWithCopyReceiver(CorbaSender mySender);
91 T *getValue(long &size);
92private:
93 T *getDistValue(long &size);
94};
95
96#ifdef HAVE_MPI2
100template<class T>
101struct MPITRAITS
102{
103 static MPI_Datatype MpiType;
104};
105
106template<>
107MPI_Datatype MPITRAITS<double>::MpiType=MPI_DOUBLE;
108
109template<>
110MPI_Datatype MPITRAITS<int>::MpiType=MPI_INT;
111
112template<class T,class CorbaSender,class servForT,class ptrForT>
113class MPIReceiver : public Receiver<T,servForT,ptrForT>
114{
115private:
116 CorbaSender _mySender;
117public:
118 MPIReceiver(CorbaSender mySender);
119 ~MPIReceiver();
120 T *getValue(long &size);
121private:
122 T *getDistValue(long &size);
123};
124#endif
125
126#ifdef HAVE_SOCKET
127
128class XDR;
129
133template<class T,int (*myFunc)(XDR*,T*),class CorbaSender,class servForT,class ptrForT>
134class SocketReceiver : public Receiver<T,servForT,ptrForT>
135{
136private:
137 CorbaSender _mySender;
138 int _clientSockfd;
139 bool _senderDestruc;
140public:
141 SocketReceiver(CorbaSender mySender);
142 ~SocketReceiver();
143 T *getValue(long &size);
144private:
145 T *getDistValue(long &size);
146 void initCom();
147 void connectCom(const char *, int);
148 void closeCom();
149};
150#endif
151
152#include "Receivers.cxx"
153
154#endif
155
Receiver used for transfert with CORBA when no copy is required remotely and locally.
Definition: Receivers.hxx:37
CorbaSender _mySender
Definition: Receivers.hxx:39
CorbaNCNoCopyReceiver(CorbaSender mySender)
Definition: Receivers.cxx:31
~CorbaNCNoCopyReceiver()
Definition: Receivers.cxx:35
T * getValue(long &size)
Definition: Receivers.cxx:48
T * getDistValue(long &size)
Definition: Receivers.cxx:40
Receiver used for transfert with CORBA when copy is not required remotely but required locally.
Definition: Receivers.hxx:53
CorbaNCWithCopyReceiver(CorbaSender mySender)
Definition: Receivers.cxx:54
~CorbaNCWithCopyReceiver()
Definition: Receivers.cxx:58
T * getValue(long &size)
Definition: Receivers.cxx:83
T * getDistValue(long &size)
Definition: Receivers.cxx:63
CorbaSender _mySender
Definition: Receivers.hxx:55
Receiver used for transfert with CORBA when copy is required remotely but not required locally.
Definition: Receivers.hxx:69
CorbaSender _mySender
Definition: Receivers.hxx:71
T * getDistValue(long &size)
Definition: Receivers.cxx:98
CorbaWCNoCopyReceiver(CorbaSender mySender)
Definition: Receivers.cxx:89
T * getValue(long &size)
Definition: Receivers.cxx:118
~CorbaWCNoCopyReceiver()
Definition: Receivers.cxx:93
Receiver used for transfert with CORBA when copy is required both remotely and locally.
Definition: Receivers.hxx:85
~CorbaWCWithCopyReceiver()
Definition: Receivers.cxx:128
CorbaWCWithCopyReceiver(CorbaSender mySender)
Definition: Receivers.cxx:124
T * getDistValue(long &size)
Definition: Receivers.cxx:133
CorbaSender _mySender
Definition: Receivers.hxx:87
T * getValue(long &size)
Definition: Receivers.cxx:153
Abstract class factorizing common methods of all the receivers.
Definition: Receiver.hxx:32
virtual T * getValue(long &size)=0
virtual T * getDistValue(long &size)=0