| // Copyright 2014 The ChromiumOS Authors | |
| // 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_ |