X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=promise.cc;h=3a38384721cd3dfdc59b25f59440b432cf62c87b;hb=2d0d4ac38e05905a6633b3f2d5112ccadd45c27f;hp=29e261f04086dca1891d12934bb75596af03000a;hpb=cb7d648c3c1c3d916c7fc60a7cb332eb2b52d510;p=model-checker.git diff --git a/promise.cc b/promise.cc index 29e261f..3a38384 100644 --- a/promise.cc +++ b/promise.cc @@ -2,17 +2,19 @@ #include #include "promise.h" -#include "model.h" +#include "execution.h" #include "schedule.h" #include "action.h" #include "threads-model.h" /** * @brief Promise constructor + * @param execution The execution which is creating this Promise * @param read The read which reads from a promised future value * @param fv The future value that is promised */ -Promise::Promise(ModelAction *read, struct future_value fv) : +Promise::Promise(const ModelExecution *execution, ModelAction *read, struct future_value fv) : + execution(execution), num_available_threads(0), fv(fv), readers(1, read), @@ -98,6 +100,19 @@ bool Promise::thread_is_available(thread_id_t tid) const return available_thread[id]; } +/** + * @brief Get an upper bound on the number of available threads + * + * Gets an upper bound on the number of threads in the available threads set, + * useful for iterating over "thread_is_available()". + * + * @return The upper bound + */ +unsigned int Promise::max_available_thread_idx() const +{ + return available_thread.size(); +} + /** @brief Print debug info about the Promise */ void Promise::print() const { @@ -170,5 +185,5 @@ bool Promise::same_location(const ModelAction *act) const /** @brief Get this Promise's index within the execution's promise array */ int Promise::get_index() const { - return model->get_promise_number(this); + return execution->get_promise_number(this); }