20void il_create(
IntList *il,
int num_fields )
24 il->cap = il_fixed_cap;
25 il->num_fields = num_fields;
26 il->free_element = -1;
32 if ( il->data != il->fixed )
39 il->free_element = -1;
47int il_get(
const IntList *il,
int n,
int field )
49 assert( n >= 0 && n < il->num );
50 return il->data[n * il->num_fields + field];
53void il_set(
IntList *il,
int n,
int field,
int val )
55 assert( n >= 0 && n < il->num );
56 il->data[n * il->num_fields + field] = val;
61 const int new_pos = ( il->num + 1 ) * il->num_fields;
65 if ( new_pos > il->cap ) {
67 const int new_cap = new_pos * 2;
71 if ( il->cap == il_fixed_cap ) {
72 il->data = malloc( new_cap *
sizeof( *il->data ) );
73 memcpy( il->data, il->fixed,
sizeof( il->fixed ) );
76 il->data = realloc( il->data, new_cap *
sizeof( *il->data ) );
87 assert( il->num > 0 );
94 if ( il->free_element != -1 ) {
95 const int index = il->free_element;
96 const int pos = index * il->num_fields;
99 il->free_element = il->data[pos];
105 return il_push_back( il );
108void il_erase(
IntList *il,
int n )
111 const int pos = n * il->num_fields;
112 il->data[pos] = il->free_element;
113 il->free_element = n;