INNER CODE UNIT · C
rd
Cateners/tiny_container · app/src/main/cpp/tiny_audio_jni.c:101
uint32_t rd = atomic_load_explicit(&r->read_idx, memory_order_relaxed);
uint32_t w = atomic_load_explicit(&r->write_idx, memory_order_acquire);
uint32_t avail = w - rd;
if (n > avail) n = avail;
if (!n) return 0;
uint32_t off = rd % RING_SIZE, c0 = RING_SIZE - off;
if (c0 > n) c0 = n;
memcpy(dst, r->buf + off, c0);
if (n > c0) memcpy(dst + c0, r->buf, n - c0);
atomic_store_explicit(&r->read_idx, rd + n, memory_order_release);
return n;
}
/* ================================================================= */
/* State */
/* ================================================================= */
typedef struct {
ring_t ring;