#include "chunk_array.h" #include "stdbool.h" void chunk_array_free(chunk_array_t* chunk_array) { fclose(chunk_array->fp); free(chunk_array->data); free(chunk_array); } bool chunk_array_update_read(chunk_array_t* chunk_array) { size_t newLen = fread(chunk_array->data, sizeof(double), chunk_array->chunk_size, chunk_array->fp); chunk_array->init_pos += newLen; } bool chunk_array_get(chunk_array_t* chunk_array, size_t pos, double *valor) { if (pos>((chunk_array->init_pos + chunk_array->chunk_size)-1)) { chunk_array_update_read(chunk_array); } *valor=chunk_array->data[pos%chunk_array->chunk_size]; return true; } bool chunk_array_save(chunk_array_t* chunk_array, size_t pos, double valor) { if (pos>((chunk_array->init_pos + chunk_array->chunk_size)-1)) { chunk_array_flush(chunk_array); } chunk_array->data[pos%chunk_array->chunk_size]=valor; return true; } chunk_array_t* chunk_array_create(char* filename, size_t total_size, size_t chunk_size) { chunk_array_t* chunk_array = (chunk_array_t*)malloc(sizeof(chunk_array_t)); chunk_array->fp = fopen(filename, "w+"); if (chunk_array == NULL || chunk_array->fp == NULL) { return NULL; } chunk_array->data = malloc(chunk_size * sizeof(double)); if (chunk_size > 0 && chunk_array->data == NULL) { free(chunk_array); return NULL; } chunk_array->init_pos = 0; chunk_array->chunk_size = chunk_size; chunk_array->total_size = total_size; return chunk_array; } void chunk_array_read(chunk_array_t* chunk_array) { rewind(chunk_array->fp); chunk_array->init_pos = 0; size_t newLen = fread(chunk_array->data, sizeof(double), chunk_array->chunk_size, chunk_array->fp); } void chunk_array_write(chunk_array_t* chunk_array, char* filename) { chunk_array->fp = fopen(filename, "w"); if (chunk_array->fp == NULL) { fclose(chunk_array->fp); chunk_array->fp = fopen(filename, "w"); } chunk_array->init_pos = 0; } void chunk_array_flush(chunk_array_t* chunk_array) { size_t newLen = fwrite(chunk_array->data, sizeof(double), chunk_array->chunk_size, chunk_array->fp); chunk_array->init_pos += newLen; }