COLLECTIONS.ob07 825 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. (*
  2. BSD 2-Clause License
  3. Copyright (c) 2018-2019, Anton Krotov
  4. All rights reserved.
  5. *)
  6. MODULE COLLECTIONS;
  7. TYPE
  8. ITEM* = POINTER TO RECORD
  9. link: ITEM
  10. END;
  11. COLLECTION* = POINTER TO RECORD
  12. last: ITEM
  13. END;
  14. PROCEDURE push* (collection: COLLECTION; item: ITEM);
  15. BEGIN
  16. item.link := collection.last;
  17. collection.last := item
  18. END push;
  19. PROCEDURE pop* (collection: COLLECTION): ITEM;
  20. VAR
  21. item: ITEM;
  22. BEGIN
  23. item := collection.last;
  24. IF item # NIL THEN
  25. collection.last := item.link
  26. END
  27. RETURN item
  28. END pop;
  29. PROCEDURE create* (): COLLECTION;
  30. VAR
  31. collection: COLLECTION;
  32. BEGIN
  33. NEW(collection);
  34. collection.last := NIL
  35. RETURN collection
  36. END create;
  37. END COLLECTIONS.