OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 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_EDK_SYSTEM_PORTS_NAME_H_ | 5 #ifndef MOJO_EDK_SYSTEM_PORTS_NAME_H_ |
6 #define MOJO_EDK_SYSTEM_PORTS_NAME_H_ | 6 #define MOJO_EDK_SYSTEM_PORTS_NAME_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <ostream> | 10 #include <ostream> |
11 #include <tuple> | 11 #include <tuple> |
12 | 12 |
13 #include "base/hash.h" | 13 #include "base/hash.h" |
14 | 14 |
15 namespace mojo { | 15 namespace mojo { |
16 namespace edk { | 16 namespace edk { |
17 namespace ports { | 17 namespace ports { |
18 | 18 |
19 struct Name { | 19 struct Name { |
20 Name(uint64_t v1, uint64_t v2) : v1(v1), v2(v2) {} | 20 constexpr Name(uint64_t v1, uint64_t v2) : v1(v1), v2(v2) {} |
21 uint64_t v1, v2; | 21 uint64_t v1, v2; |
22 }; | 22 }; |
23 | 23 |
24 inline bool operator==(const Name& a, const Name& b) { | 24 inline bool operator==(const Name& a, const Name& b) { |
25 return a.v1 == b.v1 && a.v2 == b.v2; | 25 return a.v1 == b.v1 && a.v2 == b.v2; |
26 } | 26 } |
27 | 27 |
28 inline bool operator!=(const Name& a, const Name& b) { | 28 inline bool operator!=(const Name& a, const Name& b) { |
29 return !(a == b); | 29 return !(a == b); |
30 } | 30 } |
31 | 31 |
32 inline bool operator<(const Name& a, const Name& b) { | 32 inline bool operator<(const Name& a, const Name& b) { |
33 return std::tie(a.v1, a.v2) < std::tie(b.v1, b.v2); | 33 return std::tie(a.v1, a.v2) < std::tie(b.v1, b.v2); |
34 } | 34 } |
35 | 35 |
36 std::ostream& operator<<(std::ostream& stream, const Name& name); | 36 std::ostream& operator<<(std::ostream& stream, const Name& name); |
37 | 37 |
38 struct PortName : Name { | 38 struct PortName : Name { |
39 PortName() : Name(0, 0) {} | 39 constexpr PortName() : Name(0, 0) {} |
40 PortName(uint64_t v1, uint64_t v2) : Name(v1, v2) {} | 40 constexpr PortName(uint64_t v1, uint64_t v2) : Name(v1, v2) {} |
41 }; | 41 }; |
42 | 42 |
43 const PortName kInvalidPortName = {0, 0}; | |
44 | |
45 struct NodeName : Name { | 43 struct NodeName : Name { |
46 NodeName() : Name(0, 0) {} | 44 constexpr NodeName() : Name(0, 0) {} |
47 NodeName(uint64_t v1, uint64_t v2) : Name(v1, v2) {} | 45 constexpr NodeName(uint64_t v1, uint64_t v2) : Name(v1, v2) {} |
48 }; | 46 }; |
49 | 47 |
50 const NodeName kInvalidNodeName = {0, 0}; | 48 struct constants { |
| 49 static constexpr PortName kInvalidPortName = {0, 0}; |
| 50 static constexpr NodeName kInvalidNodeName = {0, 0}; |
| 51 }; |
51 | 52 |
52 } // namespace ports | 53 } // namespace ports |
53 } // namespace edk | 54 } // namespace edk |
54 } // namespace mojo | 55 } // namespace mojo |
55 | 56 |
56 namespace std { | 57 namespace std { |
57 | 58 |
58 template <> | 59 template <> |
59 struct hash<mojo::edk::ports::PortName> { | 60 struct hash<mojo::edk::ports::PortName> { |
60 std::size_t operator()(const mojo::edk::ports::PortName& name) const { | 61 std::size_t operator()(const mojo::edk::ports::PortName& name) const { |
61 return base::HashInts64(name.v1, name.v2); | 62 return base::HashInts64(name.v1, name.v2); |
62 } | 63 } |
63 }; | 64 }; |
64 | 65 |
65 template <> | 66 template <> |
66 struct hash<mojo::edk::ports::NodeName> { | 67 struct hash<mojo::edk::ports::NodeName> { |
67 std::size_t operator()(const mojo::edk::ports::NodeName& name) const { | 68 std::size_t operator()(const mojo::edk::ports::NodeName& name) const { |
68 return base::HashInts64(name.v1, name.v2); | 69 return base::HashInts64(name.v1, name.v2); |
69 } | 70 } |
70 }; | 71 }; |
71 | 72 |
72 } // namespace std | 73 } // namespace std |
73 | 74 |
74 #endif // MOJO_EDK_SYSTEM_PORTS_NAME_H_ | 75 #endif // MOJO_EDK_SYSTEM_PORTS_NAME_H_ |
OLD | NEW |