diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2020-03-20 05:46:06 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2020-03-20 05:46:06 +0200 |
commit | a00647acd3b1c08c61234af994c2c29735a9b3ce (patch) | |
tree | 7d4825e084f0bb0914193d337d31907e07b0aaa1 /libbuild2/target.ixx | |
parent | cbcb0b03501ce346ca3778624dcf908e851e6e2e (diff) |
Add ability to query whether target has been matched for action
Diffstat (limited to 'libbuild2/target.ixx')
-rw-r--r-- | libbuild2/target.ixx | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/libbuild2/target.ixx b/libbuild2/target.ixx index f7896d0..3842c37 100644 --- a/libbuild2/target.ixx +++ b/libbuild2/target.ixx @@ -66,6 +66,22 @@ namespace build2 } inline bool target:: + matched (action a) const + { + assert (ctx.phase == run_phase::execute); + + const opstate& s (state[a]); + + // Note that while the target could be being executed, we should see at + // least offset_matched since it must have been "achieved" before the + // phase switch. + // + size_t c (s.task_count.load (memory_order_relaxed) - ctx.count_base ()); + + return c >= offset_matched; + } + + inline bool target:: group_state (action a) const { // We go an extra step and short-circuit to the target state even if the @@ -96,6 +112,7 @@ namespace build2 const opstate& s (state[a]); // Note: already synchronized. + // size_t o (s.task_count.load (memory_order_relaxed) - ctx.count_base ()); if (o == offset_tried) |