18void il_create(
IntList* il,
int num_fields)
22 il->cap = il_fixed_cap;
23 il->num_fields = num_fields;
24 il->free_element = -1;
30 if (il->data != il->fixed)
37 il->free_element = -1;
45int il_get(
const IntList* il,
int n,
int field)
47 assert(n >= 0 && n < il->num);
48 return il->data[n*il->num_fields + field];
51void il_set(
IntList* il,
int n,
int field,
int val)
53 assert(n >= 0 && n < il->num);
54 il->data[n*il->num_fields + field] = val;
59 const int new_pos = (il->num+1) * il->num_fields;
63 if (new_pos > il->cap)
66 const int new_cap = new_pos * 2;
70 if (il->cap == il_fixed_cap)
72 il->data = malloc(new_cap *
sizeof(*il->data));
73 memcpy(il->data, il->fixed,
sizeof(il->fixed));
78 il->data = realloc(il->data, new_cap *
sizeof(*il->data));
96 if (il->free_element != -1)
98 const int index = il->free_element;
99 const int pos = index * il->num_fields;
102 il->free_element = il->data[pos];
108 return il_push_back(il);
111void il_erase(
IntList* il,
int n)
114 const int pos = n * il->num_fields;
115 il->data[pos] = il->free_element;
116 il->free_element = n;