model: refactor add_future_value, add documentation
[c11tester.git] / threads-model.h
index 30acd2deba1f50e27a15d1c2d74a649809cf004a..eb0fd438d388931ef0316231abd828d6e5295581 100644 (file)
@@ -7,11 +7,11 @@
 
 #include <ucontext.h>
 #include <stdint.h>
-#include <vector>
 
 #include "mymemory.h"
 #include <threads.h>
 #include "modeltypes.h"
+#include "stl-model.h"
 
 struct thread_params {
        thrd_start_t func;
@@ -41,7 +41,7 @@ class ModelAction;
 class Thread {
 public:
        Thread(thread_id_t tid);
-       Thread(thrd_t *t, void (*func)(void *), void *a, Thread * parent_thrd = NULL);
+       Thread(thrd_t *t, void (*func)(void *), void *a, Thread *parent);
        ~Thread();
        void complete();
 
@@ -104,6 +104,8 @@ public:
         *  @see Thread::pending */
        void set_pending(ModelAction *act) { pending = act; }
 
+       Thread * waiting_on() const;
+
        /**
         * Remove one ModelAction from the waiting list
         * @return The ModelAction that was removed from the waiting list
@@ -124,11 +126,23 @@ public:
         * to allow their allocation/deallocation to follow the same pattern as
         * the rest of the backtracked/replayed program.
         */
+       void * operator new(size_t size) {
+               return Thread_malloc(size);
+       }
+       void operator delete(void *p, size_t size) {
+               Thread_free(p);
+       }
+       void * operator new[](size_t size) {
+               return Thread_malloc(size);
+       }
+       void operator delete[](void *p, size_t size) {
+               Thread_free(p);
+       }
 private:
        int create_context();
 
        /** @brief The parent Thread which created this Thread */
-       Thread *parent;
+       Thread * const parent;
 
        /** @brief The THREAD_CREATE ModelAction which created this Thread */
        ModelAction *creation;
@@ -155,7 +169,7 @@ private:
         * list is used for thread joins, where another Thread waits for this
         * Thread to complete
         */
-       std::vector< ModelAction *, SnapshotAlloc<ModelAction *> > wait_list;
+       SnapVector<ModelAction *> wait_list;
 
        /**
         * The value returned by the last action in this thread