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(); |
+} |