59 lines
837 B
Plaintext
59 lines
837 B
Plaintext
|
(*
|
||
|
BSD 2-Clause License
|
||
|
|
||
|
Copyright (c) 2018, Anton Krotov
|
||
|
All rights reserved.
|
||
|
*)
|
||
|
|
||
|
MODULE COLLECTIONS;
|
||
|
|
||
|
|
||
|
TYPE
|
||
|
|
||
|
ITEM* = POINTER TO RECORD
|
||
|
|
||
|
link: ITEM
|
||
|
|
||
|
END;
|
||
|
|
||
|
COLLECTION* = POINTER TO RECORD
|
||
|
|
||
|
last: ITEM
|
||
|
|
||
|
END;
|
||
|
|
||
|
|
||
|
PROCEDURE push* (collection: COLLECTION; item: ITEM);
|
||
|
BEGIN
|
||
|
item.link := collection.last;
|
||
|
collection.last := item
|
||
|
END push;
|
||
|
|
||
|
|
||
|
PROCEDURE pop* (collection: COLLECTION): ITEM;
|
||
|
VAR
|
||
|
item: ITEM;
|
||
|
|
||
|
BEGIN
|
||
|
item := collection.last;
|
||
|
IF item # NIL THEN
|
||
|
collection.last := item.link
|
||
|
END
|
||
|
|
||
|
RETURN item
|
||
|
END pop;
|
||
|
|
||
|
|
||
|
PROCEDURE create* (): COLLECTION;
|
||
|
VAR
|
||
|
collection: COLLECTION;
|
||
|
|
||
|
BEGIN
|
||
|
NEW(collection);
|
||
|
collection.last := NIL
|
||
|
|
||
|
RETURN collection
|
||
|
END create;
|
||
|
|
||
|
|
||
|
END COLLECTIONS.
|