deque: re-insert deleted MODEL_ASSERT()
[model-checker-benchmarks.git] / spsc-queue / queue.h
index d65477bf71d99f62edb54220cd2447b5611fcc52..c77425f5b662f1de1982e9738ede23bcff4e4a07 100644 (file)
@@ -1,3 +1,6 @@
+#include <unrelacy.h>
+#include <atomic>
+
 #include "eventcount.h"
 
 template<typename T>
@@ -6,22 +9,22 @@ class spsc_queue
 public:
        spsc_queue()
        {
-               node* n = RL_NEW node ();
-               head($) = n;
-               tail($) = n;
+               node* n = new node ();
+               head = n;
+               tail = n;
        }
 
        ~spsc_queue()
        {
-               RL_ASSERT(head($) == tail($));
-               RL_DELETE((node*)head($));
+               RL_ASSERT(head == tail);
+               delete ((node*)head($));
        }
 
        void enqueue(T data)
        {
-               node* n = RL_NEW node (data);
-               head($)->next($).store(n, std::memory_order_release);
-               head($) = n;
+               node* n = new node (data);
+               head($)->next.store(n, std::memory_order_release);
+               head = n;
                ec.signal_relaxed();
        }
 
@@ -49,9 +52,10 @@ private:
                rl::var<T> data;
 
                node(T data = T())
-                       : next(0)
-                       , data(data)
-               {}
+                       : data(data)
+               {
+                       next = 0;
+               }
        };
 
        rl::var<node*> head;
@@ -62,12 +66,12 @@ private:
        T try_dequeue()
        {
                node* t = tail($);
-               node* n = t->next($).load(std::memory_order_acquire);
+               node* n = t->next.load(std::memory_order_acquire);
                if (0 == n)
                        return 0;
                T data = n->data($);
-               RL_DELETE(t);
-               tail($) = n;
+               delete (t);
+               tail = n;
                return data;
        }
 };