#ifndef STRUCTS_ALIST_H #define STRUCTS_ALIST_H #include #include #include #include #include template 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