aboutsummaryrefslogtreecommitdiffstats
path: root/brillo/map_utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'brillo/map_utils.h')
-rw-r--r--brillo/map_utils.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/brillo/map_utils.h b/brillo/map_utils.h
new file mode 100644
index 0000000..b7f1658
--- /dev/null
+++ b/brillo/map_utils.h
@@ -0,0 +1,71 @@
+// Copyright 2014 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef LIBCHROMEOS_BRILLO_MAP_UTILS_H_
+#define LIBCHROMEOS_BRILLO_MAP_UTILS_H_
+
+#include <map>
+#include <set>
+#include <utility>
+#include <vector>
+
+namespace brillo {
+
+// Given an STL map, returns a set containing all keys from the map.
+template<typename T>
+inline std::set<typename T::key_type> GetMapKeys(const T& map) {
+ std::set<typename T::key_type> keys;
+ for (const auto& pair : map)
+ keys.insert(keys.end(), pair.first); // Map keys are already sorted.
+ return keys;
+}
+
+// Given an STL map, returns a vector containing all keys from the map.
+// The keys in the vector are sorted.
+template<typename T>
+inline std::vector<typename T::key_type> GetMapKeysAsVector(const T& map) {
+ std::vector<typename T::key_type> keys;
+ keys.reserve(map.size());
+ for (const auto& pair : map)
+ keys.push_back(pair.first);
+ return keys;
+}
+
+// Given an STL map, returns a vector containing all values from the map.
+template<typename T>
+inline std::vector<typename T::mapped_type> GetMapValues(const T& map) {
+ std::vector<typename T::mapped_type> values;
+ values.reserve(map.size());
+ for (const auto& pair : map)
+ values.push_back(pair.second);
+ return values;
+}
+
+// Given an STL map, returns a vector of key-value pairs from the map.
+template<typename T>
+inline std::vector<std::pair<typename T::key_type, typename T::mapped_type>>
+MapToVector(const T& map) {
+ std::vector<std::pair<typename T::key_type, typename T::mapped_type>> vector;
+ vector.reserve(map.size());
+ for (const auto& pair : map)
+ vector.push_back(pair);
+ return vector;
+}
+
+// Given an STL map, returns the value associated with a given key or a default
+// value if the key is not present in the map.
+template<typename T>
+inline typename T::mapped_type GetOrDefault(
+ const T& map,
+ typename T::key_type key,
+ const typename T::mapped_type& def) {
+ typename T::const_iterator it = map.find(key);
+ if (it == map.end())
+ return def;
+ return it->second;
+}
+
+} // namespace brillo
+
+#endif // LIBCHROMEOS_BRILLO_MAP_UTILS_H_