2 #include "MPIObject_i.hxx"
6 MPIObject_i::MPIObject_i()
13 MPIObject_i::MPIObject_i(int nbproc, int numproc)
20 MPIObject_i::~MPIObject_i()
22 if(_tior) delete _tior;
25 Engines::IORTab* MPIObject_i::tior()
27 Engines::IORTab* tior = new Engines::IORTab;
28 tior->length(_tior->length());
29 for(unsigned int ip=0;ip<tior->length();ip++)
30 (*tior)[ip] = (*_tior)[ip];
34 void MPIObject_i::tior(const Engines::IORTab& ior)
36 _tior = new Engines::IORTab;
37 _tior->length(ior.length());
38 for(unsigned int ip=0;ip<ior.length();ip++)
39 (*_tior)[ip] = ior[ip];
42 void MPIObject_i::BCastIOR(CORBA::ORB_ptr orb, Engines::MPIObject_var pobj,
47 MPI_Status status; /* status de reception de message MPI */
49 // Conversion IOR vers string
50 CORBA::String_var sior(orb->object_to_string(pobj));
54 //Allocation du tableau des IOR
55 Engines::IORTab *iort = new Engines::IORTab;
56 iort->length(_nbproc);
60 // Process 0 recupere les ior de l'object sur les autres process
61 for(ip=1;ip<_nbproc;ip++){
62 err = MPI_Recv(&n,1,MPI_INTEGER,ip,ip,MPI_COMM_WORLD,&status);
64 MESSAGE("[" << _numproc << "] MPI_RECV error");
67 // Allocation de la chaine de longueur n
68 ior = (char*)calloc(n,sizeof(char));
69 err = MPI_Recv(ior,n,MPI_CHARACTER,ip,2*ip,MPI_COMM_WORLD,&status);
71 MESSAGE("[" << _numproc << "] MPI_RECV error");
74 (*iort)[ip] = Engines::MPIObject::_narrow(orb->string_to_object(ior));
77 // On donne le tableau des ior a l'objet Corba du process 0
85 // On envoie l'IOR au process 0
86 n = strlen((char*)sior);
87 err = MPI_Send(&n,1,MPI_INTEGER,0,_numproc,MPI_COMM_WORLD);
89 MESSAGE("[" << _numproc << "] MPI_SEND error");
92 err = MPI_Send((char*)sior,n,MPI_CHARACTER,0,2*_numproc,MPI_COMM_WORLD);
94 MESSAGE("[" << _numproc << "] MPI_SEND error");