32 lines
484 B
Text
32 lines
484 B
Text
|
|
functor
|
||
|
|
export
|
||
|
|
New
|
||
|
|
Push
|
||
|
|
Pop
|
||
|
|
Empty
|
||
|
|
define
|
||
|
|
fun {New}
|
||
|
|
{NewCell nil}
|
||
|
|
end
|
||
|
|
|
||
|
|
proc {Push Stack Element}
|
||
|
|
NewStack
|
||
|
|
%% Use atomic swap for thread safety
|
||
|
|
OldStack = Stack := NewStack
|
||
|
|
in
|
||
|
|
NewStack = Element|OldStack
|
||
|
|
end
|
||
|
|
|
||
|
|
proc {Pop Stack ?Result}
|
||
|
|
NewStack
|
||
|
|
%% Use atomic swap for thread safety
|
||
|
|
OldStack = Stack := NewStack
|
||
|
|
in
|
||
|
|
Result|NewStack = OldStack
|
||
|
|
end
|
||
|
|
|
||
|
|
fun {Empty Stack}
|
||
|
|
@Stack == nil
|
||
|
|
end
|
||
|
|
end
|