Stride Reference Manual  1.0
District.h
Go to the documentation of this file.
1 #pragma once
2 
8 #include "util/GeoCoordinate.h"
9 #include "core/Influence.h"
10 
11 #include <string>
12 #include <utility>
13 #include <algorithm>
14 #include <vector>
15 
16 namespace stride {
17 
18 using namespace util;
19 using namespace std;
20 
21 class ClusterSaver;
22 
26 class District {
27 public:
29  District(string district_name, uint influence_size, double influence_speed, double influence_minimum,
30  GeoCoordinate location = GeoCoordinate(0, 0)) :
31  m_name(district_name),
32  m_location(location),
33  m_influence_size(influence_size),
34  m_influence_speed(influence_speed),
35  m_influence_minimum(influence_minimum) {}
36 
38  void addFacility(string facility_name) {
39  if (!hasFacility(facility_name)) {
40  m_transportations_facilities.push_back(
41  make_pair(facility_name, Influence(m_influence_size, m_influence_speed, m_influence_minimum)));
42  }
43  }
44 
46  bool hasFacility(string facility_name) const {
47  return getFacility(facility_name) != m_transportations_facilities.end();
48  }
49 
50  double getFacilityInfluence(string facility_name) const {
51  if (hasFacility(facility_name)) {
52  auto it = getFacility(facility_name);
53  return it->second.getInfluence();
54  }
55 
56  return 0.0;
57  }
58 
59  void visitFacility(string facility_name, uint amount) {
60  if (hasFacility(facility_name)) {
61  auto it = getFacility(facility_name);
62  it->second.addToFront(amount);
63  }
64  }
65 
67  for (auto& facility: m_transportations_facilities) {
68  facility.second.addRecord(0);
69  }
70  }
71 
73  bool operator==(const District& other_district) { return other_district.m_name == m_name; }
74 
76  string getName() const { return m_name; }
77 
78  GeoCoordinate getLocation() const { return m_location; }
79 
80 private:
81  vector<pair<string, Influence>> m_transportations_facilities;
82  string m_name;
87 
88  vector<pair<string, Influence>>::const_iterator getFacility(string facility_name) const {
89  auto same_name = [&](const pair<string, Influence>& facility) { return facility.first == facility_name; };
90  return find_if(m_transportations_facilities.begin(), m_transportations_facilities.end(), same_name);
91  }
92 
93  vector<pair<string, Influence>>::iterator getFacility(string facility_name) {
94  auto same_name = [&](const pair<string, Influence>& facility) { return facility.first == facility_name; };
95  return find_if(m_transportations_facilities.begin(), m_transportations_facilities.end(), same_name);
96  }
97 
98  friend class ClusterSaver;
99 };
100 
101 }
102 
District(string district_name, uint influence_size, double influence_speed, double influence_minimum, GeoCoordinate location=GeoCoordinate(0, 0))
Constructor.
Definition: District.h:29
void advanceInfluencesRecords()
Definition: District.h:66
unsigned int uint
Definition: Influence.h:17
bool operator==(const District &other_district)
Equals operator for districts, two districts are equal if their name is the same. ...
Definition: District.h:73
void addFacility(string facility_name)
Add a transportation facility to this district.
Definition: District.h:38
string m_name
The name of the city/village.
Definition: District.h:82
const uint m_influence_speed
All Influences of facilities will get this speed.
Definition: District.h:85
string getName() const
Return the name of the district.
Definition: District.h:76
Time Dependent Person DataType.
Definition: NoBehaviour.h:17
const uint m_influence_minimum
All Influences of facilities will get this minimum.
Definition: District.h:86
double getFacilityInfluence(string facility_name) const
Definition: District.h:50
A district is either a city or a village (currently, there is no difference between city and village)...
Definition: District.h:26
const GeoCoordinate m_location
The geographic location of the district.
Definition: District.h:83
vector< pair< string, Influence > >::iterator getFacility(string facility_name)
Definition: District.h:93
vector< pair< string, Influence > > m_transportations_facilities
The transportation facilities have a name (string) and a sphere of influence.
Definition: District.h:81
void visitFacility(string facility_name, uint amount)
Definition: District.h:59
STL namespace.
bool hasFacility(string facility_name) const
If the facility is found in this district, return true.
Definition: District.h:46
Header for the Influence class.
vector< pair< string, Influence > >::const_iterator getFacility(string facility_name) const
Definition: District.h:88
const uint m_influence_size
All Influences of facilities will get this size.
Definition: District.h:84
GeoCoordinate getLocation() const
Definition: District.h:78