forked from tomieiro/std-moon
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmatriz.lua
More file actions
116 lines (85 loc) · 2.8 KB
/
Copy pathmatriz.lua
File metadata and controls
116 lines (85 loc) · 2.8 KB
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
--Definicao padrao dos atributos da Fila
Matriz = {m = {}, rows = 0,cols = 0};
--Metodo cosntrutor que instancia o objeto Matriz.
--args: (Table) Atributos desejados para a Matriz.
--return: (Object) Matriz instanciada.
function Matriz:new(atributos, rows, cols)
atributos = atributos or {};
setmetatable(atributos, self);
self.__index = self;
self.rows = rows;
self.cols = cols;
return atributos;
end
--Metodo que retorna uma linha da Matriz
--args: Linha desejada da Matriz
--return: (Object) Linha da Matriz requisitada
function Matriz:getLine(line)
if line > self.rows or line < 1 then
error("Acesso indevido fora dos limites");
end
return self.m[line];
end
--Metodo que retorna uma Coluna da Matriz
--args: Coluna desejada da Matriz
--return: (Object) Coluna da Matriz requisitada
function Matriz:getCol(col)
if col > self.cols or col < 1 then
error("Acesso indevido fora dos limites");
end
local col_obj = {};
for i = 1, self.rows do
col_obj[i] = self.m[i][col];
end
return col_obj;
end
--Metodo que troca um item da Matriz por outro
--args: Linha do primeiro item, coluna do primeiro item, linha do segundo item, coluna do segundo
function Matriz:swap(first_row, first_col, second_row, second_col)
if(first_col > self.cols or second_col > self.cols or first_col < 1 or second_col < 1) then
error("Acesso indevido fora dos limites");
end
if(first_row > self.rows or second_row > self.rows or first_row < 1 or second_row < 1) then
error("Acesso indevido fora dos limites");
end
local aux = self.m[first_row][first_col];
self.m[first_row][first_col] = self.m[second_row][second_col];
self.m[second_row][second_col] = aux;
return
end
--Metodo retorna um item da Matriz
--args: Linha do item, coluna do item
--return: (Object) item da Matriz da posicao requisitada
function Matriz:getPos(row, col)
if col > self.cols or col < 1 then
error("Acesso indevido fora dos limites");
end
if row > self.rows or row < 1 then
error("Acesso indevido fora dos limites");
end
return self.m[row][col];
end
--Metodo Adiciiona um item na Matriz
--args: Linha do item, coluna do item
function Matriz:setPos(item, row, col)
if col > self.cols or col < 1 or row > self.rows or row < 1 then
error("Acesso indevido fora dos limites");
end
self.m[row] = self.m[row] or {};
self.m[row][col] = item;
return
end
--Metodo para liberar a Matriz
function Matriz:free()
for i= 1, self.rows do
for j=1,self.cols do
self.m[i][j] = nil;
end
end
local aux = {__mode = "k"}
setmetatable(self.m,aux);
setmetatable(self, aux);
self = nil;
collectgarbage();
end
return Fila;