?? queue.c
字號:
/* queue.c -- generic list handling routines * * This file is part of 'netcast' program, released under BSD License. * (c) 2001-2002 Stanis砤w Pa秌o <staszek@nutki.com>. All rights reserved. */#include <stdlib.h>#include <string.h>#include "queue.h"/* Append message at queue end */void qappend (struct mmsgq *q,void *msg,long size) { if (!q) return; if (!q->head) { q->head=q->tail=(struct mmsg *) malloc(sizeof(struct mmsg)); } else { q->tail->next=(struct mmsg *) malloc(sizeof(struct mmsg)); q->tail=q->tail->next; } q->tail->next=0; q->tail->data=msg; q->tail->size=size; q->size+=size; q->count++;}/* Insert message at queue start */ void qinsert (struct mmsgq *q,void *msg,long size) { if (!q) return; if (!q->head) { q->head=q->tail=(struct mmsg *) malloc(sizeof(struct mmsg)); } else { q->tail->next=(struct mmsg *) malloc(sizeof(struct mmsg)); q->tail->next->next=q->head; q->head=q->tail->next; } q->tail->next=0; q->head->data=msg; q->head->size=size; q->size+=size; q->count++;}/* Fetch first message */void* qfetch (struct mmsgq *q, long *size) { void *res=0; struct mmsg *tmp; if (q && q->head) { res=q->head->data; *size=q->head->size; tmp=q->head; q->head=q->head->next; free(tmp); q->count--; q->size-=*size; } return res;}/* Just return first elements data */void *qfirst (struct mmsgq *q,long *size) { if (q && q->head) return q->head->data; return 0;}/* Clear structures, _including_ data pointers */void qempty (struct mmsgq *q) { if (!q) return; while (q->head) { q->tail=q->head->next; free(q->head->data); free(q->head); q->head=q->tail; } qblank(q);} /* Initialize queue struct, this plainly assigns NULL pointers */struct mmsgq *qinit () { struct mmsgq *q = malloc (sizeof(struct mmsgq)); qblank(q); return q;}/* Empty queue struct, this plainly assigns NULL pointers */void qblank (struct mmsgq *q) { q->count=q->size=0; q->head=q->tail=0;}void* qflat (struct mmsgq *q) { void *tmp; long offs=0; if (!q || q->count==0) return 0; tmp = malloc (q->size); while (q->head) { memcpy(tmp+offs,q->head->data,q->head->size); offs+=q->head->size; q->tail=q->head->next; free(q->head->data); free(q->head); q->head=q->tail; } qempty(q); return tmp; }
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -