1 /*
2  * Copyright (C) 2015-2017 Alibaba Group Holding Limited
3  */
4 
5 #ifndef K_ATOMIC_H
6 #define K_ATOMIC_H
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 typedef unsigned int    atomic_t;
13 typedef atomic_t        atomic_val_t;
14 
15 extern atomic_val_t rhino_atomic_add(atomic_t *target, atomic_val_t value);
16 extern atomic_val_t rhino_atomic_sub(atomic_t *target, atomic_val_t value);
17 extern atomic_val_t rhino_atomic_inc(atomic_t *target);
18 extern atomic_val_t rhino_atomic_dec(atomic_t *target);
19 extern atomic_val_t rhino_atomic_set(atomic_t *target, atomic_val_t value);
20 extern atomic_val_t rhino_atomic_get(const atomic_t *target);
21 extern atomic_val_t rhino_atomic_or(atomic_t *target, atomic_val_t value);
22 extern atomic_val_t rhino_atomic_xor(atomic_t *target, atomic_val_t value);
23 extern atomic_val_t rhino_atomic_and(atomic_t *target, atomic_val_t value);
24 extern atomic_val_t rhino_atomic_nand(atomic_t *target, atomic_val_t value);
25 extern atomic_val_t rhino_atomic_clear(atomic_t *target);
26 extern int rhino_atomic_cas(atomic_t *target, atomic_val_t old_value,
27 			                atomic_val_t new_value);
28 
29 #ifdef __cplusplus
30 }
31 #endif
32 
33 #endif /* K_ATOMIC_H */
34 
35