// 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 #include #include #include namespace brillo { // Given an STL map, returns a set containing all keys from the map. template inline std::set GetMapKeys(const T& map) { std::set 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 inline std::vector GetMapKeysAsVector(const T& map) { std::vector 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 inline std::vector GetMapValues(const T& map) { std::vector 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 inline std::vector> MapToVector(const T& map) { std::vector> 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 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_