mirror of
https://github.com/Ryujinx/libsoundio.git
synced 2025-06-12 08:15:38 +00:00
List<T> is now a really ugly macro. Added a workaround for jack.h not putting `void` in function prototypes for functions that take no arguments. I made upstream pull requests to jack1 and jack2 but I don't have high hopes about them getting merged. I removed the lock-free atomic asserts. clang reports non-lock-free atomics when in fact it does have lock-free atomics. I inspected the generated code for gcc and clang for fetch_add, load, and store, on x86_64 and armhf, and it's all lock free. Closes #45.
34 lines
776 B
C
34 lines
776 B
C
/*
|
|
* Copyright (c) 2015 Andrew Kelley
|
|
*
|
|
* This file is part of libsoundio, which is MIT licensed.
|
|
* See http://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#ifndef SOUNDIO_ATOMICS_H
|
|
#define SOUNDIO_ATOMICS_H
|
|
|
|
// Simple wrappers around atomic values so that the compiler will catch it if
|
|
// I accidentally use operators such as +, -, += on them.
|
|
|
|
#include <stdatomic.h>
|
|
|
|
struct SoundIoAtomicLong {
|
|
atomic_long x;
|
|
};
|
|
|
|
struct SoundIoAtomicInt {
|
|
atomic_int x;
|
|
};
|
|
|
|
struct SoundIoAtomicBool {
|
|
atomic_bool x;
|
|
};
|
|
|
|
#define SOUNDIO_ATOMIC_LOAD(a) atomic_load(&a.x)
|
|
#define SOUNDIO_ATOMIC_FETCH_ADD(a, delta) atomic_fetch_add(&a.x, delta)
|
|
#define SOUNDIO_ATOMIC_STORE(a, value) atomic_store(&a.x, value)
|
|
#define SOUNDIO_ATOMIC_EXCHANGE(a, value) atomic_exchange(&a.x, value)
|
|
|
|
#endif
|