blob: 050f77571858c7deefe7c3d3ce384083bd96fe34 (
plain) (
blame)
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
|
#ifndef STRUCTS_ALIST_H
#define STRUCTS_ALIST_H
#include <knob/format.h>
#include <knob/block.h>
#include <knob/panic.h>
#include <knob/heap.h>
#include <stdint.h>
template<class data>
class alist {
public:
uint32_t n_entries;
uint32_t buf_size;
uint32_t expand_by;
data *buf;
alist(uint32_t default_size=10, uint32_t expand_by=10)
: n_entries(0), buf_size(default_size), expand_by(expand_by),
buf((data *)get_block(default_size * sizeof(data))) {}
void add_back(data d) {
if (n_entries == buf_size) {
data *const new_buf = (data *)get_block((buf_size += expand_by) * sizeof(data));
blockcpy(new_buf, buf, n_entries * sizeof(data));
free_block(buf);
buf = new_buf;
}
buf[n_entries++] = d;
}
//returns -1 if not found
uint32_t index_of(data d) {
for (uint32_t i = 0; i < n_entries; ++i)
if (buf[i] == d)
return i;
return -1;
}
};
#endif
|