Modernize mapper core types
There's a number of best practices that have evolved in our use of
flat_maps and flat_sets since this code was originally written.
First, add std::less<> to the Compare template argument. The default
for this is std::less<Key> which limits find() calls (and any lookup for
that matter) to only supporting std::string. Using std::less<> allows
lookup by std::string_view, which can prevent some copies in some cases.
Next, add std::vector<...> to the types under the AllocatorOrContainer
template arg. Per our coding standard, this overrides the default of
using boost::vector, and replaces it with std::vector, which, although
it has a very similar interface, tends to optimize better, and be better
supported overall.
The rest of this patch updates a couple places where the various types
were specifically hardcoded, so it moves to using the various using
declarations.
Tested: Unit tests; Next patch tests this more fully.
Change-Id: I11e8ecb669f31193c55dda344b25d3fa5d191502
Signed-off-by: Ed Tanous <edtanous@google.com>
diff --git a/src/processing.cpp b/src/processing.cpp
index 448830f..561cbde 100644
--- a/src/processing.cpp
+++ b/src/processing.cpp
@@ -142,12 +142,9 @@
// This is all needed so that mapper operations can be done
// on the new parent paths.
using iface_map_iterator = InterfaceMapType::iterator;
- using iface_map_value_type =
- boost::container::flat_map<std::string,
- boost::container::flat_set<std::string>>;
- using name_map_iterator = iface_map_value_type::iterator;
+ using name_map_iterator = InterfaceMapType::mapped_type::iterator;
- static const boost::container::flat_set<std::string> defaultIfaces{
+ static const InterfaceNames defaultIfaces{
"org.freedesktop.DBus.Introspectable", "org.freedesktop.DBus.Peer",
"org.freedesktop.DBus.Properties"};
@@ -159,11 +156,10 @@
parent = parent.substr(0, pos);
std::pair<iface_map_iterator, bool> parentEntry =
- interfaceMap.insert(std::make_pair(parent, iface_map_value_type{}));
+ interfaceMap.try_emplace(parent);
std::pair<name_map_iterator, bool> ifaceEntry =
- parentEntry.first->second.insert(
- std::make_pair(wellKnown, defaultIfaces));
+ parentEntry.first->second.try_emplace(wellKnown, defaultIfaces);
if (!ifaceEntry.second)
{