-
Notifications
You must be signed in to change notification settings - Fork 0
/
ArrayHelper.jack
102 lines (93 loc) · 2.89 KB
/
ArrayHelper.jack
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
/*
Array utility functions
*/
class ArrayHelper {
// gets a two dimensional 32x32 array populated with false in every element
function Array getEmptyGrid() {
var Array rows, columns;
var int i;
let i = 0;
let rows = ArrayHelper.getEmptyArray();
while (i < 32) {
let columns = ArrayHelper.getEmptyArray();
let rows[i] = columns;
let i = i + 1;
}
return rows;
}
// gets a 32 element array populated with false in every element
function Array getEmptyArray() {
var Array empty;
let empty = Array.new(32);
do ArrayHelper.clearGridRow(empty);
return empty;
}
// clears a 32 element array by setting every element to false
function void clearGridRow(Array gridRow) {
var int i;
let i = 0;
while (i < 32) {
let gridRow[i] = false;
let i = i + 1;
}
return;
}
// clears a two dimensional 32 x 32 array by setting every element to false
function void clearGrid(Array grid) {
var int row;
let row = 0;
while (row < 32) {
do ArrayHelper.clearGridRow(grid[row]);
let row = row + 1;
}
return;
}
// sets the status of the cell at x,y to either alive or dead
function void setArrayCell(Array cells, int x, int y, boolean alive) {
var Array row;
let row = cells[y];
let row[x] = alive;
return;
}
// sets cells starting at x,y and travelling horizontally using a string shorthand in "---x-x-xx" style,
// where "-" represents a dead cell and "x" represents a live one
function void setArrayCells(Array cellGrid, int x, int y, String cells) {
var int i;
let i = 0;
while (i < cells.length()) {
// a - (char 45) will leave the cell blank, anything else will set it
do ArrayHelper.setArrayCell(cellGrid, x + i, y, ~(cells.charAt(i) = 45));
let i = i + 1;
}
return;
}
// copies values from the source 32 x 32 two dimensional array to the target array
function void copyGrid(Array source, Array target) {
var Array sourceRow, targetRow;
var int x, y;
let y = 0;
while (y < 32) {
let sourceRow = source[y];
let targetRow = target[y];
let x = 0;
while (x < 32) {
let targetRow[x] = sourceRow[x];
let x = x + 1;
}
let y = y + 1;
}
return;
}
// calls dispose on all arrays in a two dimensional 32 x 32 array
function void cleanUp(Array cells) {
var Array row;
var int i;
while (i < 32) {
let row = cells[i];
do row.dispose();
let i = i + 1;
}
do cells.dispose();
return;
}
}