1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
#include "libami.h"
#ifndef AMIGAOS
void NewList(struct List *list)
{
list->lh_TailPred = (struct Node *)&list->lh_Head;
list->lh_Tail = NULL;
list->lh_Head = (struct Node *)&list->lh_Tail;
}
void AddHead(struct List *list, struct Node *node)
{
struct Node *oldhead = list->lh_Head;
list->lh_Head = node;
node->ln_Succ = oldhead;
node->ln_Pred = (struct Node *)&list->lh_Head;
oldhead->ln_Pred = node;
}
void AddTail(struct List *list, struct Node *node)
{
struct Node *oldtail = list->lh_TailPred;
list->lh_TailPred = node;
node->ln_Succ = (struct Node *)&list->lh_Tail;
node->ln_Pred = oldtail;
oldtail->ln_Succ = node;
}
struct Node *RemHead(struct List *list)
{
struct Node *node = list->lh_Head;
if(node->ln_Succ) {
list->lh_Head = node->ln_Succ;
node->ln_Succ->ln_Pred = (struct Node *)&list->lh_Head;
return node;
} else return NULL;
}
struct Node *RemTail(struct List *list)
{
struct Node *node = list->lh_TailPred;
if(node->ln_Pred) {
list->lh_TailPred = node->ln_Pred;
node->ln_Pred->ln_Succ = (struct Node *)&list->lh_Tail;
return node;
} else return NULL;
}
void Insert(struct List *list, struct Node *node, struct Node *after)
{
if(!after) after = (struct Node *)&list->lh_Head;
node->ln_Succ = after->ln_Succ;
node->ln_Pred = after;
after->ln_Succ->ln_Pred = node;
after->ln_Succ = node;
}
void Remove(struct Node *node)
{
node->ln_Pred->ln_Succ = node->ln_Succ;
node->ln_Succ->ln_Pred = node->ln_Pred;
}
void Enqueue(struct List *list, struct Node *node)
{
struct Node *before = list->lh_Head;
while(before->ln_Succ && before->ln_Pri >= node->ln_Pri)
before = before->ln_Succ;
node->ln_Succ = before;
node->ln_Pred = before->ln_Pred;
before->ln_Pred->ln_Succ = node;
before->ln_Pred = node;
}
struct Node *FindName(struct List *list, STRPTR name)
{
struct Node *node;
for(node = list->lh_Head; node->ln_Succ; node = node->ln_Succ)
if(!strcmp((char *)name, node->ln_Name))
return node;
return NULL;
}
#endif
|