Rev 7693 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7693 | Rev 7696 | ||
---|---|---|---|
1 | (* |
1 | (* |
2 | BSD 2-Clause License |
2 | BSD 2-Clause License |
3 | 3 | ||
4 | Copyright (c) 2018, 2019, Anton Krotov |
4 | Copyright (c) 2018-2019, Anton Krotov |
5 | All rights reserved. |
5 | All rights reserved. |
6 | *) |
6 | *) |
7 | 7 | ||
8 | MODULE COLLECTIONS; |
8 | MODULE COLLECTIONS; |
9 | 9 | ||
10 | 10 | ||
11 | TYPE |
11 | TYPE |
12 | 12 | ||
13 | ITEM* = POINTER TO RECORD |
13 | ITEM* = POINTER TO RECORD |
14 | 14 | ||
15 | link: ITEM |
15 | link: ITEM |
16 | 16 | ||
17 | END; |
17 | END; |
18 | 18 | ||
19 | COLLECTION* = POINTER TO RECORD |
19 | COLLECTION* = POINTER TO RECORD |
20 | 20 | ||
21 | last: ITEM |
21 | last: ITEM |
22 | 22 | ||
23 | END; |
23 | END; |
24 | 24 | ||
25 | 25 | ||
26 | PROCEDURE push* (collection: COLLECTION; item: ITEM); |
26 | PROCEDURE push* (collection: COLLECTION; item: ITEM); |
27 | BEGIN |
27 | BEGIN |
28 | item.link := collection.last; |
28 | item.link := collection.last; |
29 | collection.last := item |
29 | collection.last := item |
30 | END push; |
30 | END push; |
31 | 31 | ||
32 | 32 | ||
33 | PROCEDURE pop* (collection: COLLECTION): ITEM; |
33 | PROCEDURE pop* (collection: COLLECTION): ITEM; |
34 | VAR |
34 | VAR |
35 | item: ITEM; |
35 | item: ITEM; |
36 | 36 | ||
37 | BEGIN |
37 | BEGIN |
38 | item := collection.last; |
38 | item := collection.last; |
39 | IF item # NIL THEN |
39 | IF item # NIL THEN |
40 | collection.last := item.link |
40 | collection.last := item.link |
41 | END |
41 | END |
42 | 42 | ||
43 | RETURN item |
43 | RETURN item |
44 | END pop; |
44 | END pop; |
45 | 45 | ||
46 | 46 | ||
47 | PROCEDURE create* (): COLLECTION; |
47 | PROCEDURE create* (): COLLECTION; |
48 | VAR |
48 | VAR |
49 | collection: COLLECTION; |
49 | collection: COLLECTION; |
50 | 50 | ||
51 | BEGIN |
51 | BEGIN |
52 | NEW(collection); |
52 | NEW(collection); |
53 | collection.last := NIL |
53 | collection.last := NIL |
54 | 54 | ||
55 | RETURN collection |
55 | RETURN collection |
56 | END create; |
56 | END create; |
57 | 57 | ||
58 | 58 | ||
59 | END COLLECTIONS. |
59 | END COLLECTIONS. |