Files
Nasal-Interpreter/stl/list.nas
T
2021-08-11 14:54:17 +08:00

67 lines
1.4 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;
return;
},
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;
return;
},
pop_back:func()
{
if(end!=nil)
end=end.prev;
if(end==nil)
begin=nil;
else
end.next=nil;
return;
},
pop_front:func()
{
if(begin!=nil)
begin=begin.next;
if(begin==nil)
end=nil;
else
begin.prev=nil;
return;
},
front:func()
{
if(begin!=nil)
return begin.elem;
return nil;
},
back:func()
{
if(end!=nil)
return end.elem;
return nil;
},
};
}