Files
virtual-controller/extension-reaper-macos/vendor/reaper-sdk/WDL/wdlatomic.h
T
Paul Lipscomb cd5ebd84d6 Add bare-minimum extension-reaper-macos REAPER extension skeleton
C/C++ extension built directly against the vendored Cockos reaper-sdk
headers (no Rust/reaper-rs wrapper layer). Loads, registers a test
action, and confirms via REAPER's console — confirmed working in
REAPER 2026-07-15.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 19:12:33 -04:00

36 lines
1.6 KiB
C

#ifndef _WDL_ATOMIC_H_
#define _WDL_ATOMIC_H_
#include "wdltypes.h"
#ifdef _WIN32
static int wdl_atomic_incr(int *v) { return (int) InterlockedIncrement((LONG *)v); }
static int wdl_atomic_decr(int *v) { return (int) InterlockedDecrement((LONG *)v); }
static int wdl_atomic_incr(volatile int *v) { return (int) InterlockedIncrement((LONG *)v); }
static int wdl_atomic_decr(volatile int *v) { return (int) InterlockedDecrement((LONG *)v); }
#elif (!defined(__APPLE__) || !defined(__ppc__)) && (defined(__clang__) || (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))))
static WDL_STATICFUNC_UNUSED int wdl_atomic_incr(int *v) { return __sync_add_and_fetch(v,1); }
static WDL_STATICFUNC_UNUSED int wdl_atomic_decr(int *v) { return __sync_add_and_fetch(v,~0); }
static WDL_STATICFUNC_UNUSED int wdl_atomic_incr(volatile int *v) { return __sync_add_and_fetch(v,1); }
static WDL_STATICFUNC_UNUSED int wdl_atomic_decr(volatile int *v) { return __sync_add_and_fetch(v,~0); }
#elif defined(__APPLE__)
// used by GCC < 4.2 on OSX
#include <libkern/OSAtomic.h>
static WDL_STATICFUNC_UNUSED int wdl_atomic_incr(int *v) { return (int) OSAtomicIncrement32Barrier((int32_t*)v); }
static WDL_STATICFUNC_UNUSED int wdl_atomic_decr(int *v) { return (int) OSAtomicDecrement32Barrier((int32_t*)v); }
static WDL_STATICFUNC_UNUSED int wdl_atomic_incr(volatile int *v) { return (int) OSAtomicIncrement32Barrier((int32_t*)v); }
static WDL_STATICFUNC_UNUSED int wdl_atomic_decr(volatile int *v) { return (int) OSAtomicDecrement32Barrier((int32_t*)v); }
#else
// unsupported!
#pragma message("Need win32 or apple or gcc 4.2+ for wdlatomic.h, doh")
#endif
#endif