summaryrefslogtreecommitdiffstats
path: root/src/state.h
diff options
context:
space:
mode:
authorThiago Farina <tfarina@chromium.org>2011-08-26 23:58:28 (GMT)
committerThiago Farina <tfarina@chromium.org>2011-09-03 18:16:08 (GMT)
commit3bf1d4b3f0528157caca622595de53e40b2849a0 (patch)
tree38f17f21b1cb02f419fc6cac3f2eca4eeead3fdc /src/state.h
parent35db614cf7bd94bfd816a03a32b88286b8abdcd1 (diff)
downloadNinja-3bf1d4b3f0528157caca622595de53e40b2849a0.zip
Ninja-3bf1d4b3f0528157caca622595de53e40b2849a0.tar.gz
Ninja-3bf1d4b3f0528157caca622595de53e40b2849a0.tar.bz2
Factor out State struct from ninja_jumble.cc into its header/source files.
This was a TODO in src/ninja_jumble.cc. Now this task is completed. Signed-off-by: Thiago Farina <tfarina@chromium.org>
Diffstat (limited to 'src/state.h')
-rw-r--r--src/state.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/state.h b/src/state.h
new file mode 100644
index 0000000..ceb7c05
--- /dev/null
+++ b/src/state.h
@@ -0,0 +1,68 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef NINJA_STATE_H_
+#define NINJA_STATE_H_
+#pragma once
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "eval_env.h"
+#include "stat_cache.h"
+
+using namespace std;
+
+struct BuildLog;
+struct Edge;
+struct Node;
+struct Rule;
+
+/// Global state (file status, loaded rules) for a single run.
+struct State {
+ static const Rule kPhonyRule;
+
+ State();
+
+ void AddRule(const Rule* rule);
+ const Rule* LookupRule(const string& rule_name);
+ Edge* AddEdge(const Rule* rule);
+ Node* GetNode(const string& path);
+ Node* LookupNode(const string& path);
+ void AddIn(Edge* edge, const string& path);
+ void AddOut(Edge* edge, const string& path);
+ bool AddDefault(const string& path, string* error);
+
+ /// @return the root node(s) of the graph. (Root nodes have no output edges).
+ /// @param error where to write the error message if somethings went wrong.
+ vector<Node*> RootNodes(string* error);
+ vector<Node*> DefaultNodes(string* error);
+
+ StatCache* stat_cache() { return &stat_cache_; }
+
+ StatCache stat_cache_;
+
+ /// All the rules used in the graph.
+ map<string, const Rule*> rules_;
+
+ /// All the edges of the graph.
+ vector<Edge*> edges_;
+
+ BindingEnv bindings_;
+ vector<Node*> defaults_;
+ struct BuildLog* build_log_;
+};
+
+#endif // NINJA_STATE_H_