| Index: tools/gn/item_node.cc
|
| diff --git a/tools/gn/item_node.cc b/tools/gn/item_node.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..776a126b19036b73cd32651aa44c34357832b872
|
| --- /dev/null
|
| +++ b/tools/gn/item_node.cc
|
| @@ -0,0 +1,51 @@
|
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "tools/gn/item_node.h"
|
| +
|
| +#include <algorithm>
|
| +
|
| +#include "base/callback.h"
|
| +#include "base/logging.h"
|
| +#include "tools/gn/item.h"
|
| +
|
| +ItemNode::ItemNode(Item* i)
|
| + : state_(REFERENCED),
|
| + item_(i) {
|
| +}
|
| +
|
| +ItemNode::~ItemNode() {
|
| +}
|
| +
|
| +void ItemNode::AddDependency(ItemNode* node) {
|
| + if (direct_dependencies_.find(node) != direct_dependencies_.end())
|
| + return; // Already have this dep.
|
| + direct_dependencies_.insert(node);
|
| +
|
| + if (node->state() != RESOLVED) {
|
| + // Wire up the pending resolution info.
|
| + unresolved_dependencies_.insert(node);
|
| + node->waiting_on_resolution_.insert(this);
|
| + }
|
| +}
|
| +
|
| +void ItemNode::MarkDirectDependencyResolved(ItemNode* node) {
|
| + DCHECK(unresolved_dependencies_.find(node) != unresolved_dependencies_.end());
|
| + unresolved_dependencies_.erase(node);
|
| +}
|
| +
|
| +void ItemNode::SwapOutWaitingDependencySet(ItemNodeSet* out_set) {
|
| + waiting_on_resolution_.swap(*out_set);
|
| +}
|
| +
|
| +void ItemNode::SetGenerated() {
|
| + state_ = GENERATED;
|
| +}
|
| +
|
| +void ItemNode::SetResolved() {
|
| + state_ = RESOLVED;
|
| +
|
| + if (!resolved_closure_.is_null())
|
| + resolved_closure_.Run();
|
| +}
|
|
|