#include "gn/inherited_libraries.h"
#include "gn/target.h"
InheritedLibraries::InheritedLibraries() = default;
InheritedLibraries::~InheritedLibraries() = default;
std::vector<std::pair<const Target*, bool>>
InheritedLibraries::GetOrderedAndPublicFlag() const {
std::vector<std::pair<const Target*, bool>> result;
result.reserve(targets_.size());
for (size_t i = 0; i < targets_.size(); ++i)
result.emplace_back(targets_[i], public_flags_[i]);
return result;
}
void InheritedLibraries::Append(const Target* target, bool is_public) {
auto ret = targets_.PushBackWithIndex(target);
if (ret.first) {
public_flags_.push_back(is_public);
} else if (is_public) {
public_flags_[ret.second] = true;
}
}
void InheritedLibraries::AppendInherited(const InheritedLibraries& other,
bool is_public) {
for (size_t i = 0; i < other.targets_.size(); ++i) {
Append(other.targets_[i], is_public && other.public_flags_[i]);
}
}
void InheritedLibraries::AppendPublicSharedLibraries(
const InheritedLibraries& other,
bool is_public) {
for (size_t i = 0; i < other.targets_.size(); ++i) {
const Target* target = other.targets_[i];
if (target->output_type() == Target::SHARED_LIBRARY &&
other.public_flags_[i]) {
Append(target, is_public);
}
}
}