Greens-code
A modular quantum transport code
messages.hpp
1 #ifndef MESSAGE_FOR_EXEC_HPP
2 #define MESSAGE_FOR_EXEC_HPP
3 
4 #include "parallel.hpp"
5 #include <string>
6 #include "shared_ptr.hpp"
7 
8 class loadable_Object;
9 typedef STD_TR1::shared_ptr<loadable_Object> loadable_Object_ref;
10 
11 class executable_Object;
12 typedef STD_TR1::shared_ptr<executable_Object> executable_Object_ref;
13 
14 
15 class message{
16 public:
17  typedef STD_TR1::shared_ptr<message> ref;
18 
19  explicit message( const std::string& param_name,
20  loadable_Object_ref parameters,
21  loadable_Object_ref receiver);
22  virtual ~message(){};
23 
24  void prepare_message( size_t N, const std::string& filen);
25  void deliver_message(MPI_Comm comm, size_t loop_nr) const;
26  void close_message(MPI_Comm comm){ close_message_(comm);};
27 
28  size_t loops() const;
29 
30  static
31  message::ref create_param_change_message(const std::string& param_name,
32  loadable_Object_ref parameters,
33  loadable_Object_ref r);
34 
35  static
36  message::ref create_force_reinit_message(const std::string& param_name,
37  loadable_Object_ref parameters,
38  loadable_Object_ref r);
39 
40  static
41  message::ref create_executable_reinit_message(const std::string& param_name,
42  loadable_Object_ref parameters,
43  loadable_Object_ref r);
44 
45  static
46  message::ref create_executable_perform_message(const std::string& param_name,
47  loadable_Object_ref parameters,
48  loadable_Object_ref r,
49  const std::vector<int>);
50 
51  size_t priority() const { return priority_;};
52 
53  bool operator<( const message& r) const {
54  if (priority_ == r.priority_)
55  return param_name > r.param_name;
56  return priority_ < r.priority_;};
57 
58  const char* name() const { return name_();}
59 
60 protected:
61  int every;
62  std::string param_name;
63  loadable_Object_ref receiver;
64  size_t priority_;
65 
66 private:
67 
68  message();
69  message(const message& );
70 
71  virtual const char* name_() const = 0;
72 
73  virtual size_t loops_() const = 0;
74 
75  virtual void prepare_message_(size_t N, const std::string& filen) = 0;
76  virtual void deliver_message_(MPI_Comm, size_t loop_nr) const = 0;
77  virtual void close_message_(MPI_Comm) = 0;
78 };
79 
80 inline bool compare_messages_by_priority( message::ref m1, message::ref m2)
81 {
82  return !(m1->operator<(*m2));
83 }
84 
85 #endif
Definition: messages.hpp:15
An abstract base class supporting xml_file_reading of input parameters.
Definition: input_file.hpp:79
Definition: executable.hpp:16