/**
 * @file audio_buffer.h
 * @brief 音频环形缓冲区
 */

#ifndef CORE_AUDIO_BUFFER_H
#define CORE_AUDIO_BUFFER_H

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

#ifdef __cplusplus
extern "C" {
#endif

/** 环形缓冲区结构 */
typedef struct {
    uint8_t *buffer;        /* 底层内存 */
    size_t   size;          /* 总容量（字节）*/
    size_t   read_pos;      /* 读位置 */
    size_t   write_pos;     /* 写位置 */
} audio_cbuf_t;

/**
 * @brief 初始化环形缓冲区
 * @param cbuf   缓冲区结构
 * @param buffer 预分配内存
 * @param size   内存大小（字节）
 */
int audio_cbuf_init(audio_cbuf_t *cbuf, uint8_t *buffer, size_t size);

/**
 * @brief 写入数据
 * @return 实际写入字节数
 */
size_t audio_cbuf_write(audio_cbuf_t *cbuf, const void *data, size_t len);

/**
 * @brief 读取数据
 * @return 实际读取字节数
 */
size_t audio_cbuf_read(audio_cbuf_t *cbuf, void *data, size_t len);

/** @brief 清空缓冲区 */
void audio_cbuf_clear(audio_cbuf_t *cbuf);

/** @brief 获取可读数据字节数 */
size_t audio_cbuf_get_data_size(const audio_cbuf_t *cbuf);

/** @brief 获取可写空闲字节数 */
size_t audio_cbuf_get_free_size(const audio_cbuf_t *cbuf);

#ifdef __cplusplus
}
#endif

#endif /* CORE_AUDIO_BUFFER_H */
