15 #ifndef NINJA_GRAPH_H_
16 #define NINJA_GRAPH_H_
36 explicit Node(
const string& path)
73 const string&
path()
const {
return path_; }
76 bool dirty()
const {
return dirty_; }
83 int id()
const {
return id_; }
86 const vector<Edge*>&
out_edges()
const {
return out_edges_; }
89 void Dump(
const char* prefix=
"")
const;
117 explicit Rule(
const string& name) : name_(name) {}
119 const string&
name()
const {
return name_; }
122 void AddBinding(
const string& key,
const EvalString& val);
124 static bool IsReservedBinding(
const string& var);
126 const EvalString* GetBinding(
const string& key)
const;
138 Edge() : rule_(NULL), env_(NULL), outputs_ready_(false), implicit_deps_(0),
139 order_only_deps_(0) {}
142 bool AllInputsReady()
const;
147 string EvaluateCommand(
bool incl_rsp_file =
false);
149 string GetBinding(
const string& key);
150 bool GetBindingBool(
const string& key);
152 void Dump(
const char* prefix=
"")
const;
177 return index >= inputs_.size() - order_only_deps_ - implicit_deps_ &&
178 !is_order_only(index);
181 return index >= inputs_.size() - order_only_deps_;
184 bool is_phony()
const;
193 : state_(state), disk_interface_(disk_interface), deps_log_(deps_log) {}
207 bool LoadDepFile(
Edge* edge,
const string& path,
string* err);
211 bool LoadDepsFromLog(
Edge* edge,
TimeStamp* mtime,
string* err);
215 vector<Node*>::iterator PreallocateSpace(
Edge* edge,
int count);
220 void CreatePhonyInEdge(
Node* node);
233 : build_log_(build_log),
234 disk_interface_(disk_interface),
235 dep_loader_(state, deps_log, disk_interface) {}
241 bool RecomputeDirty(
Edge* edge,
string* err);
245 bool RecomputeOutputDirty(
Edge* edge,
Node* most_recent_input,
247 const string& command,
Node* output);
257 return dep_loader_.deps_log();
266 #endif // NINJA_GRAPH_H_