+class Thread;
+
+/**
+ * A flag used for the promise counting/combination problem within a node,
+ * denoting whether a particular Promise is
+ * <ol><li>@b applicable: can be satisfied by this Node's ModelAction and</li>
+ * <li>@b fulfilled: satisfied by this Node's ModelAction under the current
+ * configuration.</li></ol>
+ */
+
+#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 future_value {
+ uint64_t value;
+ modelclock_t expiration;
+};
+
+struct fairness_info {
+ unsigned int enabled_count;
+ unsigned int turns;
+ bool priority;
+};