diff options
Diffstat (limited to 'brillo/map_utils.h')
-rw-r--r-- | brillo/map_utils.h | 71 |
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_ |