XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
xwcq.c 文件参考

循环队列 更多...

#include <string.h>
#include <xwos/standard.h>
#include <xwos/lib/object.h>
#include <xwos/lib/bclst.h>
#include <xwos/osal/lock/spinlock.h>
#include <xwos/osal/sync/sem.h>
#include <xwmd/isc/xwcq/mif.h>
xwcq.c 的引用(Include)关系图:

浏览源代码.

函数

static void xwcq_construct (struct xwcq *cq, xwu8_t *mem)
 循环队列对象的构造函数
 
static void xwcq_destruct (struct xwcq *cq)
 循环队列对象的析构函数
 
static xwer_t xwcq_gc (struct xwos_object *obj)
 循环队列对象的垃圾回收函数
 
static xwer_t xwcq_activate (struct xwcq *cq, xwsz_t slotsize, xwsz_t slotnum, xwobj_gc_f gcfunc)
 激活循环队列对象
 
xwer_t xwcq_init (struct xwcq *cq, xwsz_t slotsize, xwsz_t slotnum, xwu8_t *mem)
 XWCQ API:初始化循环队列
 
xwer_t xwcq_fini (struct xwcq *cq)
 XWCQ API:销毁循环队列对象
 
xwsq_t xwcq_get_tik (struct xwcq *cq)
 XWCQ API:获取循环队列对象的标签
 
xwer_t xwcq_acquire (xwcq_d cqd)
 XWCQ API:检查循环队列对象的标签并增加引用计数
 
xwer_t xwcq_release (xwcq_d cqd)
 XWCQ API:检查循环队列对象的标签并增加引用计数
 
xwer_t xwcq_grab (struct xwcq *cq)
 XWCQ API:增加循环队列对象的引用计数
 
xwer_t xwcq_put (struct xwcq *cq)
 XWCQ API:减少循环队列对象的引用计数
 
xwer_t xwcq_eq (struct xwcq *cq, const xwu8_t *data, xwsz_t *size)
 XWCQ API:将数据发送到循环队列的 尾端 (入队,EnQueue)
 
xwer_t xwcq_jq (struct xwcq *cq, const xwu8_t *data, xwsz_t *size)
 XWCQ API:将数据发送循环队列的 首端 (插队,Jump the Queue)
 
xwer_t xwcq_dq (struct xwcq *cq, xwu8_t *buf, xwsz_t *size)
 XWCQ API: 等待从循环队列的 首端 接收数据 (离队,DeQueue)
 
xwer_t xwcq_dq_to (struct xwcq *cq, xwu8_t *buf, xwsz_t *size, xwtm_t to)
 XWCQ API: 限时等待从循环队列的 首端 接收数据 (离队,DeQueue)
 
xwer_t xwcq_dq_unintr (struct xwcq *cq, xwu8_t *buf, xwsz_t *size)
 XWCQ API: 等待从循环队列的 首端 接收数据 (离队,DeQueue), 并且等待不可被中断
 
xwer_t xwcq_trydq (struct xwcq *cq, xwu8_t *buf, xwsz_t *size)
 XWCQ API: 尝试从循环队列的 首端 接收数据 (离队,DeQueue)
 
xwer_t xwcq_rq (struct xwcq *cq, xwu8_t *buf, xwsz_t *size)
 XWCQ API: 等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue)
 
xwer_t xwcq_rq_to (struct xwcq *cq, xwu8_t *buf, xwsz_t *size, xwtm_t to)
 XWCQ API: 限时等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue)
 
xwer_t xwcq_rq_unintr (struct xwcq *cq, xwu8_t *buf, xwsz_t *size)
 XWCQ API: 等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue), 并且等待不可被中断
 
xwer_t xwcq_tryrq (struct xwcq *cq, xwu8_t *buf, xwsz_t *size)
 XWCQ API: 尝试从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue)
 
xwer_t xwcq_pfq (struct xwcq *cq, xwu8_t *buf, xwsz_t *size)
 XWCQ API: 等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue)
 
xwer_t xwcq_pfq_to (struct xwcq *cq, xwu8_t *buf, xwsz_t *size, xwtm_t to)
 XWCQ API: 限时等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue)
 
xwer_t xwcq_pfq_unintr (struct xwcq *cq, xwu8_t *buf, xwsz_t *size)
 XWCQ API: 等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue), 并且等待不可被中断
 
xwer_t xwcq_trypfq (struct xwcq *cq, xwu8_t *buf, xwsz_t *size)
 XWCQ API: 尝试从循环队列 头端 拷贝数据 (Peek at the Front of Queue)
 
xwer_t xwcq_prq (struct xwcq *cq, xwu8_t *buf, xwsz_t *size)
 XWCQ API: 等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue)
 
xwer_t xwcq_prq_to (struct xwcq *cq, xwu8_t *buf, xwsz_t *size, xwtm_t to)
 XWCQ API: 限时等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue)
 
xwer_t xwcq_prq_unintr (struct xwcq *cq, xwu8_t *buf, xwsz_t *size)
 XWCQ API: 等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue), 并且等待不可被中断
 
xwer_t xwcq_tryprq (struct xwcq *cq, xwu8_t *buf, xwsz_t *size)
 XWCQ API: 尝试从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue)
 
xwer_t xwcq_flush (struct xwcq *cq)
 XWCQ API: 清空循环队列
 
xwer_t xwcq_get_capacity (struct xwcq *cq, xwsz_t *capbuf)
 XWCQ API: 获取循环队列的容量
 
xwer_t xwcq_get_size (struct xwcq *cq, xwsz_t *szbuf)
 XWCQ API: 获取循环队列的单个数据槽的大小
 
xwer_t xwcq_get_availability (struct xwcq *cq, xwsz_t *avbbuf)
 XWCQ API: 获取循环队列中有效数据槽的数量
 
xwer_t xwcq_bind (struct xwcq *cq, struct xwos_sel *sel, xwsq_t pos)
 XWOS API:绑定循环队列对象到信号选择器
 
xwer_t xwcq_unbind (struct xwcq *cq, struct xwos_sel *sel)
 XWOS API:从信号选择器上解绑循环队列对象
 

详细描述

循环队列

作者

在文件 xwcq.c 中定义.

函数说明

◆ xwcq_activate()

static xwer_t xwcq_activate ( struct xwcq cq,
xwsz_t  slotsize,
xwsz_t  slotnum,
xwobj_gc_f  gcfunc 
)
static

激活循环队列对象

参数
[in]cq循环队列对象的指针
[in]slotsize数据槽的大小
[in]slotnum数据槽的个数
[in]gcfunc垃圾回收函数:当对象应用计数为0,调用此函数回收资源。
返回
错误码

<No error

在文件 xwcq.c72 行定义.

74{
75 xwer_t rc;
76
77 rc = xwos_object_activate(&cq->xwobj, gcfunc);
78 if (rc < 0) {
79 goto err_xwobj_activate;
80 }
81 xwos_splk_init(&cq->lock);
82 xwos_sem_init(&cq->sem, 0, (xwssq_t)slotnum);
83 cq->slotsize = slotsize;
84 cq->slotnum = slotnum;
85 cq->rear = 0;
86 cq->front = 0;
87 return XWOK;
88
89err_xwobj_activate:
90 return rc;
91}
#define XWOK
No error
Definition errno.h:182
signed long xwer_t
Definition type.h:554
signed long xwssq_t
Definition type.h:461
xwer_t xwos_object_activate(struct xwos_object *obj, xwobj_gc_f gcfunc)
激活一个XWOS对象(将其引用计数初始化位1)
Definition object.c:135
static void xwos_splk_init(struct xwos_splk *spl)
XWOS API:初始化自旋锁
Definition spinlock.h:89
static xwer_t xwos_sem_init(struct xwos_sem *sem, xwssq_t val, xwssq_t max)
XWOS API:静态方式初始化信号量对象
Definition sem.h:125
struct xwos_sem sem
Definition mif.h:128
struct xwos_splk lock
Definition mif.h:129
struct xwos_object xwobj
Definition mif.h:125
xwsz_t slotnum
Definition mif.h:127
xwssz_t front
Definition mif.h:131
xwssz_t rear
Definition mif.h:130
xwsz_t slotsize
Definition mif.h:126
函数调用图:
这是这个函数的调用关系图:

◆ xwcq_construct()

static void xwcq_construct ( struct xwcq cq,
xwu8_t mem 
)
static

循环队列对象的构造函数

参数
[in]cq循环队列对象的指针
[in]mem数据缓冲区

在文件 xwcq.c27 行定义.

28{
30 cq->slotsize = 0;
31 cq->slotnum = 0;
32 cq->rear = 0;
33 cq->front = 0;
34 cq->q = mem;
35}
void xwos_object_construct(struct xwos_object *obj)
XWOS对象的构造函数
Definition object.c:107
xwu8_t * q
Definition mif.h:132
函数调用图:
这是这个函数的调用关系图:

◆ xwcq_destruct()

static void xwcq_destruct ( struct xwcq cq)
static

循环队列对象的析构函数

参数
[in]cq循环队列对象的指针

在文件 xwcq.c42 行定义.

43{
45}
void xwos_object_destruct(struct xwos_object *obj)
XWOS对象的析构函数
Definition object.c:119
函数调用图:
这是这个函数的调用关系图:

◆ xwcq_gc()

static xwer_t xwcq_gc ( struct xwos_object obj)
static

循环队列对象的垃圾回收函数

参数
[in]obj循环队列对象的指针
返回
错误码

<No error

在文件 xwcq.c53 行定义.

54{
55 struct xwcq * cq;
56
57 cq = xwcc_derof(obj, struct xwcq, xwobj);
58 xwos_sem_fini(&cq->sem);
59 xwcq_destruct(cq);
60 return XWOK;
61}
#define xwcc_derof(baseptr, derclass, member)
将基类结构体指针转换为派生类结构体指针
Definition compiler.h:501
static xwer_t xwos_sem_fini(struct xwos_sem *sem)
XWOS API:销毁静态方式初始化的信号量对象
Definition sem.h:140
循环队列对象
Definition mif.h:124
static void xwcq_destruct(struct xwcq *cq)
循环队列对象的析构函数
Definition xwcq.c:42
函数调用图:
这是这个函数的调用关系图: