diff options
Diffstat (limited to 'stack/src/stack.adb')
-rw-r--r-- | stack/src/stack.adb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/stack/src/stack.adb b/stack/src/stack.adb new file mode 100644 index 0000000..4dc8fb1 --- /dev/null +++ b/stack/src/stack.adb | |||
@@ -0,0 +1,31 @@ | |||
1 | with Ada.Unchecked_Deallocation; | ||
2 | |||
3 | package body Stack is | ||
4 | procedure Free is new Ada.Unchecked_Deallocation (Node, Node_Access); | ||
5 | |||
6 | procedure Push (S : in out Stack; Val : T) is | ||
7 | New_Top : Node_Access := new Node; | ||
8 | begin | ||
9 | New_Top.Val := Val; | ||
10 | New_Top.Bottom := S.Top; | ||
11 | S.Top := New_Top; | ||
12 | end Push; | ||
13 | |||
14 | function Pop (S : in out Stack; Val : out T) return Boolean is | ||
15 | Old_Top : Node_Access := S.Top; | ||
16 | begin | ||
17 | if Old_Top /= null then | ||
18 | Val := Old_Top.Val; | ||
19 | S.Top := Old_Top.Bottom; | ||
20 | Free (Old_Top); | ||
21 | return True; | ||
22 | else | ||
23 | return False; | ||
24 | end if; | ||
25 | end Pop; | ||
26 | |||
27 | function Empty (S : Stack) return Boolean is | ||
28 | begin | ||
29 | return S.Top = null; | ||
30 | end Empty; | ||
31 | end Stack; | ||