1 // Copyright 2016 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_MAP_TRAITS_STANDARD_H_ 6 #define MOJO_PUBLIC_CPP_BINDINGS_MAP_TRAITS_STANDARD_H_ 7 8 #include "mojo/public/cpp/bindings/map.h" 9 #include "mojo/public/cpp/bindings/map_traits.h" 10 11 namespace mojo { 12 13 template <typename K, typename V> 14 struct MapTraits<Map<K, V>> { 15 using Key = K; 16 using Value = V; 17 using Iterator = typename Map<K, V>::Iterator; 18 using ConstIterator = typename Map<K, V>::ConstIterator; 19 20 static bool IsNull(const Map<K, V>& input) { return input.is_null(); } 21 static void SetToNull(Map<K, V>* output) { *output = nullptr; } 22 23 static size_t GetSize(const Map<K, V>& input) { return input.size(); } 24 25 static ConstIterator GetBegin(const Map<K, V>& input) { 26 return input.begin(); 27 } 28 static Iterator GetBegin(Map<K, V>& input) { return input.begin(); } 29 30 static void AdvanceIterator(ConstIterator& iterator) { iterator++; } 31 static void AdvanceIterator(Iterator& iterator) { iterator++; } 32 33 static const K& GetKey(Iterator& iterator) { return iterator->first; } 34 static const K& GetKey(ConstIterator& iterator) { return iterator->first; } 35 36 static V& GetValue(Iterator& iterator) { return iterator->second; } 37 static const V& GetValue(ConstIterator& iterator) { return iterator->second; } 38 39 static bool Insert(Map<K, V>& input, const K& key, V&& value) { 40 input.insert(key, std::forward<V>(value)); 41 return true; 42 } 43 static bool Insert(Map<K, V>& input, const K& key, const V& value) { 44 input.insert(key, value); 45 return true; 46 } 47 48 static void SetToEmpty(Map<K, V>* output) { output->SetToEmpty(); } 49 }; 50 51 } // namespace mojo 52 53 #endif // MOJO_PUBLIC_CPP_BINDINGS_MAP_TRAITS_STANDARD_H_ 54