50 lines
1.0 KiB
C
50 lines
1.0 KiB
C
function void decl_dll_list_push(Decl*l,Decl*node){
|
|
if (l->list_decl.first==0){
|
|
l->list_decl.first=l->list_decl.last=node;
|
|
node->prev=0;
|
|
node->next=0;
|
|
}
|
|
else {
|
|
l->list_decl.last->next=node;
|
|
node->prev=l->list_decl.last;
|
|
node->next=0;
|
|
l->list_decl.last=node;
|
|
}
|
|
node->parent=l;
|
|
}
|
|
function void decl_dll_list_push_front(Decl*l,Decl*node){
|
|
if (l->list_decl.first==0){
|
|
l->list_decl.first=l->list_decl.last=node;
|
|
node->prev=0;
|
|
node->next=0;
|
|
}
|
|
else {
|
|
node->next=l->list_decl.first;
|
|
l->list_decl.first->prev=node;
|
|
node->prev=0;
|
|
l->list_decl.first=node;
|
|
}
|
|
node->parent=l;
|
|
}
|
|
function void decl_list_remove(Decl*l,Decl*node){
|
|
if (l->list_decl.first==l->list_decl.last){
|
|
assert(node==l->list_decl.last);
|
|
l->list_decl.first=l->list_decl.last=0;
|
|
}
|
|
else if (l->list_decl.last==node){
|
|
l->list_decl.last=l->list_decl.last->prev;
|
|
l->list_decl.last->next=0;
|
|
}
|
|
else if (l->list_decl.first==node){
|
|
l->list_decl.first=l->list_decl.first->next;
|
|
l->list_decl.first->prev=0;
|
|
}
|
|
else {
|
|
node->prev->next=node->next;
|
|
node->next->prev=node->prev;
|
|
}
|
|
node->parent=0;
|
|
node->prev=0;
|
|
node->next=0;
|
|
}
|