refactor aux buffer and macros
This commit is contained in:
parent
a5d67f8470
commit
26c00bd4e3
2 changed files with 45 additions and 49 deletions
|
@ -332,9 +332,13 @@
|
||||||
} field;
|
} field;
|
||||||
|
|
||||||
// TODO: implement aux as queue
|
// TODO: implement aux as queue
|
||||||
uchar *uchar_aux;
|
struct aux
|
||||||
uint32 aux_pos;
|
{
|
||||||
uint32 aux_len;
|
uchar *ptr;
|
||||||
|
uint32 pos;
|
||||||
|
uint32 len;
|
||||||
|
} aux;
|
||||||
|
|
||||||
} eas3_data;
|
} eas3_data;
|
||||||
|
|
||||||
/************************************************************************************************************\
|
/************************************************************************************************************\
|
||||||
|
|
|
@ -93,28 +93,28 @@
|
||||||
! information. !
|
! information. !
|
||||||
! !
|
! !
|
||||||
\*----------------------------------------------------------------------------------------------------------*/
|
\*----------------------------------------------------------------------------------------------------------*/
|
||||||
#define aux_enqueue(aux, aux_pos, aux_len, chunck, chunck_len) \
|
#define aux_enqueue(aux, chunck, chunck_len) \
|
||||||
{ \
|
{ \
|
||||||
if (aux_pos + chunck_len > aux_len) \
|
if (aux.pos + chunck_len > aux.len) \
|
||||||
{ \
|
{ \
|
||||||
while(aux_pos + chunck_len > aux_len) \
|
while(aux.pos + chunck_len > aux.len) \
|
||||||
{ \
|
{ \
|
||||||
aux_len += aux_len / 2; \
|
aux.len += aux.len / 2; \
|
||||||
} \
|
} \
|
||||||
aux = realloc(aux, aux_len); \
|
aux.ptr = realloc(aux.ptr, aux.len); \
|
||||||
} \
|
} \
|
||||||
memcpy(aux + aux_pos, chunck, chunck_len); \
|
memcpy(aux.ptr + aux.pos, chunck, chunck_len); \
|
||||||
aux_pos += chunck_len; \
|
aux.pos += chunck_len; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define aux_dequeue(aux, aux_pos, aux_len, chunck, chunck_len) \
|
#define aux_dequeue(aux, chunck, chunck_len) \
|
||||||
{ \
|
{ \
|
||||||
if(aux_pos + chunck_len <= aux_len) { \
|
if(aux.pos + chunck_len <= aux.len) { \
|
||||||
memcpy(chunck, aux + aux_pos, chunck_len); \
|
memcpy(chunck, aux.ptr + aux.pos, chunck_len); \
|
||||||
aux_pos += chunck_len; \
|
aux.pos += chunck_len; \
|
||||||
} else { \
|
} else { \
|
||||||
fprintf(stderr, MEMERROR); \
|
fprintf(stderr, MEMERROR); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------------------------------------*\
|
/*----------------------------------------------------------------------------------------------------------*\
|
||||||
|
@ -395,10 +395,10 @@ read_eas3_header(FILE *const fp, eas3_data *const data)
|
||||||
! block has been chosen arbitrarily and should be large !
|
! block has been chosen arbitrarily and should be large !
|
||||||
! enough to prevent excessive reallocation. !
|
! enough to prevent excessive reallocation. !
|
||||||
\*--------------------------------------------------------*/
|
\*--------------------------------------------------------*/
|
||||||
data->uchar_aux = calloc(AUX_SIZE, sizeof(uchar));
|
data->aux.ptr = calloc(AUX_SIZE, sizeof(uchar));
|
||||||
data->aux_pos = 0;
|
data->aux.pos = 0;
|
||||||
data->aux_len = AUX_SIZE;
|
data->aux.len = AUX_SIZE;
|
||||||
if(!data->uchar_aux)
|
if(!data->aux.ptr)
|
||||||
{
|
{
|
||||||
// memory allocation error
|
// memory allocation error
|
||||||
fprintf(stderr, MEMERROR);
|
fprintf(stderr, MEMERROR);
|
||||||
|
@ -436,8 +436,7 @@ read_eas3_header(FILE *const fp, eas3_data *const data)
|
||||||
! Emit the standard parameters to the auxiliary informa- !
|
! Emit the standard parameters to the auxiliary informa- !
|
||||||
! tion information memory block. !
|
! tion information memory block. !
|
||||||
\*--------------------------------------------------------*/
|
\*--------------------------------------------------------*/
|
||||||
aux_enqueue(data->uchar_aux, data->aux_pos, data->aux_len,
|
aux_enqueue(data->aux, (uchar*)params, 176);
|
||||||
(uchar*)params, 176);
|
|
||||||
|
|
||||||
/*--------------------------------------------------------*\
|
/*--------------------------------------------------------*\
|
||||||
! Convert the parameters required for the bwc compression !
|
! Convert the parameters required for the bwc compression !
|
||||||
|
@ -501,8 +500,7 @@ read_eas3_header(FILE *const fp, eas3_data *const data)
|
||||||
! Emit the time step array to the auxiliary information !
|
! Emit the time step array to the auxiliary information !
|
||||||
! memory block. !
|
! memory block. !
|
||||||
\*--------------------------------------------------------*/
|
\*--------------------------------------------------------*/
|
||||||
aux_enqueue(data->uchar_aux, data->aux_pos, data->aux_len, buffer_char,
|
aux_enqueue(data->aux, buffer_char, params->nts * sizeof(uint64));
|
||||||
params->nts * sizeof(uint64));
|
|
||||||
|
|
||||||
/*--------------------------------------------------------*\
|
/*--------------------------------------------------------*\
|
||||||
! Check if any attributes have been specified in the eas3 !
|
! Check if any attributes have been specified in the eas3 !
|
||||||
|
@ -535,8 +533,7 @@ read_eas3_header(FILE *const fp, eas3_data *const data)
|
||||||
! Emit the timestep attribute array to the auxiliary infor-!
|
! Emit the timestep attribute array to the auxiliary infor-!
|
||||||
! mation memory block. !
|
! mation memory block. !
|
||||||
\*--------------------------------------------------------*/
|
\*--------------------------------------------------------*/
|
||||||
aux_enqueue(data->uchar_aux, data->aux_pos, data->aux_len, buffer_char,
|
aux_enqueue(data->aux, buffer_char, params->nts * ATTRLEN * sizeof(char));
|
||||||
params->nts * ATTRLEN * sizeof(char));
|
|
||||||
|
|
||||||
for(i = 0; i < params->npar; ++i)
|
for(i = 0; i < params->npar; ++i)
|
||||||
{
|
{
|
||||||
|
@ -607,8 +604,7 @@ read_eas3_header(FILE *const fp, eas3_data *const data)
|
||||||
! Emit the remaining header information the the auxiliary !
|
! Emit the remaining header information the the auxiliary !
|
||||||
! information stream. !
|
! information stream. !
|
||||||
\*--------------------------------------------------------*/
|
\*--------------------------------------------------------*/
|
||||||
aux_enqueue(data->uchar_aux, data->aux_pos, data->aux_len,
|
aux_enqueue(data->aux, buffer_char, Lread);
|
||||||
buffer_char, Lread);
|
|
||||||
|
|
||||||
/*--------------------------------------------------------*\
|
/*--------------------------------------------------------*\
|
||||||
! Free the buffer character array. !
|
! Free the buffer character array. !
|
||||||
|
@ -620,15 +616,15 @@ read_eas3_header(FILE *const fp, eas3_data *const data)
|
||||||
! ful, the address to the aux memory block stored is !
|
! ful, the address to the aux memory block stored is !
|
||||||
! stored in the file structure alongside its size. !
|
! stored in the file structure alongside its size. !
|
||||||
\*--------------------------------------------------------*/
|
\*--------------------------------------------------------*/
|
||||||
if(data->aux_pos != data->aux_len)
|
if(data->aux.pos != data->aux.len)
|
||||||
{
|
{
|
||||||
data->aux_len = data->aux_pos;
|
data->aux.len = data->aux.pos;
|
||||||
data->uchar_aux = realloc(data->uchar_aux, data->aux_len);
|
data->aux.ptr = realloc(data->aux.ptr, data->aux.len);
|
||||||
if(!data->uchar_aux)
|
if(!data->aux.ptr)
|
||||||
{
|
{
|
||||||
// memory allocation error
|
// memory allocation error
|
||||||
fprintf(stderr, MEMERROR);
|
fprintf(stderr, MEMERROR);
|
||||||
data->aux_len = 0;
|
data->aux.len = 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -706,7 +702,7 @@ write_eas3_header(FILE *const fp, eas3_data *const data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rewind aux
|
// Rewind aux
|
||||||
data->aux_pos = 0;
|
data->aux.pos = 0;
|
||||||
|
|
||||||
/*--------------------------------------------------------*\
|
/*--------------------------------------------------------*\
|
||||||
! Get the standard parameters from the auxiliary informa- !
|
! Get the standard parameters from the auxiliary informa- !
|
||||||
|
@ -720,8 +716,7 @@ write_eas3_header(FILE *const fp, eas3_data *const data)
|
||||||
free(params);
|
free(params);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
aux_dequeue(data->uchar_aux, data->aux_pos, data->aux_len,
|
aux_dequeue(data->aux, params, sizeof(eas3_std_params));
|
||||||
params, sizeof(eas3_std_params));
|
|
||||||
|
|
||||||
if(fwrite(params, sizeof(uint64), 22, fp) != 22)
|
if(fwrite(params, sizeof(uint64), 22, fp) != 22)
|
||||||
{
|
{
|
||||||
|
@ -757,8 +752,7 @@ write_eas3_header(FILE *const fp, eas3_data *const data)
|
||||||
free(buffer_char);
|
free(buffer_char);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
aux_dequeue(data->uchar_aux, data->aux_pos, data->aux_len,
|
aux_dequeue(data->aux, buffer_char, data->params.nts * sizeof(uint64));
|
||||||
buffer_char, data->params.nts * sizeof(uint64));
|
|
||||||
|
|
||||||
if(fwrite(buffer_char, sizeof(uint64), data->params.nts, fp) != data->params.nts)
|
if(fwrite(buffer_char, sizeof(uint64), data->params.nts, fp) != data->params.nts)
|
||||||
{
|
{
|
||||||
|
@ -788,8 +782,7 @@ write_eas3_header(FILE *const fp, eas3_data *const data)
|
||||||
free(buffer_char);
|
free(buffer_char);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
aux_dequeue(data->uchar_aux, data->aux_pos, data->aux_len,
|
aux_dequeue(data->aux, buffer_char, data->params.nts * ATTRLEN);
|
||||||
buffer_char, data->params.nts * ATTRLEN);
|
|
||||||
|
|
||||||
if(fwrite(buffer_char, sizeof(uchar), data->params.nts * ATTRLEN, fp) != (data->params.nts * ATTRLEN))
|
if(fwrite(buffer_char, sizeof(uchar), data->params.nts * ATTRLEN, fp) != (data->params.nts * ATTRLEN))
|
||||||
{
|
{
|
||||||
|
@ -854,8 +847,7 @@ write_eas3_header(FILE *const fp, eas3_data *const data)
|
||||||
free(buffer_char);
|
free(buffer_char);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
aux_dequeue(data->uchar_aux, data->aux_pos, data->aux_len,
|
aux_dequeue(data->aux, buffer_char, Lwrite);
|
||||||
buffer_char, Lwrite);
|
|
||||||
|
|
||||||
if(fwrite(buffer_char, sizeof(uchar), Lwrite, fp) != Lwrite)
|
if(fwrite(buffer_char, sizeof(uchar), Lwrite, fp) != Lwrite)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue