Refactor out GetApplication for reuse
No need to duplicate the logic elsewhere.
Change-Id: I86dcc716ca9a8c0e587d4c43ad8f09d8a01ea2c6
diff --git a/aos/configuration.cc b/aos/configuration.cc
index 912f91e..36868c4 100644
--- a/aos/configuration.cc
+++ b/aos/configuration.cc
@@ -609,17 +609,13 @@
// First handle application specific maps. Only do this if we have a matching
// application name, and it has maps.
- if (config->has_applications()) {
- auto application_iterator = std::lower_bound(
- config->applications()->cbegin(), config->applications()->cend(),
- application_name, CompareApplications);
- if (application_iterator != config->applications()->cend() &&
- EqualsApplications(*application_iterator, application_name)) {
- if (application_iterator->has_maps()) {
- mutable_name = std::string(name);
- HandleMaps(application_iterator->maps(), &mutable_name, type, node);
- name = std::string_view(mutable_name);
- }
+ {
+ const Application *application =
+ GetApplication(config, node, application_name);
+ if (application != nullptr && application->has_maps()) {
+ mutable_name = std::string(name);
+ HandleMaps(application->maps(), &mutable_name, type, node);
+ name = std::string_view(mutable_name);
}
}
@@ -1222,5 +1218,31 @@
return result;
}
+const Application *GetApplication(const Configuration *config,
+ const Node *my_node,
+ std::string_view application_name) {
+ if (config->has_applications()) {
+ auto application_iterator = std::lower_bound(
+ config->applications()->cbegin(), config->applications()->cend(),
+ application_name, CompareApplications);
+ if (application_iterator != config->applications()->cend() &&
+ EqualsApplications(*application_iterator, application_name)) {
+ if (MultiNode(config)) {
+ // Ok, we need
+ CHECK(application_iterator->has_nodes());
+ CHECK(my_node != nullptr);
+ for (const flatbuffers::String *str : *application_iterator->nodes()) {
+ if (str->string_view() == my_node->name()->string_view()) {
+ return *application_iterator;
+ }
+ }
+ } else {
+ return *application_iterator;
+ }
+ }
+ }
+ return nullptr;
+}
+
} // namespace configuration
} // namespace aos