32 lines
484 B
Plaintext
32 lines
484 B
Plaintext
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
|