unrelacy: define the relacy ASSERT macros, fixup rl::var
[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 #define $
9
10 #define _TEST_ASSERT(expr) \
11         if (!(expr)) { \
12                 printf("Error: assertion failed at %s:%d\n", __FILE__, __LINE__); \
13                 exit(EXIT_FAILURE); \
14         }
15 #define ASSERT(expr) _TEST_ASSERT(expr)
16 #define RL_ASSERT(expr) _TEST_ASSERT(expr)
17
18 #define RL_NEW new
19 #define RL_DELETE(expr) delete expr
20
21 #define mo_seqcst memory_order_relaxed
22 #define mo_release memory_order_release
23 #define mo_acquire memory_order_acquire
24 #define mo_acq_rel memory_order_acq_rel
25 #define mo_relaxed memory_order_relaxed
26
27 namespace rl {
28
29         template <typename T>
30         struct var {
31                 var() { value = 0; }
32                 var(T v) { value = v; }
33                 var(var const& r) { value = r.value; }
34                 ~var() { }
35
36                 void operator = (T v) { value = v; }
37                 T operator () () { return value; }
38                 void operator += (T v) { value += v; }
39                 bool operator == (const struct var<T> v) const { return value == v.value; }
40
41                 T value;
42         };
43
44         class backoff_t
45         {
46          public:
47                 typedef int debug_info_param;
48                 void yield(debug_info_param info) { }
49                 void yield() { }
50         };
51
52
53         typedef backoff_t backoff;
54         typedef backoff_t linear_backoff;
55         typedef backoff_t exp_backoff;
56
57 }
58
59 #endif /* __UNRELACY_H__ */