forked from matth-x/MicroOcpp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConfigurationContainer.cpp
More file actions
75 lines (60 loc) · 2.19 KB
/
Copy pathConfigurationContainer.cpp
File metadata and controls
75 lines (60 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// matth-x/ArduinoOcpp
// Copyright Matthias Akstaller 2019 - 2021
// MIT License
#include <ArduinoOcpp/Core/ConfigurationContainer.h>
#include <Variants.h>
namespace ArduinoOcpp {
std::shared_ptr<AbstractConfiguration> ConfigurationContainer::getConfiguration(const char *key) {
for (std::vector<std::shared_ptr<AbstractConfiguration>>::iterator configuration = configurations.begin(); configuration != configurations.end(); configuration++) {
if ((*configuration)->keyEquals(key)) {
return *configuration;
}
}
return NULL;
}
bool ConfigurationContainer::removeConfiguration(std::shared_ptr<AbstractConfiguration> configuration) {
auto config = configurations.begin();
auto config_rev = configurations_revision.begin();
while (config != configurations.end()) {
if ((*config) == configuration) {
configurations.erase(config);
if (config_rev != configurations_revision.end())
configurations_revision.erase(config_rev);
return true;
}
config++;
if (config_rev != configurations_revision.end())
config_rev++;
}
return false;
}
void ConfigurationContainer::addConfiguration(std::shared_ptr<AbstractConfiguration> configuration) {
configurations.push_back(configuration);
}
bool ConfigurationContainer::configurationsUpdated() {
bool updated = false;
auto config = configurations.begin();
auto config_rev = configurations_revision.begin();
while (config != configurations.end()) {
if (config_rev == configurations_revision.end()) {
//vectors are not the same length -> added configurations
updated = true;
break;
}
if ((*config)->getValueRevision() != *config_rev) {
updated = true;
break;
}
config++;
config_rev++;
}
if (updated) {
configurations_revision.erase(config_rev, configurations_revision.end());
while (config != configurations.end()) {
configurations_revision.push_back((*config)->getValueRevision());
config++;
}
}
return updated;
}
} //end namespace ArduinoOcpp