capitalex revisó este gist . Ir a la revisión
1 file changed, 65 insertions
prelude.lua(archivo creado)
@@ -0,0 +1,65 @@ | |||
1 | + | local function push(self, value) | |
2 | + | self.n = self.n + 1 | |
3 | + | table.insert(self, value) | |
4 | + | end | |
5 | + | ||
6 | + | local function pop(self) | |
7 | + | local value = self[self.n] | |
8 | + | self[self.n] = nil | |
9 | + | self.n = self.n - 1 | |
10 | + | return value | |
11 | + | end | |
12 | + | ||
13 | + | local function peek(self) | |
14 | + | return self[self.n] | |
15 | + | end | |
16 | + | ||
17 | + | local function create_stack(object, name) | |
18 | + | object[name] = { n = 0 , push = push, pop = pop, peek = peek } | |
19 | + | end | |
20 | + | ||
21 | + | LOBBY = {} | |
22 | + | create_stack(LOBBY, "lobby") | |
23 | + | LOBBY["lobby"]:push(LOBBY) | |
24 | + | ||
25 | + | function PUSH(stack, value) | |
26 | + | if not LOBBY[stack] then create_stack(LOBBY, stack) end | |
27 | + | LOBBY[stack]:push(value) | |
28 | + | end | |
29 | + | ||
30 | + | function PEEK(stack) | |
31 | + | assert(LOBBY[stack], "Stack underflow") | |
32 | + | assert(LOBBY[stack].n > 0, "Stack underflow") | |
33 | + | return LOBBY[stack]:peek() | |
34 | + | end | |
35 | + | ||
36 | + | function POP(stack) | |
37 | + | assert(LOBBY[stack], "Stack underflow") | |
38 | + | assert(LOBBY[stack].n > 0, "Stack underflow") | |
39 | + | return LOBBY[stack]:pop() | |
40 | + | end | |
41 | + | ||
42 | + | function PUSHTO(object, stack, value) | |
43 | + | if not object[stack] then | |
44 | + | create_stack(object, stack) | |
45 | + | end | |
46 | + | object[stack]:push(value) | |
47 | + | end | |
48 | + | ||
49 | + | function POPFROM(object, stack) | |
50 | + | assert(object[stack], "Stack underflow in external object.") | |
51 | + | assert(object[stack].n > 0, "Stack underflow in external object.") | |
52 | + | return object[stack]:pop() | |
53 | + | end | |
54 | + | ||
55 | + | function _become() | |
56 | + | LOBBY = POP('') | |
57 | + | end | |
58 | + | ||
59 | + | function _me() | |
60 | + | PUSH('', LOBBY) | |
61 | + | end | |
62 | + | ||
63 | + | function _object() | |
64 | + | PUSH('', {}) | |
65 | + | end |
Siguiente
Anterior