Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights 1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 2 // See the file tools.license for terms. 3 3 4 #ifndef tools_wroot_mpi_send_basket 4 #ifndef tools_wroot_mpi_send_basket 5 #define tools_wroot_mpi_send_basket 5 #define tools_wroot_mpi_send_basket 6 6 7 #include "mpi_protocol" 7 #include "mpi_protocol" 8 #include "../impi" 8 #include "../impi" 9 #include "basket" 9 #include "basket" 10 10 11 namespace tools { 11 namespace tools { 12 namespace wroot { 12 namespace wroot { 13 13 14 inline bool mpi_pack_basket(impi& a_mpi,uint32 14 inline bool mpi_pack_basket(impi& a_mpi,uint32 a_icol,const basket& a_basket) { 15 if(!a_mpi.pack(a_icol)) return false; 15 if(!a_mpi.pack(a_icol)) return false; 16 16 17 if(!a_mpi.spack(a_basket.object_name())) ret 17 if(!a_mpi.spack(a_basket.object_name())) return false; 18 if(!a_mpi.spack(a_basket.object_title())) re 18 if(!a_mpi.spack(a_basket.object_title())) return false; 19 19 20 if(!a_mpi.pack(a_basket.last())) return fals 20 if(!a_mpi.pack(a_basket.last())) return false; 21 if(!a_mpi.pack(a_basket.nev_buf_size())) ret 21 if(!a_mpi.pack(a_basket.nev_buf_size())) return false; 22 if(!a_mpi.pack(a_basket.nev())) return false 22 if(!a_mpi.pack(a_basket.nev())) return false; 23 23 24 if(a_basket.entry_offset()) { 24 if(a_basket.entry_offset()) { 25 if(!a_mpi.bpack(true)) return false; 25 if(!a_mpi.bpack(true)) return false; 26 if(!a_mpi.pack(a_basket.nev_buf_size(),a_b 26 if(!a_mpi.pack(a_basket.nev_buf_size(),a_basket.entry_offset())) return false; 27 } else { 27 } else { 28 if(!a_mpi.bpack(false)) return false; 28 if(!a_mpi.bpack(false)) return false; 29 } 29 } 30 30 31 if(a_basket.displacement()) { 31 if(a_basket.displacement()) { 32 if(!a_mpi.bpack(true)) return false; 32 if(!a_mpi.bpack(true)) return false; 33 if(!a_mpi.pack(a_basket.nev_buf_size(),a_b 33 if(!a_mpi.pack(a_basket.nev_buf_size(),a_basket.displacement())) return false; 34 } else { 34 } else { 35 if(!a_mpi.bpack(false)) return false; 35 if(!a_mpi.bpack(false)) return false; 36 } 36 } 37 37 38 if(!a_mpi.pack(a_basket.datbuf().length(),a_ 38 if(!a_mpi.pack(a_basket.datbuf().length(),a_basket.datbuf().buf())) return false; 39 return true; 39 return true; 40 } 40 } 41 41 42 inline bool mpi_send_basket(impi& a_mpi,int a_ 42 inline bool mpi_send_basket(impi& a_mpi,int a_dest,int a_tag,uint32 a_id,uint32 a_icol,const basket& a_basket) { 43 a_mpi.pack_reset(); 43 a_mpi.pack_reset(); 44 if(!a_mpi.pack(mpi_protocol_basket())) retur 44 if(!a_mpi.pack(mpi_protocol_basket())) return false; 45 if(!a_mpi.pack(a_id)) return false; 45 if(!a_mpi.pack(a_id)) return false; 46 if(!mpi_pack_basket(a_mpi,a_icol,a_basket)) 46 if(!mpi_pack_basket(a_mpi,a_icol,a_basket)) return false; 47 return a_mpi.send_buffer(a_dest,a_tag); 47 return a_mpi.send_buffer(a_dest,a_tag); 48 } 48 } 49 49 50 }} 50 }} 51 51 52 #endif 52 #endif