Salome HOME
Porting to Mandrake 10.1 and new products:
[modules/kernel.git] / src / Communication / SenderFactory.cxx
1 #include "SenderFactory.hxx"
2 #include "utilities.h"
3 #include "SALOMEMultiComm.hxx"
4 #include "SALOME_Comm_i.hxx"
5 using namespace std;
6
7 #ifdef COMP_CORBA_DOUBLE
8 #define SALOME_CorbaDoubleSender SALOME_CorbaDoubleNCSender_i
9 #else
10 #define SALOME_CorbaDoubleSender SALOME_CorbaDoubleCSender_i
11 #endif
12
13 #ifdef COMP_CORBA_LONG
14 #define SALOME_CorbaLongSender SALOME_CorbaLongNCSender_i
15 #else
16 #define SALOME_CorbaLongSender SALOME_CorbaLongCSender_i
17 #endif
18
19 SALOME::SenderDouble_ptr SenderFactory::buildSender(SALOMEMultiComm &multiCommunicator,const double *tab,long lgr,bool ownTab)throw(MultiCommException){
20   switch(multiCommunicator.getProtocol())
21     {
22     case SALOME::CORBA_:
23       {
24         SALOME_CorbaDoubleSender * retc=new SALOME_CorbaDoubleSender(tab,lgr,ownTab);
25         return retc->_this();
26       }
27 #ifdef HAVE_MPI2
28     case SALOME::MPI_:
29       {
30         SALOME_MPISenderDouble_i* retm=new SALOME_MPISenderDouble_i(tab,lgr,ownTab);
31         return retm->_this();
32       }
33 #endif
34 #ifdef HAVE_SOCKET
35     case SALOME::SOCKET_:
36       {
37         SALOME_SocketSenderDouble_i* rets=new SALOME_SocketSenderDouble_i(tab,lgr,ownTab);
38         return rets->_this();
39       }
40 #endif
41     default:
42       {
43         multiCommunicator.setProtocol(SALOME::CORBA_);
44         MESSAGE("PROTOCOL CHANGED TO CORBA");
45         SALOME_CorbaDoubleSender * retc=new SALOME_CorbaDoubleSender(tab,lgr,ownTab);
46         return retc->_this();
47       }
48 //       throw MultiCommException("Communication protocol not implemented");
49     }
50 }
51
52 SALOME::SenderInt_ptr SenderFactory::buildSender(SALOMEMultiComm &multiCommunicator,const int *tab,long lgr,bool ownTab)throw(MultiCommException){
53   switch(multiCommunicator.getProtocol())
54     {
55     case SALOME::CORBA_:
56       {
57         SALOME_CorbaLongSender * retc=new SALOME_CorbaLongSender(tab,lgr,ownTab);
58         return retc->_this();
59       }
60 #ifdef HAVE_MPI2
61     case SALOME::MPI_:
62       {
63         SALOME_MPISenderInt_i* retm=new SALOME_MPISenderInt_i(tab,lgr,ownTab);
64         return retm->_this();
65       }
66 #endif
67 #ifdef HAVE_SOCKET
68     case SALOME::SOCKET_:
69       {
70         SALOME_SocketSenderInt_i* rets=new SALOME_SocketSenderInt_i(tab,lgr,ownTab);
71         return rets->_this();
72       }
73 #endif
74     default:
75       {
76         multiCommunicator.setProtocol(SALOME::CORBA_);
77         SALOME_CorbaLongSender * retc=new SALOME_CorbaLongSender(tab,lgr,ownTab);
78         return retc->_this();
79       }
80 //       throw MultiCommException("Communication protocol not implemented"); 
81     }
82   }
83
84 SALOME::SenderDouble_ptr SenderFactory::buildSender(SALOME::TypeOfCommunication NewType,SALOME_SenderDouble_i *src)
85 {
86   SALOMEMultiComm mc(NewType);
87   long n;
88   const double *data=(const double *)src->getData(n);
89   bool own=src->getOwnerShip();
90   src->setOwnerShip(false);
91   return buildSender(mc,data,n,own);
92 }
93
94 SALOME::SenderInt_ptr SenderFactory::buildSender(SALOME::TypeOfCommunication NewType,SALOME_SenderInt_i *src)
95 {
96   SALOMEMultiComm mc(NewType);
97   long n;
98   const int *data=(const int *)src->getData(n);
99   bool own=src->getOwnerShip();
100   src->setOwnerShip(false);
101   return buildSender(mc,data,n,own);
102 }