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

Side by Side Diff: tools/gn/label_ptr.h

Issue 26537002: Add a UniqueVector class to GN (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: REview comments, remove npos Created 6 years, 4 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
« no previous file with comments | « tools/gn/label.h ('k') | tools/gn/ninja_binary_target_writer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 TOOLS_GN_LABEL_PTR_H_ 5 #ifndef TOOLS_GN_LABEL_PTR_H_
6 #define TOOLS_GN_LABEL_PTR_H_ 6 #define TOOLS_GN_LABEL_PTR_H_
7 7
8 #include <functional> 8 #include <functional>
9 9
10 #include "tools/gn/label.h"
11
12 class Config;
10 class ParseNode; 13 class ParseNode;
14 class Target;
11 15
12 // Structure that holds a labeled "thing". This is used for various places 16 // Structure that holds a labeled "thing". This is used for various places
13 // where we need to store lists of targets or configs. We sometimes populate 17 // where we need to store lists of targets or configs. We sometimes populate
14 // the pointers on another thread from where we compute the labels, so this 18 // the pointers on another thread from where we compute the labels, so this
15 // structure lets us save them separately. This also allows us to store the 19 // structure lets us save them separately. This also allows us to store the
16 // location of the thing that added this dependency. 20 // location of the thing that added this dependency.
17 template<typename T> 21 template<typename T>
18 struct LabelPtrPair { 22 struct LabelPtrPair {
19 typedef T DestType; 23 typedef T DestType;
20 24
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 // std::sort(vect.begin(), vect.end(), LabelPtrLabelLess<Config>()); 77 // std::sort(vect.begin(), vect.end(), LabelPtrLabelLess<Config>());
74 template<typename T> 78 template<typename T>
75 struct LabelPtrLabelLess : public std::binary_function<LabelPtrPair<T>, 79 struct LabelPtrLabelLess : public std::binary_function<LabelPtrPair<T>,
76 LabelPtrPair<T>, 80 LabelPtrPair<T>,
77 bool> { 81 bool> {
78 bool operator()(const LabelPtrPair<T>& a, const LabelPtrPair<T>& b) const { 82 bool operator()(const LabelPtrPair<T>& a, const LabelPtrPair<T>& b) const {
79 return a.label < b.label; 83 return a.label < b.label;
80 } 84 }
81 }; 85 };
82 86
87 // Default comparison operators -----------------------------------------------
88 //
89 // The default hash and comparison operators operate on the label, which should
90 // always be valid, whereas the pointer is sometimes null.
91
92 template<typename T> inline bool operator==(const LabelPtrPair<T>& a,
93 const LabelPtrPair<T>& b) {
94 return a.label == b.label;
95 }
96
97 template<typename T> inline bool operator<(const LabelPtrPair<T>& a,
98 const LabelPtrPair<T>& b) {
99 return a.label < b.label;
100 }
101
102 namespace BASE_HASH_NAMESPACE {
103
104 #if defined(COMPILER_GCC)
105 template<typename T> struct hash< LabelPtrPair<T> > {
106 std::size_t operator()(const LabelPtrPair<T>& v) const {
107 BASE_HASH_NAMESPACE::hash<Label> h;
108 return h(v.label);
109 }
110 };
111 #elif defined(COMPILER_MSVC)
112 template<typename T>
113 inline size_t hash_value(const LabelPtrPair<T>& v) {
114 return BASE_HASH_NAMESPACE::hash_value(v.label);
115 }
116 #endif // COMPILER...
117
118 } // namespace BASE_HASH_NAMESPACE
119
83 #endif // TOOLS_GN_LABEL_PTR_H_ 120 #endif // TOOLS_GN_LABEL_PTR_H_
OLDNEW
« no previous file with comments | « tools/gn/label.h ('k') | tools/gn/ninja_binary_target_writer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698