diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2019-06-06 10:34:01 +0200 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2019-09-28 14:30:48 +0200 |
commit | 3bddf050230635febc16aabe0ba4f73abeed6663 (patch) | |
tree | 96cee8145c473378ee33083493fbd4e9a62cedf5 /src/tree_sitter/atomic.h | |
parent | 0d9a3c86a1c7143187398e6cb6005ed06a5e2fde (diff) | |
download | rneovim-3bddf050230635febc16aabe0ba4f73abeed6663.tar.gz rneovim-3bddf050230635febc16aabe0ba4f73abeed6663.tar.bz2 rneovim-3bddf050230635febc16aabe0ba4f73abeed6663.zip |
tree-sitter: vendor tree-sitter runtime
tree-sitter/tree-sitter commit 7685b7861ca475664b6ef57e14d1da9acf741275
Included files are:
lib/include/tree-sitter/*.h
lib/src/*.[ch]
LICENSE
Diffstat (limited to 'src/tree_sitter/atomic.h')
-rw-r--r-- | src/tree_sitter/atomic.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/tree_sitter/atomic.h b/src/tree_sitter/atomic.h new file mode 100644 index 0000000000..301ee36700 --- /dev/null +++ b/src/tree_sitter/atomic.h @@ -0,0 +1,42 @@ +#ifndef TREE_SITTER_ATOMIC_H_ +#define TREE_SITTER_ATOMIC_H_ + +#include <stdint.h> + +#ifdef _WIN32 + +#include <windows.h> + +static inline size_t atomic_load(const volatile size_t *p) { + return *p; +} + +static inline uint32_t atomic_inc(volatile uint32_t *p) { + return InterlockedIncrement(p); +} + +static inline uint32_t atomic_dec(volatile uint32_t *p) { + return InterlockedDecrement(p); +} + +#else + +static inline size_t atomic_load(const volatile size_t *p) { +#ifdef __ATOMIC_RELAXED + return __atomic_load_n(p, __ATOMIC_RELAXED); +#else + return __sync_fetch_and_add((volatile size_t *)p, 0); +#endif +} + +static inline uint32_t atomic_inc(volatile uint32_t *p) { + return __sync_add_and_fetch(p, 1u); +} + +static inline uint32_t atomic_dec(volatile uint32_t *p) { + return __sync_sub_and_fetch(p, 1u); +} + +#endif + +#endif // TREE_SITTER_ATOMIC_H_ |