| // 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 BUFFET_MAP_UTILS_H_ | 
 | #define BUFFET_MAP_UTILS_H_ | 
 |  | 
 | #include <map> | 
 | #include <utility> | 
 | #include <vector> | 
 |  | 
 | namespace buffet { | 
 |  | 
 | // Given an STL map returns a vector containing all keys from the map | 
 | template<typename T> | 
 | std::vector<typename T::key_type> GetMapKeys(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> | 
 | 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> | 
 | 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; | 
 | } | 
 |  | 
 | }  // namespace buffet | 
 |  | 
 | #endif  // BUFFET_MAP_UTILS_H_ |