📄 queue.cpp
字号:
/*********************************************************************************Copyright: cchbds Tech .Co*Filename: queue.c*Author Version Date:*Description: insert datapack into loop queue and move away*Function List 1 qempty 2 qoverflow 3 qinsert 4 qmove*History:*********************************************************************************/#include "queue.h"/*********************************************************************************Function: qempty*Description: the queue be empty or not*Calls: *Called By: get_send_shm*Input: indata : front rear *Output: *Return: 1 empty ,0 not empty*Others:*********************************************************************************/int qempty(long front,long rear){ return front==rear;}int qfull(long front,long rear,long size){ return ((rear+1)%size == front);}/*********************************************************************************Function: qoverflow*Description: the queue will be overflow or not*Calls: *Called By: shmproducer*Input: indata : datalen front rear size insertlen*Output: *Return: 1 overflow ,0 not overfolw*Others:*********************************************************************************/int qoverflow(long front,long rear,long size,int insertlen){ if((rear<front)) { //队列里的数据是从0到尾和头到size的两段 if(rear+insertlen>front) { return 1; } } if((rear>front)) { //队列里的数据是从尾到头的一段 if(rear+insertlen>front+size) { return 1; } } return 0;}/*********************************************************************************Function: qinsert*Description: write a datapack to queue tail*Calls: *Called By: shmproducer*Input: indata :queue data datalen front rear size*Output: *Return: *Others:*********************************************************************************/void qinsert(char *queue,char * data,int datalen,long front,long rear,long size){ if((rear<=front)) { //队列里的数据是从0到尾和头到size的两段 memcpy(queue+rear,data,datalen); } else { //队列里的数据是从尾到头的一段 if(size-rear>=datalen) { memcpy(queue+rear,data,datalen); } else { int len; len=size-rear; memcpy(queue+rear,data,len); memcpy(queue,data+len,datalen-len); } }}//从队头取/*********************************************************************************Function: qmove*Description: get a datapack from queue head*Calls: *Called By: get_send_shm*Input: indata :queue data datalen front rear size*Output: data*Return: *Others:*********************************************************************************/int qmove(char *queue,char * data,int datalen,long front,long rear,long size){ if(rear==front) { printf("取数据包时队列为空 %d ==%d \n",rear,front); } if((rear>front)) { //队列里的数据是从0到尾和头到size的两段 memcpy(data,queue+front,datalen); } if((rear<front)) { //队列里的数据是从尾到头的一段 if(size-front>=datalen) { memcpy(data,queue+front,datalen); } else { int len; len=size-front; memcpy(data,queue+front,len); memcpy(data+len,queue,datalen-len); } } return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -