list.c
来自「在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LE」· C语言 代码 · 共 211 行
C
211 行
/****************************************************************
** *
** FILE : List.C *
** COPYRIGHT : (c) 2001 .Xiamen Yaxon NetWork CO.LTD *
** *
** *
** By : CCH 2002.1.15 *
****************************************************************/
#include "includes.h"
#include "list.h"
BOOLEAN CheckList(LIST *Lp)
{
INT32U count;
LISTNODE *curnode;
if (Lp == 0) return FALSE;
count = 0;
curnode = Lp->Head;
while(curnode != 0)
{
count++;
curnode = curnode->next;
}
if (count != Lp->Item) return FALSE;
count = 0;
curnode = Lp->Tail;
while(curnode != 0)
{
count++;
curnode = curnode->prv;
}
if (count != Lp->Item) return FALSE;
else return TRUE;
}
BOOLEAN InitList(LIST *Lp)
{
if (Lp == 0) return FALSE;
Lp->Head = 0;
Lp->Tail = 0;
Lp->Item = 0;
return TRUE;
}
INT32U ListItem(LIST *Lp)
{
if (Lp == 0) return 0;
else return (Lp->Item);
}
LISTMEM *GetListHead(LIST *Lp)
{
if (Lp == 0 || Lp->Item == 0) return 0;
else return ((LISTMEM *)Lp->Head + sizeof(NODE));
}
LISTMEM *GetListTail(LIST *Lp)
{
if (Lp == 0 || Lp->Item == 0) return 0;
else return ((LISTMEM *)Lp->Tail + sizeof(NODE));
}
LISTMEM *ListNextEle(LISTMEM *Bp)
{
LISTNODE *curnode;
if (Bp == 0) return 0;
curnode = (LISTNODE *)(Bp - sizeof(NODE));
if ((curnode = curnode->next) == 0) return 0;
else return ((LISTMEM *)curnode + sizeof(NODE));
}
LISTMEM *ListPrvEle(LISTMEM *Bp)
{
LISTNODE *curnode;
if (Bp == 0) return 0;
curnode = (LISTNODE *)(Bp - sizeof(NODE));
if ((curnode = curnode->prv) == 0) return 0;
else return ((LISTMEM *)curnode + sizeof(NODE));
}
/* Return: pointer to Bp's next element */
LISTMEM *DelListEle(LIST *Lp, LISTMEM *Bp)
{
LISTNODE *curnode, *prvnode, *nextnode;
if (Lp == 0 || Bp == 0) return 0;
if (Lp->Item == 0) return 0;
Lp->Item--;
curnode = (LISTNODE *)(Bp - sizeof(NODE));
prvnode = curnode->prv;
nextnode = curnode->next;
if (prvnode == 0) Lp->Head = nextnode;
else {
prvnode->next = nextnode;
}
if (nextnode == 0) {
Lp->Tail = prvnode;
return 0;
} else {
nextnode->prv = prvnode;
return ((LISTMEM *)nextnode + sizeof(NODE));
}
}
/* Return: List head */
LISTMEM *DelListHead(LIST *Lp)
{
LISTMEM *Bp;
if (Lp == 0 || Lp->Item == 0) return 0;
Bp = (LISTMEM *)Lp->Head + sizeof(NODE);
DelListEle(Lp, Bp);
return Bp;
}
/* Return: List Tail */
LISTMEM *DelListTail(LIST *Lp)
{
LISTMEM *Bp;
if (Lp == 0 || Lp->Item == 0) return 0;
Bp = (LISTMEM *)Lp->Tail + sizeof(NODE);
DelListEle(Lp, Bp);
return Bp;
}
BOOLEAN AppendListEle(LIST *Lp, LISTMEM *Bp)
{
LISTNODE *curnode;
if (Lp == 0 || Bp == 0) return FALSE;
curnode = (LISTNODE *)(Bp - sizeof(NODE));
curnode->prv = Lp->Tail;
if (Lp->Item == 0) {
Lp->Head = curnode;
} else {
Lp->Tail->next = curnode;
}
curnode->next = 0;
Lp->Tail = curnode;
Lp->Item++;
return TRUE;
}
BOOLEAN BInsertListEle(LIST *Lp, LISTMEM *CurBp, LISTMEM *InsBp)
{
LISTNODE *curnode, *insnode;
if (Lp == 0 || CurBp == 0 || InsBp == 0) return FALSE;
if (Lp->Item == 0) return FALSE;
curnode = (LISTNODE *)(CurBp - sizeof(NODE));
insnode = (LISTNODE *)(InsBp - sizeof(NODE));
insnode->next = curnode;
insnode->prv = curnode->prv;
if (curnode->prv == 0){
Lp->Head = insnode;
} else {
curnode->prv->next = insnode;
}
curnode->prv = insnode;
Lp->Item++;
return TRUE;
}
BOOLEAN AInsertListEle(LIST *Lp, LISTMEM *CurBp, LISTMEM *InsBp)
{
LISTNODE *curnode, *insnode;
if (Lp == 0 || CurBp == 0 || InsBp == 0) return FALSE;
if (Lp->Item == 0) return FALSE;
curnode = (LISTNODE *)(CurBp - sizeof(NODE));
insnode = (LISTNODE *)(InsBp - sizeof(NODE));
insnode->next = curnode->next;
insnode->prv = curnode;
if(curnode->next == 0){
Lp->Tail = insnode;
} else {
curnode->next->prv = insnode;
}
curnode->next = insnode;
Lp->Item++;
return TRUE;
}
BOOLEAN InitMemList(LIST *memLp, LISTMEM *addr, INT32U nblks, INT32U blksize)
{
if (!InitList(memLp)) return FALSE;
addr += sizeof(NODE);
for(; nblks > 0; nblks--){
AppendListEle(memLp, addr);
addr += blksize;
}
return TRUE;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?