Ninja
Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
Plan Struct Reference

Plan stores the state of a build plan: what we intend to build, which steps we're ready to execute. More...

#include <build.h>

Public Types

enum  EdgeResult { kEdgeFailed, kEdgeSucceeded }
 

Public Member Functions

bool AddTarget (Node *node, string *err)
 Add a target to our plan (including all its dependencies). More...
 
bool CleanNode (DependencyScan *scan, Node *node, string *err)
 Clean the given node during the build. More...
 
int command_edge_count () const
 Number of edges with commands to run. More...
 
void Dump ()
 Dumps the current state of the plan. More...
 
void EdgeFinished (Edge *edge, EdgeResult result)
 Mark an edge as done building (whether it succeeded or failed). More...
 
EdgeFindWork ()
 
bool more_to_do () const
 Returns true if there's more work to be done. More...
 
 Plan ()
 
void Reset ()
 Reset state. Clears want and ready sets. More...
 

Private Types

enum  Want { kWantNothing, kWantToStart, kWantToFinish }
 Enumerate possible steps we want for an edge. More...
 

Private Member Functions

bool AddSubTarget (Node *node, Node *dependent, string *err)
 
void NodeFinished (Node *node)
 
void ScheduleWork (map< Edge *, Want >::iterator want_e)
 Submits a ready edge as a candidate for execution. More...
 

Private Attributes

int command_edges_
 Total number of edges that have commands (not phony). More...
 
set< Edge * > ready_
 
map< Edge *, Wantwant_
 Keep track of which edges we want to build in this plan. More...
 
int wanted_edges_
 Total remaining number of wanted edges. More...
 

Detailed Description

Plan stores the state of a build plan: what we intend to build, which steps we're ready to execute.

Definition at line 42 of file build.h.

Member Enumeration Documentation

◆ EdgeResult

Enumerator
kEdgeFailed 
kEdgeSucceeded 

Definition at line 60 of file build.h.

◆ Want

enum Plan::Want
private

Enumerate possible steps we want for an edge.

Enumerator
kWantNothing 

We do not want to build the edge, but we might want to build one of its dependents.

kWantToStart 

We want to build the edge, but have not yet scheduled it.

kWantToFinish 

We want to build the edge, have scheduled it, and are waiting for it to complete.

Definition at line 83 of file build.h.

Constructor & Destructor Documentation

◆ Plan()

Plan::Plan ( )

Definition at line 290 of file build.cc.

Member Function Documentation

◆ AddSubTarget()

bool Plan::AddSubTarget ( Node node,
Node dependent,
string *  err 
)
private

◆ AddTarget()

bool Plan::AddTarget ( Node node,
string *  err 
)

Add a target to our plan (including all its dependencies).

Returns false if we don't need to build this target; may fill in |err| with an error message if there's a problem.

Definition at line 299 of file build.cc.

References AddSubTarget().

Referenced by Builder::AddTarget(), TEST_F(), and PlanTest::TestPoolWithDepthOne().

◆ CleanNode()

bool Plan::CleanNode ( DependencyScan scan,
Node node,
string *  err 
)

Clean the given node during the build.

Return false on error.

Definition at line 426 of file build.cc.

References command_edges_, Node::dirty(), kWantNothing, MEM_FN, Node::mtime(), Node::out_edges(), DependencyScan::RecomputeOutputsDirty(), Node::set_dirty(), want_, and wanted_edges_.

Referenced by Builder::FinishCommand().

◆ command_edge_count()

int Plan::command_edge_count ( ) const
inline

Number of edges with commands to run.

Definition at line 73 of file build.h.

References command_edges_.

Referenced by Builder::Build(), Builder::FinishCommand(), and TEST_F().

◆ Dump()

void Plan::Dump ( )

Dumps the current state of the plan.

Definition at line 483 of file build.cc.

References kWantNothing, ready_, and want_.

◆ EdgeFinished()

void Plan::EdgeFinished ( Edge edge,
EdgeResult  result 
)

◆ FindWork()

Edge * Plan::FindWork ( )

Definition at line 348 of file build.cc.

References ready_.

Referenced by Builder::Build(), PlanTest::FindWorkSorted(), and PlanTest::TestPoolWithDepthOne().

◆ more_to_do()

bool Plan::more_to_do ( ) const
inline

Returns true if there's more work to be done.

Definition at line 55 of file build.h.

References command_edges_, and wanted_edges_.

Referenced by Builder::AlreadyUpToDate(), Builder::Build(), PlanTest::FindWorkSorted(), TEST_F(), and PlanTest::TestPoolWithDepthOne().

◆ NodeFinished()

void Plan::NodeFinished ( Node node)
private

Definition at line 405 of file build.cc.

References EdgeFinished(), kEdgeSucceeded, kWantNothing, Node::out_edges(), ScheduleWork(), and want_.

Referenced by EdgeFinished().

◆ Reset()

void Plan::Reset ( )

Reset state. Clears want and ready sets.

Definition at line 292 of file build.cc.

References command_edges_, ready_, want_, and wanted_edges_.

◆ ScheduleWork()

void Plan::ScheduleWork ( map< Edge *, Want >::iterator  want_e)
private

Submits a ready edge as a candidate for execution.

The edge may be delayed from running, for example if it's a member of a currently-full pool.

Definition at line 357 of file build.cc.

References Pool::DelayEdge(), Pool::EdgeScheduled(), kWantToFinish, kWantToStart, Edge::pool(), ready_, Pool::RetrieveReadyEdges(), and Pool::ShouldDelayEdge().

Referenced by AddSubTarget(), and NodeFinished().

Member Data Documentation

◆ command_edges_

int Plan::command_edges_
private

Total number of edges that have commands (not phony).

Definition at line 109 of file build.h.

Referenced by AddSubTarget(), CleanNode(), command_edge_count(), more_to_do(), and Reset().

◆ ready_

set<Edge*> Plan::ready_
private

Definition at line 106 of file build.h.

Referenced by Dump(), EdgeFinished(), FindWork(), Reset(), and ScheduleWork().

◆ want_

map<Edge*, Want> Plan::want_
private

Keep track of which edges we want to build in this plan.

If this map does not contain an entry for an edge, we do not want to build the entry or its dependents. If it does contain an entry, the enumeration indicates what we want for the edge.

Definition at line 104 of file build.h.

Referenced by AddSubTarget(), CleanNode(), Dump(), EdgeFinished(), NodeFinished(), and Reset().

◆ wanted_edges_

int Plan::wanted_edges_
private

Total remaining number of wanted edges.

Definition at line 112 of file build.h.

Referenced by AddSubTarget(), CleanNode(), EdgeFinished(), more_to_do(), and Reset().


The documentation for this struct was generated from the following files: