blob: 73580e0831e4759563a0990d9b4cb1dd217db528 (
plain)
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
|
struct Vector {
uint
el_size,
num_el,
dat_size,
~uint8 dat
}
/; method Vector
/; resize (uint num_el)
self.dat_size = num_el
self.dat = _realloc(self.dat, num_el * self.el_size)
;/
/; get (uint i) [~uint8]
/; if (i !< self.num_el)
return self.dat
;/
return self.dat + (i * self.el_size)
;/
/; set (uint i, ~uint8 data)
~uint8 index = self.get(i)
/; loop (i = 0; i < self.el_size) [i++]
index` = data`
index++
data++
;/
;/
/; push (~uint8 data)
self.num_el++
self.set(self.num_el - 1, data)
/; if (self.num_el !< self.dat_size)
self.resize(2 * self.dat_size)
;/
;/
/; pop
self.num_el--
/; if (self.num_el > 0 && self.num_el < self.dat_size / 4)
self.resize(self.dat_size / 2)
;; else if (self.num_el < 0)
self.num_el = 0
;/
;/
/; remove (int index)
index++
/; loop (index < self.num_el) [index++]
self.set(index - 1, self.get(index))
;/
self.pop()
;/
/; copy (Vector v)
self.dat_size = v.dat_size
self.num_el = v.num_el
self.el_size = v.el_size
self.dat = _alloc(self.dat_size * self.el_size)
/; loop (int i = 0; i < self.num_el) [i++]
self.set(i, v.dat + i * self.el_size)
;/
;/
/; add (Vector v)
/; loop (int i = 0; i < v._len()) [i++]
self.push(v.get(i))
;/
;/
# [UNSAFE] ONLY USE FOR STRING VECTORS
/; add_str (~uint8 dat)
/; loop (int i = 0; dat{i} !== 0)
self.push(dat + i)
;/
;/
/; start (int el_size)
self.num_el = 0
self.el_size = el_size
self.dat_size = 1
self.dat = _alloc(self.el_size)
;/
/; _len [uint]
return self.num_el
;/
/; _del
self.num_el = 0
self.el_size = 0
self.dat_size = 0
_delete(self.dat)
self.dat = 0
;/
;/
|