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