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

Unified Diff: tools/gn/target.cc

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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/gn/target.h ('k') | tools/gn/target_generator.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/target.cc
diff --git a/tools/gn/target.cc b/tools/gn/target.cc
index a83c60e4491f43f77b63a94a2e1130f75bda2116..1983374cf998084bc1a69c03066a86efe1f4da74 100644
--- a/tools/gn/target.cc
+++ b/tools/gn/target.cc
@@ -13,39 +13,25 @@ namespace {
typedef std::set<const Config*> ConfigSet;
// Merges the dependent configs from the given target to the given config list.
-// The unique_configs list is used for de-duping so values already added will
-// not be added again.
void MergeDirectDependentConfigsFrom(const Target* from_target,
- ConfigSet* unique_configs,
- LabelConfigVector* dest) {
- const LabelConfigVector& direct = from_target->direct_dependent_configs();
- for (size_t i = 0; i < direct.size(); i++) {
- if (unique_configs->find(direct[i].ptr) == unique_configs->end()) {
- unique_configs->insert(direct[i].ptr);
- dest->push_back(direct[i]);
- }
- }
+ UniqueVector<LabelConfigPair>* dest) {
+ const UniqueVector<LabelConfigPair>& direct =
+ from_target->direct_dependent_configs();
+ for (size_t i = 0; i < direct.size(); i++)
+ dest->push_back(direct[i]);
}
// Like MergeDirectDependentConfigsFrom above except does the "all dependent"
// ones. This additionally adds all configs to the all_dependent_configs_ of
// the dest target given in *all_dest.
void MergeAllDependentConfigsFrom(const Target* from_target,
- ConfigSet* unique_configs,
- LabelConfigVector* dest,
- LabelConfigVector* all_dest) {
- const LabelConfigVector& all = from_target->all_dependent_configs();
+ UniqueVector<LabelConfigPair>* dest,
+ UniqueVector<LabelConfigPair>* all_dest) {
+ const UniqueVector<LabelConfigPair>& all =
+ from_target->all_dependent_configs();
for (size_t i = 0; i < all.size(); i++) {
- // Always add it to all_dependent_configs_ since it might not be in that
- // list even if we've seen it applied to this target before. This may
- // introduce some duplicates in all_dependent_configs_, but those will
- // we removed when they're actually applied to a target.
all_dest->push_back(all[i]);
- if (unique_configs->find(all[i].ptr) == unique_configs->end()) {
- // One we haven't seen yet, also apply it to ourselves.
- dest->push_back(all[i]);
- unique_configs->insert(all[i].ptr);
- }
+ dest->push_back(all[i]);
}
}
@@ -110,26 +96,10 @@ void Target::OnResolved() {
}
}
- // Only add each config once. First remember the target's configs.
- ConfigSet unique_configs;
- for (size_t i = 0; i < configs_.size(); i++)
- unique_configs.insert(configs_[i].ptr);
-
// Copy our own dependent configs to the list of configs applying to us.
- for (size_t i = 0; i < all_dependent_configs_.size(); i++) {
- if (unique_configs.find(all_dependent_configs_[i].ptr) ==
- unique_configs.end()) {
- unique_configs.insert(all_dependent_configs_[i].ptr);
- configs_.push_back(all_dependent_configs_[i]);
- }
- }
- for (size_t i = 0; i < direct_dependent_configs_.size(); i++) {
- if (unique_configs.find(direct_dependent_configs_[i].ptr) ==
- unique_configs.end()) {
- unique_configs.insert(direct_dependent_configs_[i].ptr);
- configs_.push_back(direct_dependent_configs_[i]);
- }
- }
+ configs_.Append(all_dependent_configs_.begin(), all_dependent_configs_.end());
+ configs_.Append(direct_dependent_configs_.begin(),
+ direct_dependent_configs_.end());
// Copy our own libs and lib_dirs to the final set. This will be from our
// target and all of our configs. We do this specially since these must be
@@ -146,7 +116,7 @@ void Target::OnResolved() {
// be treated as direct dependencies of A, so this is unnecessary and will
// actually result in duplicated settings (since settings will also be
// pulled from G to A in case G has configs directly on it).
- PullDependentTargetInfo(&unique_configs);
+ PullDependentTargetInfo();
}
PullForwardedDependentConfigs();
PullRecursiveHardDeps();
@@ -156,28 +126,25 @@ bool Target::IsLinkable() const {
return output_type_ == STATIC_LIBRARY || output_type_ == SHARED_LIBRARY;
}
-void Target::PullDependentTargetInfo(std::set<const Config*>* unique_configs) {
+void Target::PullDependentTargetInfo() {
// Gather info from our dependents we need.
for (size_t dep_i = 0; dep_i < deps_.size(); dep_i++) {
const Target* dep = deps_[dep_i].ptr;
- MergeAllDependentConfigsFrom(dep, unique_configs, &configs_,
- &all_dependent_configs_);
- MergeDirectDependentConfigsFrom(dep, unique_configs, &configs_);
+ MergeAllDependentConfigsFrom(dep, &configs_, &all_dependent_configs_);
+ MergeDirectDependentConfigsFrom(dep, &configs_);
// Direct dependent libraries.
if (dep->output_type() == STATIC_LIBRARY ||
dep->output_type() == SHARED_LIBRARY ||
dep->output_type() == SOURCE_SET)
- inherited_libraries_.insert(dep);
+ inherited_libraries_.push_back(dep);
// Inherited libraries and flags are inherited across static library
// boundaries.
if (dep->output_type() != SHARED_LIBRARY &&
dep->output_type() != EXECUTABLE) {
- const std::set<const Target*> inherited = dep->inherited_libraries();
- for (std::set<const Target*>::const_iterator i = inherited.begin();
- i != inherited.end(); ++i)
- inherited_libraries_.insert(*i);
+ inherited_libraries_.Append(dep->inherited_libraries().begin(),
+ dep->inherited_libraries().end());
// Inherited library settings.
all_lib_dirs_.append(dep->all_lib_dirs());
@@ -188,8 +155,10 @@ void Target::PullDependentTargetInfo(std::set<const Config*>* unique_configs) {
void Target::PullForwardedDependentConfigs() {
// Groups implicitly forward all if its dependency's configs.
- if (output_type() == GROUP)
- forward_dependent_configs_ = deps_;
+ if (output_type() == GROUP) {
+ for (size_t i = 0; i < deps_.size(); i++)
+ forward_dependent_configs_.push_back(deps_[i]);
+ }
// Forward direct dependent configs if requested.
for (size_t dep = 0; dep < forward_dependent_configs_.size(); dep++) {
@@ -200,8 +169,7 @@ void Target::PullForwardedDependentConfigs() {
DCHECK(std::find_if(deps_.begin(), deps_.end(),
LabelPtrPtrEquals<Target>(from_target)) !=
deps_.end());
- direct_dependent_configs_.insert(
- direct_dependent_configs_.end(),
+ direct_dependent_configs_.Append(
from_target->direct_dependent_configs().begin(),
from_target->direct_dependent_configs().end());
}
« no previous file with comments | « tools/gn/target.h ('k') | tools/gn/target_generator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698