mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-02-05 17:28:23 +08:00
45 lines
1.5 KiB
C
45 lines
1.5 KiB
C
#ifndef PIKA_HAL_CIRCULAR_PTR_QUEUE_H
|
|
#define PIKA_HAL_CIRCULAR_PTR_QUEUE_H
|
|
#include "pika_hal.h"
|
|
#include "PikaObj.h"
|
|
|
|
// 定义循环指针队列的结构体
|
|
typedef struct pika_hal_CircularPtrQueue {
|
|
void** buffer; // 存储元素的缓冲区
|
|
size_t head; // 队头指针
|
|
size_t tail; // 队尾指针
|
|
size_t count; // 当前元素数量
|
|
size_t capacity; // 缓冲区容量
|
|
#if PIKA_HAL_CIRCULAR_QUEUE_MUTEX_ENABLE
|
|
pika_platform_thread_mutex_t mutex; // 互斥锁
|
|
#endif
|
|
} pika_hal_CircularPtrQueue;
|
|
|
|
// 创建一个新的循环指针队列
|
|
pika_hal_CircularPtrQueue* pika_hal_circularPtrQueue_create(size_t capacity);
|
|
|
|
// 向队列中添加一个元素
|
|
int pika_hal_circularPtrQueue_enqueue(pika_hal_CircularPtrQueue* cb,
|
|
void* data);
|
|
|
|
// 从队列中移除一个元素
|
|
int pika_hal_circularPtrQueue_dequeue(pika_hal_CircularPtrQueue* cb,
|
|
void** value);
|
|
|
|
// 销毁队列并释放相关资源
|
|
int pika_hal_circularPtrQueue_deinit(pika_hal_CircularPtrQueue* cb);
|
|
|
|
// 获取队列中的元素数量
|
|
size_t pika_hal_circularPtrQueue_getCount(pika_hal_CircularPtrQueue* cb);
|
|
|
|
// 检查队列是否为空
|
|
int pika_hal_circularPtrQueue_isEmpty(pika_hal_CircularPtrQueue* cb);
|
|
|
|
// 检查队列是否已满
|
|
int pika_hal_circularPtrQueue_isFull(pika_hal_CircularPtrQueue* cb);
|
|
|
|
// 查看队列头部的元素,但不移除它
|
|
int pika_hal_circularPtrQueue_peek(pika_hal_CircularPtrQueue* cb, void** value);
|
|
|
|
#endif // PIKA_HAL_CIRCULAR_PTR_QUEUE_H
|