#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 pos) { int init_pos = pos/chunk_array->chunk_size; fseek(chunk_array->fp, init_pos * chunk_array->chunk_size * sizeof(double), SEEK_SET); 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, pos); } *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; } bool chunk_array_get(chunk_array_t* chunk_array, size_t pos, double *valor) { fseek(chunk_array->fp, pos * sizeof(double), SEEK_SET); fread(valor, sizeof(double), 1, chunk_array->fp); return true; } bool chunk_array_save(chunk_array_t* chunk_array, size_t pos, double valor) { fseek(chunk_array->fp, pos * sizeof(double), SEEK_SET); fwrite(&valor, sizeof(double), 1, chunk_array->fp); return true; }