|
|
@ -111,15 +111,15 @@ void chunk_array_free(chunk_array_t* chunk_array) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void chunk_array_flush(chunk_array_t* chunk_array) {
|
|
|
|
void chunk_array_flush(chunk_array_t* chunk_array) {
|
|
|
|
printf("[FLUSH][%s] init_write %d\n", chunk_array->filename, chunk_array->init_write);
|
|
|
|
//printf("[FLUSH][%s] init_write %d\n", chunk_array->filename, chunk_array->init_write);
|
|
|
|
size_t mod;
|
|
|
|
size_t mod;
|
|
|
|
if (chunk_array->total_size - chunk_array->init_write > chunk_array->chunk_size ) {
|
|
|
|
if (chunk_array->total_size - chunk_array->init_write > chunk_array->chunk_size ) {
|
|
|
|
mod = chunk_array->chunk_size;
|
|
|
|
mod = chunk_array->chunk_size;
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
mod = chunk_array->total_size - chunk_array->init_write;
|
|
|
|
mod = chunk_array->total_size - chunk_array->init_write;
|
|
|
|
printf("[FLUSH] ACA mod = %d\n", mod);
|
|
|
|
//printf("[FLUSH] ACA mod = %d\n", mod);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fseek(chunk_array->fp, chunk_array->init_write * chunk_array->chunk_size * sizeof(double), SEEK_SET);
|
|
|
|
fseek(chunk_array->fp, chunk_array->init_write * sizeof(double), SEEK_SET);
|
|
|
|
fwrite(chunk_array->write_data, sizeof(double), mod, chunk_array->fp);
|
|
|
|
fwrite(chunk_array->write_data, sizeof(double), mod, chunk_array->fp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -127,13 +127,11 @@ bool chunk_array_update(chunk_array_t* chunk_array, size_t pos) {
|
|
|
|
chunk_array_flush(chunk_array);
|
|
|
|
chunk_array_flush(chunk_array);
|
|
|
|
|
|
|
|
|
|
|
|
int new_init = pos/chunk_array->chunk_size;
|
|
|
|
int new_init = pos/chunk_array->chunk_size;
|
|
|
|
|
|
|
|
chunk_array->init_write = new_init * chunk_array->chunk_size;
|
|
|
|
|
|
|
|
|
|
|
|
printf("[UPDATE] pos= %d new_init = %d\n", pos, new_init);
|
|
|
|
//printf("[UPDATE] pos = %d new_init = %d\n", pos, chunk_array->init_write);
|
|
|
|
|
|
|
|
|
|
|
|
fseek(chunk_array->fp, new_init * chunk_array->chunk_size * sizeof(double), SEEK_SET);
|
|
|
|
fseek(chunk_array->fp, chunk_array->init_write * sizeof(double), SEEK_SET);
|
|
|
|
|
|
|
|
|
|
|
|
chunk_array->init_write = new_init * chunk_array->chunk_size;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fread(chunk_array->write_data, sizeof(double), chunk_array->chunk_size, chunk_array->fp);
|
|
|
|
fread(chunk_array->write_data, sizeof(double), chunk_array->chunk_size, chunk_array->fp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -150,15 +148,6 @@ chunk_array_t* chunk_array_create(char* filename, size_t total_size) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*chunk_array->read_data = malloc(MAX_CHUNK_SIZE * sizeof(double));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (MAX_CHUNK_SIZE > 0 && chunk_array->read_data == NULL) {
|
|
|
|
|
|
|
|
free(chunk_array);
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//fread(chunk_array->write_data, sizeof(double), MAX_CHUNK_SIZE, chunk_array->fp);
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
chunk_array->write_data = malloc(MAX_CHUNK_SIZE * sizeof(double));
|
|
|
|
chunk_array->write_data = malloc(MAX_CHUNK_SIZE * sizeof(double));
|
|
|
|
|
|
|
|
|
|
|
|
if (MAX_CHUNK_SIZE > 0 && chunk_array->write_data == NULL) {
|
|
|
|
if (MAX_CHUNK_SIZE > 0 && chunk_array->write_data == NULL) {
|
|
|
@ -178,23 +167,9 @@ chunk_array_t* chunk_array_create(char* filename, size_t total_size) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool chunk_array_get(chunk_array_t* chunk_array, size_t pos, double *valor) {
|
|
|
|
bool chunk_array_get(chunk_array_t* chunk_array, size_t pos, double *valor) {
|
|
|
|
//printf("[READ] pos = %d y init_write = %d\n", pos, chunk_array->init_write);
|
|
|
|
|
|
|
|
/*if (pos > chunk_array->init_write && pos < chunk_array->init_write + chunk_array->chunk_size) {
|
|
|
|
|
|
|
|
*valor=chunk_array->write_data[pos%chunk_array->chunk_size];
|
|
|
|
|
|
|
|
printf("[READ] Del write valor = %f\n", *valor);
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (pos<chunk_array->init_read || pos>chunk_array->init_read + chunk_array->chunk_size) {
|
|
|
|
|
|
|
|
printf("[READ] actualizo porq pos = %d y init_read = %d\n", pos, chunk_array->init_read);
|
|
|
|
|
|
|
|
chunk_array_update_read(chunk_array, pos);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
*valor=chunk_array->read_data[pos%chunk_array->chunk_size];
|
|
|
|
|
|
|
|
printf("[READ] Del read valor = %f\n", *valor);
|
|
|
|
|
|
|
|
return true;*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (pos<chunk_array->init_write || pos>chunk_array->init_write + chunk_array->chunk_size-1) {
|
|
|
|
if (pos<chunk_array->init_write || pos>chunk_array->init_write + chunk_array->chunk_size-1) {
|
|
|
|
printf("[READ][%s] actualizo pos = %d init_write = %d\n",chunk_array->filename, pos, chunk_array->init_write);
|
|
|
|
//printf("[READ][%s] actualizo pos = %d init_write = %d\n",chunk_array->filename, pos, chunk_array->init_write);
|
|
|
|
//chunk_array_flush(chunk_array);
|
|
|
|
|
|
|
|
chunk_array_update(chunk_array, pos);
|
|
|
|
chunk_array_update(chunk_array, pos);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
size_t mod;
|
|
|
|
size_t mod;
|
|
|
@ -205,16 +180,14 @@ bool chunk_array_get(chunk_array_t* chunk_array, size_t pos, double *valor) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
int real_pos = pos%mod;
|
|
|
|
int real_pos = pos%mod;
|
|
|
|
*valor=chunk_array->write_data[real_pos];
|
|
|
|
*valor=chunk_array->write_data[real_pos];
|
|
|
|
printf("[READ] %s[%d] = %f = chunk[%d] init_write = %d\n", chunk_array-> filename, pos, *valor, real_pos, chunk_array->init_write);
|
|
|
|
//printf("[READ] %s[%d] = %f = chunk[%d] init_write = %d\n", chunk_array-> filename, pos, *valor, real_pos, chunk_array->init_write);
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool chunk_array_save(chunk_array_t* chunk_array, size_t pos, double valor) {
|
|
|
|
bool chunk_array_save(chunk_array_t* chunk_array, size_t pos, double valor) {
|
|
|
|
//printf("[WRITE] pos = %d y init_write = %d\n", pos, chunk_array->init_write);
|
|
|
|
|
|
|
|
if (pos<chunk_array->init_write || pos>chunk_array->init_write + chunk_array->chunk_size-1) {
|
|
|
|
if (pos<chunk_array->init_write || pos>chunk_array->init_write + chunk_array->chunk_size-1) {
|
|
|
|
printf("[WRITE][%s] actualizo pos = %d init_write = %d\n",chunk_array->filename, pos, chunk_array->init_write);
|
|
|
|
//printf("[WRITE][%s] actualizo pos = %d init_write = %d\n",chunk_array->filename, pos, chunk_array->init_write);
|
|
|
|
//chunk_array_flush(chunk_array);
|
|
|
|
|
|
|
|
chunk_array_update(chunk_array,pos);
|
|
|
|
chunk_array_update(chunk_array,pos);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
size_t mod;
|
|
|
|
size_t mod;
|
|
|
@ -222,10 +195,10 @@ bool chunk_array_save(chunk_array_t* chunk_array, size_t pos, double valor) {
|
|
|
|
mod = chunk_array->chunk_size;
|
|
|
|
mod = chunk_array->chunk_size;
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
mod = chunk_array->total_size - chunk_array->init_write;
|
|
|
|
mod = chunk_array->total_size - chunk_array->init_write;
|
|
|
|
printf("[WRITE] ACA mod = %d\n", mod);
|
|
|
|
//printf("[WRITE] ACA mod = %d\n", mod);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
chunk_array->write_data[pos%mod]=valor;
|
|
|
|
chunk_array->write_data[pos%mod]=valor;
|
|
|
|
|
|
|
|
|
|
|
|
printf("[WRITE] %s[%d] = %f\n", chunk_array-> filename, pos, valor);
|
|
|
|
//printf("[WRITE] %s[%d] = %f\n", chunk_array-> filename, pos, valor);
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|