diff options
author | Thiago Farina <tfarina@chromium.org> | 2011-08-26 23:58:28 (GMT) |
---|---|---|
committer | Thiago Farina <tfarina@chromium.org> | 2011-09-03 18:16:08 (GMT) |
commit | 3bf1d4b3f0528157caca622595de53e40b2849a0 (patch) | |
tree | 38f17f21b1cb02f419fc6cac3f2eca4eeead3fdc /src/state.h | |
parent | 35db614cf7bd94bfd816a03a32b88286b8abdcd1 (diff) | |
download | Ninja-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.h | 68 |
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_ |