mirror of
https://github.com/Unidata/netcdf-c.git
synced 2024-12-21 08:39:46 +08:00
f3e711e2b8
re: https://github.com/Unidata/netcdf-c/issues/2177 re: https://github.com/Unidata/netcdf-c/pull/2178 Provide get/set functions to store global data alignment information and apply it when a file is created. The api is as follows: ```` int nc_set_alignment(int threshold, int alignment); int nc_get_alignment(int* thresholdp, int* alignmentp); ```` If defined, then for every file created opened after the call to nc_set_alignment, for every new variable added to the file, the most recently set threshold and alignment values will be applied to that variable. The nc_get_alignment function return the last values set by nc_set_alignment. If nc_set_alignment has not been called, then it returns the value 0 for both threshold and alignment. The alignment parameters are stored in the NCglobalstate object (see below) for use as needed. Repeated calls to nc_set_alignment will overwrite any existing values in NCglobalstate. The alignment parameters are applied in libhdf5/hdf5create.c and libhdf5/hdf5open.c The set/get alignment functions are defined in libsrc4/nc4internal.c. A test program was added as nc_test4/tst_alignment.c. ## Misc. Changes Unrelated to Alignment * The NCRCglobalstate type was renamed to NCglobalstate to indicate that it represented more general global state than just .rc data. It was also moved to nc4internal.h. This led to a large number of small changes: mostly renaming. The global state management functions were moved to nc4internal.c. * The global chunk cache variables have been moved into NCglobalstate. As warranted, other global state will be moved as well. * Some misc. problems with the nczarr performance tests were corrected.
45 lines
976 B
C
45 lines
976 B
C
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include "netcdf.h"
|
|
#include "ncrc.h"
|
|
#include "nc4internal.h"
|
|
|
|
int
|
|
main(int argc, char** argv)
|
|
{
|
|
size_t i,nentries = 0;
|
|
NCglobalstate* ngs = NC_getglobalstate();
|
|
NCRCinfo* info = NULL;
|
|
NCRCentry* entry = NULL;
|
|
|
|
/* Cause the .rc files to be read and merged */
|
|
nc_initialize();
|
|
|
|
if((ngs = NC_getglobalstate())==NULL) abort();
|
|
info = ngs->rcinfo;
|
|
|
|
if(info->ignore) {
|
|
fprintf(stderr,".rc ignored\n");
|
|
exit(0);
|
|
}
|
|
|
|
/* Print out the .rc entries */
|
|
if((nentries = NC_rcfile_length(info))==0) {
|
|
printf("<empty>\n");
|
|
exit(0);
|
|
}
|
|
for(i=0;i<nentries;i++) {
|
|
entry = NC_rcfile_ith(info,i);
|
|
if(entry == NULL) abort();
|
|
if(entry->host != NULL) {
|
|
printf("[%s ",entry->host);
|
|
if(entry->path != NULL)
|
|
printf("/%s] ",entry->path);
|
|
printf("]");
|
|
}
|
|
printf("|%s|->|%s|\n",entry->key,entry->value);
|
|
}
|
|
return 0;
|
|
}
|