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

Side by Side Diff: tools/gn/inherited_libraries.cc

Issue 1083663007: Propagate GN public shared libraries through shared libraries (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more docs Created 5 years, 8 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
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "tools/gn/inherited_libraries.h"
6
7 #include "tools/gn/target.h"
8
9 InheritedLibraries::InheritedLibraries() {
10
Dirk Pranke 2015/04/15 19:31:38 nit: stray blank line?
11 }
12
13 InheritedLibraries::~InheritedLibraries() {
14 }
15
16 std::vector<const Target*> InheritedLibraries::GetOrdered() const {
17 std::vector<const Target*> result;
18 result.resize(map_.size());
19
20 // The indices in the map should be from 0 to the number of items in the
21 // map, so insert directly into the result (with some sanity checks).
22 for (const auto& pair : map_) {
23 size_t index = pair.second.index;
24 DCHECK(index < result.size());
25 DCHECK(!result[index]);
26 result[index] = pair.first;
27 }
28
29 return result;
30 }
31
32 std::vector<std::pair<const Target*, bool>>
33 InheritedLibraries::GetOrderedAndPublicFlag() const {
34 std::vector<std::pair<const Target*, bool>> result;
35 result.resize(map_.size());
36
37 for (const auto& pair : map_) {
38 size_t index = pair.second.index;
39 DCHECK(index < result.size());
40 DCHECK(!result[index].first);
41 result[index] = std::make_pair(pair.first, pair.second.is_public);
42 }
43
44 return result;
45 }
46
47 void InheritedLibraries::Append(const Target* target, bool is_public) {
48 // Try to insert a new node.
49 auto insert_result = map_.insert(
50 std::make_pair(target, Node(map_.size(), is_public)));
51
52 if (!insert_result.second) {
53 // Element already present, insert failed and insert_result indicates the
54 // old one. The old one may need to have its public flag updated.
55 if (is_public) {
56 Node& existing_node = insert_result.first->second;
57 existing_node.is_public = true;
58 }
59 }
60 }
61
62 void InheritedLibraries::AppendInherited(const InheritedLibraries& other,
63 bool is_public) {
64 // Append all items in order, mark them public only if the're already public
65 // and we're adding them publically.
66 for (const auto& cur : other.GetOrderedAndPublicFlag())
67 Append(cur.first, is_public && cur.second);
68 }
69
70 void InheritedLibraries::AppendPublicSharedLibraries(
71 const InheritedLibraries& other,
72 bool is_public) {
73 for (const auto& cur : other.GetOrderedAndPublicFlag()) {
74 if (cur.first->output_type() == Target::SHARED_LIBRARY && cur.second)
75 Append(cur.first, is_public);
76 }
77 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698