X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FCommunication%2FReceivers.hxx;h=2dd44a854c9db69f4c01fafb2c6edaa6ffa8ee71;hb=ec64825655b99b08182ef682868ccb732edb3c2a;hp=4fd2581ee0a9e313f3556882976d78137c130327;hpb=5d2351ab498f7367b46d26f0371fe841a6960f15;p=modules%2Fkernel.git diff --git a/src/Communication/Receivers.hxx b/src/Communication/Receivers.hxx index 4fd2581ee..2dd44a854 100644 --- a/src/Communication/Receivers.hxx +++ b/src/Communication/Receivers.hxx @@ -1,91 +1,122 @@ +// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ +// #ifndef _RECEIVERS_HXX_ #define _RECEIVERS_HXX_ -#include "SALOME_Comm_i.hxx" -#include "Receiver.hxx" #ifdef HAVE_MPI2 #include "mpi.h" #endif +#include "SALOME_Comm_i.hxx" +#include "Receiver.hxx" /*! Receiver used for transfert with CORBA when no copy is required remotely and locally. */ -template -class CorbaNCNoCopyReceiver : public Receiver +template +class CorbaNCNoCopyReceiver : public Receiver { private: CorbaSender _mySender; public: CorbaNCNoCopyReceiver(CorbaSender mySender); ~CorbaNCNoCopyReceiver(); - void *getValue(long &size); + T *getValue(long &size); private: - void *getDistValue(long &size); + T *getDistValue(long &size); }; /*! Receiver used for transfert with CORBA when copy is not required remotely but required locally. */ -template -class CorbaNCWithCopyReceiver : public Receiver +template +class CorbaNCWithCopyReceiver : public Receiver { private: CorbaSender _mySender; public: CorbaNCWithCopyReceiver(CorbaSender mySender); ~CorbaNCWithCopyReceiver(); - void *getValue(long &size); + T *getValue(long &size); private: - void *getDistValue(long &size); + T *getDistValue(long &size); }; /*! Receiver used for transfert with CORBA when copy is required remotely but not required locally. */ -template -class CorbaWCNoCopyReceiver : public Receiver +template +class CorbaWCNoCopyReceiver : public Receiver { private: CorbaSender _mySender; public: CorbaWCNoCopyReceiver(CorbaSender mySender); ~CorbaWCNoCopyReceiver(); - void *getValue(long &size); + T *getValue(long &size); private: - void *getDistValue(long &size); + T *getDistValue(long &size); }; /*! Receiver used for transfert with CORBA when copy is required both remotely and locally. */ -template -class CorbaWCWithCopyReceiver : public Receiver +template +class CorbaWCWithCopyReceiver : public Receiver { private: CorbaSender _mySender; public: CorbaWCWithCopyReceiver(CorbaSender mySender); ~CorbaWCWithCopyReceiver(); - void *getValue(long &size); + T *getValue(long &size); private: - void *getDistValue(long &size); + T *getDistValue(long &size); }; #ifdef HAVE_MPI2 /*! Receiver for MPI transfert. */ -template -class MPIReceiver : public Receiver +template +struct MPITRAITS +{ + static MPI_Datatype MpiType; +}; + +template<> +MPI_Datatype MPITRAITS::MpiType=MPI_DOUBLE; + +template<> +MPI_Datatype MPITRAITS::MpiType=MPI_INT; + +template +class MPIReceiver : public Receiver { private: - SALOME::MPISender_ptr _mySender; + CorbaSender _mySender; public: - MPIReceiver(SALOME::MPISender_ptr mySender); + MPIReceiver(CorbaSender mySender); ~MPIReceiver(); - void *getValue(long &size); + T *getValue(long &size); private: - void *getDistValue(long &size); + T *getDistValue(long &size); }; #endif @@ -96,19 +127,19 @@ class XDR; /*! Receiver for transfert with sockets. */ -template -class SocketReceiver : public Receiver +template +class SocketReceiver : public Receiver { private: - SALOME::SocketSender_ptr _mySender; + CorbaSender _mySender; int _clientSockfd; bool _senderDestruc; public: - SocketReceiver(SALOME::SocketSender_ptr mySender); + SocketReceiver(CorbaSender mySender); ~SocketReceiver(); - void *getValue(long &size); + T *getValue(long &size); private: - void *getDistValue(long &size); + T *getDistValue(long &size); void initCom(); void connectCom(const char *, int); void closeCom();