indivisible-legacy/src/list.c

48 lines
1012 B
C
Raw Normal View History

#include "list.h"
#include <stdlib.h>
#include <stdio.h>
#include "optimizers.h"
/**
* This is the number of elements by which the list expands.
* WARNING: Always use doubles for this number (2^X)
*/
#define BLOCK_SIZE 1024
void initList(List *l) {
l->list = malloc(sizeof(mpz_t) * BLOCK_SIZE);
if(!l->list) {
fprintf(stderr, "Failed to allocate memory to list!\n");
exit(1);
}
l->size = BLOCK_SIZE;
l->end = 0;
}
void deInitList(List *l) {
2016-12-10 10:20:01 +00:00
for(ulli i = 0; i < l->size; ++i) {
mpz_clear(l->list[i]);
}
free(l->list);
}
void addToList(List *l, mpz_t n) {
2016-12-09 23:50:23 +00:00
if(unlikely(l->end == l->size)) {
l->size += BLOCK_SIZE;
if(unlikely(l->size == 0)) {
fprintf(stderr,
2016-12-10 10:20:01 +00:00
"Size has reached limit of `long long int' type!\n");
exit(1);
}
void *tmp = realloc(l->list, sizeof(mpz_t) * l->size);
2016-12-09 23:50:23 +00:00
if(unlikely(!tmp)) {
fprintf(stderr, "Failed to allocate more memory to list!\n");
exit(1);
}
l->list = (mpz_t*)tmp;
}
mpz_init(l->list[l->end]);
mpz_set(l->list[l->end++], n);
}