Nasal-Interpreter/stl/list.nas

52 lines
1.2 KiB
Plaintext

# lib list.nas
# valkmjolnir 2021/3/31
var list=func()
{
var (begin,end)=(nil,nil);
return{
push_back:func(elem){
var tmp={elem:elem,prev:nil,next:nil};
if(end!=nil){
end.next=tmp;
tmp.prev=end;
end=tmp;
}
else
begin=end=tmp;
},
push_front:func(elem){
var tmp={elem:elem,prev:nil,next:nil};
if(begin!=nil){
begin.prev=tmp;
tmp.next=begin;
begin=tmp;
}
else
begin=end=tmp;
},
pop_back:func(){
if(end!=nil)
end=end.prev;
if(end==nil)
begin=nil;
else
end.next=nil;
},
pop_front:func(){
if(begin!=nil)
begin=begin.next;
if(begin==nil)
end=nil;
else
begin.prev=nil;
},
front:func(){
if(begin!=nil)
return begin.elem;
},
back:func(){
if(end!=nil)
return end.elem;
},
};
}