Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(290)

Side by Side Diff: mojo/public/cpp/bindings/array.h

Issue 2339413004: Allow Mojo structs as map keys (Closed)
Patch Set: Fix merge problem in BUILD.gn file Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_ARRAY_H_ 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_ARRAY_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_ARRAY_H_ 6 #define MOJO_PUBLIC_CPP_BINDINGS_ARRAY_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <string.h> 9 #include <string.h>
10 #include <algorithm> 10 #include <algorithm>
11 #include <set> 11 #include <set>
12 #include <string> 12 #include <string>
13 #include <utility> 13 #include <utility>
14 #include <vector> 14 #include <vector>
15 15
16 #include "base/macros.h" 16 #include "base/macros.h"
17 #include "mojo/public/cpp/bindings/lib/array_internal.h" 17 #include "mojo/public/cpp/bindings/lib/array_internal.h"
18 #include "mojo/public/cpp/bindings/lib/bindings_internal.h" 18 #include "mojo/public/cpp/bindings/lib/bindings_internal.h"
19 #include "mojo/public/cpp/bindings/lib/clone_equals_util.h" 19 #include "mojo/public/cpp/bindings/lib/clone_equals_util.h"
20 #include "mojo/public/cpp/bindings/lib/hash_util.h"
20 #include "mojo/public/cpp/bindings/lib/template_util.h" 21 #include "mojo/public/cpp/bindings/lib/template_util.h"
21 #include "mojo/public/cpp/bindings/type_converter.h" 22 #include "mojo/public/cpp/bindings/type_converter.h"
22 23
23 namespace mojo { 24 namespace mojo {
24 25
25 // Represents a moveable array with contents of type |T|. The array can be null, 26 // Represents a moveable array with contents of type |T|. The array can be null,
26 // meaning that no value has been assigned to it. Null is distinct from empty. 27 // meaning that no value has been assigned to it. Null is distinct from empty.
27 template <typename T> 28 template <typename T>
28 class Array { 29 class Array {
29 public: 30 public:
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 176
176 // Indicates whether the contents of this array are equal to |other|. A null 177 // Indicates whether the contents of this array are equal to |other|. A null
177 // array is only equal to another null array. If the element type defines an 178 // array is only equal to another null array. If the element type defines an
178 // Equals() method, it will be used; otherwise == operator will be used. 179 // Equals() method, it will be used; otherwise == operator will be used.
179 bool Equals(const Array& other) const { 180 bool Equals(const Array& other) const {
180 if (is_null() != other.is_null()) 181 if (is_null() != other.is_null())
181 return false; 182 return false;
182 return internal::Equals(vec_, other.vec_); 183 return internal::Equals(vec_, other.vec_);
183 } 184 }
184 185
186 size_t Hash(size_t seed) const {
187 return is_null() ? seed : internal::Hash(seed, vec_);
188 }
189
185 private: 190 private:
186 typedef std::vector<T> Array::*Testable; 191 typedef std::vector<T> Array::*Testable;
187 192
188 public: 193 public:
189 operator Testable() const { return is_null_ ? 0 : &Array::vec_; } 194 operator Testable() const { return is_null_ ? 0 : &Array::vec_; }
190 195
191 private: 196 private:
192 // Forbid the == and != operators explicitly, otherwise Array will be 197 // Forbid the == and != operators explicitly, otherwise Array will be
193 // converted to Testable to do == or != comparison. 198 // converted to Testable to do == or != comparison.
194 template <typename U> 199 template <typename U>
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 if (a.is_null()) 275 if (a.is_null())
271 return !b.is_null(); 276 return !b.is_null();
272 if (b.is_null()) 277 if (b.is_null())
273 return false; 278 return false;
274 return a.storage() < b.storage(); 279 return a.storage() < b.storage();
275 } 280 }
276 281
277 } // namespace mojo 282 } // namespace mojo
278 283
279 #endif // MOJO_PUBLIC_CPP_BINDINGS_ARRAY_H_ 284 #endif // MOJO_PUBLIC_CPP_BINDINGS_ARRAY_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698