X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=nodestack.h;h=3cffac9c9b2219905020262302f4c580f9f03784;hb=8d4a273698366b54612e40742ef6fb7bd63c7090;hp=a857084ba1fe8676b0b2c5b8e57fc8a873a77bc0;hpb=ab9a8cb068ff8fbc2f913c2c4be0fb4cede98743;p=model-checker.git diff --git a/nodestack.h b/nodestack.h index a857084..3cffac9 100644 --- a/nodestack.h +++ b/nodestack.h @@ -16,22 +16,6 @@ class ModelAction; class Thread; -/** - * A flag used for the promise counting/combination problem within a node, - * denoting whether a particular Promise is - *
  1. @b applicable: can be satisfied by this Node's ModelAction and
  2. - *
  3. @b fulfilled: satisfied by this Node's ModelAction under the current - * configuration.
- */ - -#define PROMISE_IGNORE 0 /**< This promise is inapplicable; ignore it */ -#define PROMISE_UNFULFILLED 1 /**< This promise is applicable but unfulfilled */ -#define PROMISE_FULFILLED 2 /**< This promise is applicable and fulfilled */ -#define PROMISE_MASK 0xf -#define PROMISE_RMW 0x10 - -typedef int promise_t; - struct fairness_info { unsigned int enabled_count; unsigned int turns; @@ -40,6 +24,7 @@ struct fairness_info { typedef enum { READ_FROM_PAST, + READ_FROM_PROMISE, READ_FROM_FUTURE, READ_FROM_NONE, } read_from_type_t; @@ -89,13 +74,20 @@ public: const ModelAction * get_read_from_past(int i) const; int get_read_from_past_size() const; + void add_read_from_promise(const ModelAction *reader); + Promise * get_read_from_promise() const; + Promise * get_read_from_promise(int i) const; + int get_read_from_promise_size() const; + bool add_future_value(struct future_value fv); struct future_value get_future_value() const; - void set_promise(unsigned int i, bool is_rmw); + void set_promise(unsigned int i); bool get_promise(unsigned int i) const; bool increment_promise(); bool promise_empty() const; + void clear_promise_resolutions(); + enabled_type_t *get_enabled_array() {return enabled_array;} void set_misc_max(int i); @@ -116,6 +108,8 @@ private: bool read_from_past_empty() const; bool increment_read_from_past(); + bool read_from_promise_empty() const; + bool increment_read_from_promise(); bool future_value_empty() const; bool increment_future_value(); read_from_type_t read_from_status; @@ -136,10 +130,15 @@ private: std::vector< const ModelAction *, ModelAlloc< const ModelAction * > > read_from_past; unsigned int read_from_past_idx; + std::vector< const ModelAction *, ModelAlloc > read_from_promises; + int read_from_promise_idx; + std::vector< struct future_value, ModelAlloc > future_values; - std::vector< promise_t, ModelAlloc > promises; int future_index; + std::vector< bool, ModelAlloc > resolve_promise; + int resolve_promise_idx; + std::vector< const ModelAction *, ModelAlloc > relseq_break_writes; int relseq_break_index;