ESyS-Particle  4.0.1
BroadCast_cmd.h
1 
2 // //
3 // Copyright (c) 2003-2011 by The University of Queensland //
4 // Earth Systems Science Computational Centre (ESSCC) //
5 // http://www.uq.edu.au/esscc //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 #ifndef __BROADCAST_CMD_H
14 #define __BROADCAST_CMD_H
15 
16 #include "Parallel/mpicmdbuf.h"
17 #include "Parallel/mpivbuf.h"
18 #include "Parallel/mpibarrier.h"
19 #include "Parallel/RankAndComm.h"
20 
25 {
26  private:
27  int m_commandId;
28  CVarMPIBuffer m_varBuffer;
29  CMPIBarrier m_barrier;
30  CMPILCmdBuffer m_cmdBuffer;
31 
32  public:
33  BroadcastCommand(const MpiRankAndComm &rankAndComm, int cmdId);
34  virtual ~BroadcastCommand(){}
35 
40  template <typename TmplData>
41  void appendTypeAndName(const TmplData &namedWithType);
42 
46  template <typename TmplData>
47  void append(const TmplData &basicTypeData);
48 
52  template <typename TmplPackable>
53  void packInto(const TmplPackable&);
54 
58  const int& getCommandId() const;
59 
63  void broadcastCommand();
64 
68  void broadcastBuffer();
69 
73  void wait(const std::string &barrierName);
74 
79  void broadcast();
80 
81 };
82 #include "Parallel/BroadCast_cmd.hpp"
83 
84 #endif // BROADCAST_CMD_H