| // 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 LIBBRILLO_BRILLO_MAP_UTILS_H_ |
| #define LIBBRILLO_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 // LIBBRILLO_BRILLO_MAP_UTILS_H_ |