forked from bakkdoor/fancy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
stack.fy
82 lines (60 loc) · 1.16 KB
/
stack.fy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
class Stack {
"""
A simple Stack container class.
"""
def initialize {
"""
Initializes a new Stack.
"""
@arr = []
}
def initialize: size {
"""
@size Initial size of the new Stack.
Initializes a new Stack with a given size.
"""
@arr = Array new: size
}
def push: obj {
"""
@obj Object to be pushed onto @self.
Pushes a value onto the Stack.
"""
@arr << obj
}
alias_method: '<< for: 'push:
def pop {
"""
@return Top-of-stack element.
Pops the top-of-stack element from the Stack and returns it.
"""
@arr remove_at: (size - 1)
}
def top {
"""
@return The top-of-stack element.
"""
@arr last
}
def size {
"""
@return Size of the Stack.
"""
@arr size
}
def empty? {
"""
@return @true if empty, otherwise @false.
Indicates, if the Stack is empty.
"""
@arr empty?
}
def each: block {
"""
@block @Block@ to be called with each element in @self.
@return @self.
Calls a given @Block@ with each element in @self, starting with the top of stack element.
"""
@arr reverse_each: block
}
}