Skip to content

File delay_core.h

File List > delay > delay_core.h

Go to the documentation of this file

#ifndef DELAY_CORE_H
#define DELAY_CORE_H

#include "clib_common.h"
#include "jm_perf.h"
#include "dp_state.h"
#ifdef __cplusplus
extern "C"
{
#endif

  typedef struct
  {
    double _Complex *buf; /* 2*capacity elements; second half mirrors first */
    size_t head;          /* write pointer; decrements mod capacity */
    size_t mask;          /* capacity - 1 (power-of-two bitmask) */
    size_t num_taps;      /* window length requested at construction */
    size_t capacity;      /* smallest power-of-two >= num_taps */
  } delay_state_t;

delay_state_t *delay_create(size_t num_taps);

void delay_destroy(delay_state_t *state);

void delay_reset(delay_state_t *state);

void delay_push(delay_state_t *state, double complex x);

size_t delay_ptr_max_out(delay_state_t *state);

size_t delay_ptr(delay_state_t *state, size_t n, double complex *out);

size_t delay_push_ptr_max_out(delay_state_t *state);

  size_t delay_push_ptr (delay_state_t *state, double complex x,
                         double complex *out);

void delay_write(delay_state_t *state, double complex x);

size_t delay_push_ptr(delay_state_t *state, double complex x, double complex *out);
/* ── Serializable state (standard bytes interface; see dp_state.h) ──────────
 * Field-wise: pack running ring buffer + head; capacity/mask/num_taps restored by create. */
#define DELAY_STATE_MAGIC DP_FOURCC ('D','L','A','Y')
#define DELAY_STATE_VERSION 1u
size_t delay_state_bytes (const delay_state_t *state);
void delay_get_state (const delay_state_t *state, void *blob);
int delay_set_state (delay_state_t *state, const void *blob);

#ifdef __cplusplus
}
#endif

#endif /* DELAY_CORE_H */