polymarket-kernel 0.1.1

Ultra-low latency Polymarket logit jump-diffusion kernel with AVX-512 SoA compute path and lock-free SPSC ring buffer.
#ifndef PM_SPSC_RING_BUFFER_H
#define PM_SPSC_RING_BUFFER_H

#include <stdatomic.h>
#include <stddef.h>
#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

enum { SPSC_CACHELINE_SIZE = 64 };

typedef struct {
    uint64_t market_id;
    double mid_price;
    double implied_vol;
} l2_update_t;

typedef struct {
    _Alignas(SPSC_CACHELINE_SIZE) _Atomic uint64_t head;
    uint8_t head_pad[SPSC_CACHELINE_SIZE - sizeof(_Atomic uint64_t)];

    _Alignas(SPSC_CACHELINE_SIZE) _Atomic uint64_t tail;
    uint8_t tail_pad[SPSC_CACHELINE_SIZE - sizeof(_Atomic uint64_t)];

    l2_update_t *slots;
    uint64_t capacity;
    uint64_t mask;
} spsc_ring_buffer_t;

int spsc_ring_buffer_init(spsc_ring_buffer_t *rb, l2_update_t *slots, uint64_t capacity);
int spsc_ring_buffer_push(spsc_ring_buffer_t *rb, const l2_update_t *msg);
int spsc_ring_buffer_pop(spsc_ring_buffer_t *rb, l2_update_t *out);

uint64_t spsc_ring_buffer_capacity(const spsc_ring_buffer_t *rb);
uint64_t spsc_ring_buffer_len(const spsc_ring_buffer_t *rb);
int spsc_ring_buffer_is_empty(const spsc_ring_buffer_t *rb);
int spsc_ring_buffer_is_full(const spsc_ring_buffer_t *rb);

#ifdef __cplusplus
}
#endif

#endif