Nasal-Interpreter/stl/queue.nas

47 lines
913 B
Plaintext

# lib queue.nas
# valkmjolnir 2021/3/31
var queue=func()
{
var _={begin:nil,end:nil};
return
{
push:func(elem)
{
var new_node=
{
elem:elem,
next:nil
};
if(_.begin==nil)
_.begin=_.end=new_node;
else
{
_.end.next=new_node;
_.end=new_node;
}
return;
},
pop:func()
{
if(_.begin!=nil)
_.begin=_.begin.next;
if(_.begin==nil)
_.end=nil;
},
front:func()
{
if(_.begin!=nil)
return _.begin.elem;
return nil;
},
clear:func()
{
_.begin=_.end=nil;
},
empty:func()
{
return _.begin==nil;
}
};
}