Stride Reference Manual  1.0
RemoteSimulatorSender.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <future>
4 #include <string>
5 #include <map>
6 
7 #ifdef MPI_USED
8 
9 #include <mpi.h>
10 
11 #endif
12 
13 #include "AsyncSimulator.h"
14 #include "Simulator.h"
15 #include "pop/Traveller.h"
16 #include "util/TravelData.h"
17 
18 namespace stride {
19 
20 using namespace std;
21 using namespace util;
22 
24 #ifdef MPI_USED
25 public:
26  RemoteSimulatorSender(const string& m_name, const int mpi_id);
27 
28  ~RemoteSimulatorSender() = default;
29 
30  virtual string getName() const override { return m_name; };
31 
34  virtual future<SimulatorStatus> timeStep() override;
35 
36  virtual void welcomeHomeTravellers(const pair<vector<uint>, vector<Health>>& travellers) override;
37 
38  virtual void hostForeignTravellers(const vector<stride::Simulator::TravellerType>& travellers, uint days,
39  const string& destination_district, const string& destination_facility) override;
40 
48  virtual void
49  sendNewTravellers(uint amount, uint days, const string& destination_sim_id, const string& destination_district,
50  const string& destination_facility) override;
51 
52  virtual void returnForeignTravellers() override;
53 
54 private:
55  int m_count; // The count of elements in the databuffer (default = 1)
56  int m_id_mpi; // The id which will be used for MPI communication
57  string m_name; // The standard name (string)
58  MPI_Datatype m_simulator_status;
59  MPI_Datatype m_returning_travellers;
60 
63  virtual void
64  sendNewTravellers(const vector<Simulator::TravellerType>& travellers, uint days, const string& destination_sim_id,
65  const string& destination_district, const string& destination_facility) override;
66 
69  virtual void
70  returnForeignTravellers(const pair<vector<uint>, vector<Health>>& travellers, const string& home_sim_id) override;
71 
72  void makeSimulatorStatus();
73 
74  void makeTravellersReturningStruct();
75 
76  friend class Simulator;
77 
78  friend class Coordinator;
79 
80 #endif
81 #ifndef MPI_USED
82  public:
83  RemoteSimulatorSender(const string& m_name, const int mpi_id) {}
84  ~RemoteSimulatorSender() = default;
85 
86  virtual string getName() const override { return ""; };
87  virtual future<SimulatorStatus> timeStep() override {return async([&](){return SimulatorStatus(0, 0);});}
88  virtual void welcomeHomeTravellers(const pair<vector<uint>, vector<Health>>& travellers) override {}
89  virtual void hostForeignTravellers(const vector<stride::Simulator::TravellerType>& travellers, uint days, const string& destination_district, const string& destination_facility) override {}
90  virtual void sendNewTravellers(uint amount, uint days, const string& destination_sim_id, const string& destination_district, const string& destination_facility) override {}
91  virtual void returnForeignTravellers() override {}
92 
93  private:
94  virtual void sendNewTravellers(const vector<Simulator::TravellerType>& travellers, uint days, const string& destination_sim_id, const string& destination_district, const string& destination_facility) override {}
95  virtual void returnForeignTravellers(const pair<vector<uint>, vector<Health>>& travellers, const string& home_sim_id) override {}
96 
99 #endif
100 };
101 
102 }
unsigned int uint
Definition: Influence.h:17
virtual string getName() const override
virtual void hostForeignTravellers(const vector< stride::Simulator::TravellerType > &travellers, uint days, const string &destination_district, const string &destination_facility) override
Receive travellers travellers: the travellers this simulator has to host.
virtual future< SimulatorStatus > timeStep() override
Time Dependent Person DataType.
Definition: NoBehaviour.h:17
virtual void sendNewTravellers(uint amount, uint days, const string &destination_sim_id, const string &destination_district, const string &destination_facility) override
Commands to send an amount of travellers to another region The Simulator will have to take action...
virtual void welcomeHomeTravellers(const pair< vector< uint >, vector< Health >> &travellers) override
RemoteSimulatorSender(const string &m_name, const int mpi_id)
virtual void sendNewTravellers(const vector< Simulator::TravellerType > &travellers, uint days, const string &destination_sim_id, const string &destination_district, const string &destination_facility) override
Send specifically chosen travellers to the destination region This function is used by the Simulator ...
Header for the Simulator class.
STL namespace.
Main class that contains and direct the virtual world.
Definition: Simulator.h:64
virtual void returnForeignTravellers(const pair< vector< uint >, vector< Health >> &travellers, const string &home_sim_id) override
Send foreign travellers to the original region This function is used by the Simulator to give the sig...
virtual void returnForeignTravellers() override
Return foreign people that would return today, signals the Simulator to return today&#39;s travellers...