X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=promise.h;h=1560b5809dec9672310c5a65fb3c9c28f3841309;hb=c5703c61b49d29d3f56fdcb06847f2aa811eeb4e;hp=4131470457cc7e4eb2ed2520ed2489aa8f3de66e;hpb=d7ef8a452c36e2ab3e56a8c43639006dc64d5d18;p=model-checker.git diff --git a/promise.h b/promise.h index 4131470..1560b58 100644 --- a/promise.h +++ b/promise.h @@ -8,12 +8,13 @@ #define __PROMISE_H__ #include -#include #include "modeltypes.h" #include "mymemory.h" +#include "stl-model.h" class ModelAction; +class ModelExecution; struct future_value { uint64_t value; @@ -23,7 +24,7 @@ struct future_value { class Promise { public: - Promise(ModelAction *read, struct future_value fv); + Promise(const ModelExecution *execution, ModelAction *read, struct future_value fv); bool add_reader(ModelAction *reader); ModelAction * get_reader(unsigned int i) const; unsigned int get_num_readers() const { return readers.size(); } @@ -36,12 +37,15 @@ class Promise { int get_num_available_threads() const { return num_available_threads; } bool is_compatible(const ModelAction *act) const; bool is_compatible_exclusive(const ModelAction *act) const; + bool same_value(const ModelAction *write) const; bool same_location(const ModelAction *act) const; modelclock_t get_expiration() const { return fv.expiration; } uint64_t get_value() const { return fv.value; } struct future_value get_fv() const { return fv; } + int get_index() const; + void print() const; bool equals(const Promise *x) const { return this == x; } @@ -49,16 +53,19 @@ class Promise { SNAPSHOTALLOC private: + /** @brief The execution which created this Promise */ + const ModelExecution *execution; + /** @brief Thread ID(s) for thread(s) that potentially can satisfy this * promise */ - std::vector< bool, SnapshotAlloc > available_thread; + SnapVector available_thread; int num_available_threads; const future_value fv; /** @brief The action(s) which read the promised future value */ - std::vector< ModelAction *, SnapshotAlloc > readers; + SnapVector readers; const ModelAction *write; };