From a00647acd3b1c08c61234af994c2c29735a9b3ce Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 20 Mar 2020 05:46:06 +0200 Subject: Add ability to query whether target has been matched for action --- libbuild2/target.ixx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'libbuild2/target.ixx') 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) -- cgit v1.1