c16a373b7945bf1caf142956f5545848d28ce2d6
[model-checker-benchmarks.git] / include / unrelacy.h
1 #ifndef __UNRELACY_H__
2 #define __UNRELACY_H__
3
4 #include <stdatomic.h>
5 #include <stdlib.h>
6 #include <stdio.h>
7 #include <mutex>
8 #include <condition_variable>
9
10 #include <model-assert.h>
11
12 #define $
13
14 #define ASSERT(expr) MODEL_ASSERT(expr)
15 #define RL_ASSERT(expr) MODEL_ASSERT(expr)
16
17 #define RL_NEW new
18 #define RL_DELETE(expr) delete expr
19
20 #define mo_seqcst memory_order_relaxed
21 #define mo_release memory_order_release
22 #define mo_acquire memory_order_acquire
23 #define mo_acq_rel memory_order_acq_rel
24 #define mo_relaxed memory_order_relaxed
25
26 namespace rl {
27
28         template <typename T>
29         struct var {
30                 var() { value = 0; }
31                 var(T v) { value = v; }
32                 var(var const& r) { value = r.value; }
33                 ~var() { }
34
35                 void operator = (T v) { value = v; }
36                 T operator () () { return value; }
37                 void operator += (T v) { value += v; }
38                 bool operator == (const struct var<T> v) const { return value == v.value; }
39
40                 T value;
41         };
42
43         class backoff_t
44         {
45          public:
46                 typedef int debug_info_param;
47                 void yield(debug_info_param info) { }
48                 void yield() { }
49         };
50
51
52         typedef backoff_t backoff;
53         typedef backoff_t linear_backoff;
54         typedef backoff_t exp_backoff;
55
56 }
57
58 #endif /* __UNRELACY_H__ */