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

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

Issue 610043002: Convert GN's deps iterator to work with range-based for loops. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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 (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_TARGET_H_ 5 #ifndef TOOLS_GN_TARGET_H_
6 #define TOOLS_GN_TARGET_H_ 6 #define TOOLS_GN_TARGET_H_
7 7
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/basictypes.h" 12 #include "base/basictypes.h"
13 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/strings/string_piece.h" 15 #include "base/strings/string_piece.h"
16 #include "base/synchronization/lock.h" 16 #include "base/synchronization/lock.h"
17 #include "tools/gn/action_values.h" 17 #include "tools/gn/action_values.h"
18 #include "tools/gn/config_values.h" 18 #include "tools/gn/config_values.h"
19 #include "tools/gn/item.h" 19 #include "tools/gn/item.h"
20 #include "tools/gn/label_ptr.h" 20 #include "tools/gn/label_ptr.h"
21 #include "tools/gn/ordered_set.h" 21 #include "tools/gn/ordered_set.h"
22 #include "tools/gn/output_file.h" 22 #include "tools/gn/output_file.h"
23 #include "tools/gn/source_file.h" 23 #include "tools/gn/source_file.h"
24 #include "tools/gn/unique_vector.h" 24 #include "tools/gn/unique_vector.h"
25 25
26 class DepsIteratorRange;
26 class InputFile; 27 class InputFile;
27 class Settings; 28 class Settings;
28 class Token; 29 class Token;
29 class Toolchain; 30 class Toolchain;
30 31
31 class Target : public Item { 32 class Target : public Item {
32 public: 33 public:
33 enum OutputType { 34 enum OutputType {
34 UNKNOWN, 35 UNKNOWN,
35 GROUP, 36 GROUP,
36 EXECUTABLE, 37 EXECUTABLE,
37 SHARED_LIBRARY, 38 SHARED_LIBRARY,
38 STATIC_LIBRARY, 39 STATIC_LIBRARY,
39 SOURCE_SET, 40 SOURCE_SET,
40 COPY_FILES, 41 COPY_FILES,
41 ACTION, 42 ACTION,
42 ACTION_FOREACH, 43 ACTION_FOREACH,
43 }; 44 };
45
46 enum DepsIterationType {
47 DEPS_ALL, // Iterates through all public, private, and data deps.
48 DEPS_LINKED, // Iterates through all non-data dependencies.
49 };
50
44 typedef std::vector<SourceFile> FileList; 51 typedef std::vector<SourceFile> FileList;
45 typedef std::vector<std::string> StringVector; 52 typedef std::vector<std::string> StringVector;
46 53
47 Target(const Settings* settings, const Label& label); 54 Target(const Settings* settings, const Label& label);
48 virtual ~Target(); 55 virtual ~Target();
49 56
50 // Returns a string naming the output type. 57 // Returns a string naming the output type.
51 static const char* GetStringForOutputType(OutputType type); 58 static const char* GetStringForOutputType(OutputType type);
52 59
53 // Item overrides. 60 // Item overrides.
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 FileList& data() { return data_; } 125 FileList& data() { return data_; }
119 126
120 // Returns true if targets depending on this one should have an order 127 // Returns true if targets depending on this one should have an order
121 // dependency. 128 // dependency.
122 bool hard_dep() const { 129 bool hard_dep() const {
123 return output_type_ == ACTION || 130 return output_type_ == ACTION ||
124 output_type_ == ACTION_FOREACH || 131 output_type_ == ACTION_FOREACH ||
125 output_type_ == COPY_FILES; 132 output_type_ == COPY_FILES;
126 } 133 }
127 134
135 // Returns the iterator range which can be used in range-based for loops
136 // to iterate over multiple types of deps in one loop:
137 // for (const auto& pair : target->GetDeps(Target::DEPS_ALL)) ...
138 DepsIteratorRange GetDeps(DepsIterationType type) const;
139
128 // Linked private dependencies. 140 // Linked private dependencies.
129 const LabelTargetVector& private_deps() const { return private_deps_; } 141 const LabelTargetVector& private_deps() const { return private_deps_; }
130 LabelTargetVector& private_deps() { return private_deps_; } 142 LabelTargetVector& private_deps() { return private_deps_; }
131 143
132 // Linked public dependencies. 144 // Linked public dependencies.
133 const LabelTargetVector& public_deps() const { return public_deps_; } 145 const LabelTargetVector& public_deps() const { return public_deps_; }
134 LabelTargetVector& public_deps() { return public_deps_; } 146 LabelTargetVector& public_deps() { return public_deps_; }
135 147
136 // Non-linked dependencies. 148 // Non-linked dependencies.
137 const LabelTargetVector& data_deps() const { return data_deps_; } 149 const LabelTargetVector& data_deps() const { return data_deps_; }
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 }; 325 };
314 #elif defined(COMPILER_MSVC) 326 #elif defined(COMPILER_MSVC)
315 inline size_t hash_value(const Target* t) { 327 inline size_t hash_value(const Target* t) {
316 return reinterpret_cast<size_t>(t); 328 return reinterpret_cast<size_t>(t);
317 } 329 }
318 #endif // COMPILER... 330 #endif // COMPILER...
319 331
320 } // namespace BASE_HASH_NAMESPACE 332 } // namespace BASE_HASH_NAMESPACE
321 333
322 #endif // TOOLS_GN_TARGET_H_ 334 #endif // TOOLS_GN_TARGET_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698