| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_MAP_H_ | 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_MAP_H_ |
| 6 #define MOJO_PUBLIC_CPP_BINDINGS_MAP_H_ | 6 #define MOJO_PUBLIC_CPP_BINDINGS_MAP_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <unordered_map> |
| 10 #include <utility> | 11 #include <utility> |
| 11 | 12 |
| 12 #include "base/logging.h" | 13 #include "base/logging.h" |
| 13 #include "base/macros.h" | 14 #include "base/macros.h" |
| 14 #include "mojo/public/cpp/bindings/array.h" | 15 #include "mojo/public/cpp/bindings/array.h" |
| 15 #include "mojo/public/cpp/bindings/lib/map_data_internal.h" | 16 #include "mojo/public/cpp/bindings/lib/map_data_internal.h" |
| 16 #include "mojo/public/cpp/bindings/lib/template_util.h" | 17 #include "mojo/public/cpp/bindings/lib/template_util.h" |
| 17 #include "mojo/public/cpp/bindings/type_converter.h" | 18 #include "mojo/public/cpp/bindings/type_converter.h" |
| 18 | 19 |
| 19 namespace mojo { | 20 namespace mojo { |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 void SetToEmpty() { | 129 void SetToEmpty() { |
| 129 is_null_ = false; | 130 is_null_ = false; |
| 130 map_.clear(); | 131 map_.clear(); |
| 131 } | 132 } |
| 132 | 133 |
| 133 // Returns a const reference to the std::map managed by this class. If this | 134 // Returns a const reference to the std::map managed by this class. If this |
| 134 // object is null, the return value will be an empty map. | 135 // object is null, the return value will be an empty map. |
| 135 const std::map<Key, Value>& storage() const { return map_; } | 136 const std::map<Key, Value>& storage() const { return map_; } |
| 136 | 137 |
| 137 // Passes the underlying storage and resets this map to null. | 138 // Passes the underlying storage and resets this map to null. |
| 138 // | |
| 139 // TODO(yzshen): Consider changing this to a rvalue-ref-qualified conversion | |
| 140 // to std::map<Key, Value> after we move to MSVC 2015. | |
| 141 std::map<Key, Value> PassStorage() { | 139 std::map<Key, Value> PassStorage() { |
| 142 is_null_ = true; | 140 is_null_ = true; |
| 143 return std::move(map_); | 141 return std::move(map_); |
| 144 } | 142 } |
| 145 | 143 |
| 144 operator const std::map<Key, Value>&() const { return map_; } |
| 145 |
| 146 // Swaps the contents of this Map with another Map of the same type (including | 146 // Swaps the contents of this Map with another Map of the same type (including |
| 147 // nullness). | 147 // nullness). |
| 148 void Swap(Map<Key, Value>* other) { | 148 void Swap(Map<Key, Value>* other) { |
| 149 std::swap(is_null_, other->is_null_); | 149 std::swap(is_null_, other->is_null_); |
| 150 map_.swap(other->map_); | 150 map_.swap(other->map_); |
| 151 } | 151 } |
| 152 | 152 |
| 153 // Swaps the contents of this Map with an std::map containing keys and values | 153 // Swaps the contents of this Map with an std::map containing keys and values |
| 154 // of the same type. Since std::map cannot represent the null state, the | 154 // of the same type. Since std::map cannot represent the null state, the |
| 155 // std::map will be empty if Map is null. The Map will always be left in a | 155 // std::map will be empty if Map is null. The Map will always be left in a |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 TypeConverter<STLValue, MojoValue>::Convert(it->second))); | 295 TypeConverter<STLValue, MojoValue>::Convert(it->second))); |
| 296 } | 296 } |
| 297 } | 297 } |
| 298 return result; | 298 return result; |
| 299 } | 299 } |
| 300 }; | 300 }; |
| 301 | 301 |
| 302 } // namespace mojo | 302 } // namespace mojo |
| 303 | 303 |
| 304 #endif // MOJO_PUBLIC_CPP_BINDINGS_MAP_H_ | 304 #endif // MOJO_PUBLIC_CPP_BINDINGS_MAP_H_ |
| OLD | NEW |