46 lines
1.3 KiB
C
46 lines
1.3 KiB
C
#include "cluster_reader.h"
|
|
|
|
int read_clusters(FILE* fp, int64_t n_clusters, Cluster* buf, int *n_left){
|
|
printf("Item size: %lu n_clusters: %lld, n_left: %d\n", sizeof(Cluster), n_clusters,*n_left);
|
|
int iframe=0, nph=*n_left;
|
|
size_t n_read=0, nph_read=0, nn=*n_left, nr=0;
|
|
//n_left=n_clusters;
|
|
|
|
//read photons left from previous frame
|
|
if (nph) {
|
|
if (nph>n_clusters-nph_read)
|
|
nn=n_clusters-nph_read;
|
|
else
|
|
nn=nph;
|
|
//printf("* %d %d %d %d\n",iframe,nph,nn,n_left);
|
|
nr += fread((void*)(buf+nph_read), sizeof(Cluster), nn, fp);
|
|
n_read+=nr/sizeof(Cluster);
|
|
nph_read+=nn;
|
|
*n_left=nph-nn;
|
|
}
|
|
if (nph_read<n_clusters) {
|
|
//keep on reading frames and photons until reaching n_clusters
|
|
while (fread(&iframe, sizeof(iframe), 1, fp)) {
|
|
if (fread(&nph, sizeof(nph), 1, fp) ) {
|
|
if (nph>n_clusters-nph_read)
|
|
nn=n_clusters-nph_read;
|
|
else
|
|
nn=nph;
|
|
|
|
//printf("%d %d %d %d\n",iframe,nph,nr,n_left);
|
|
nr += fread((void*)(buf+nph_read), sizeof(Cluster), nn, fp);
|
|
//printf("%d %d %d %d\n",iframe,nph,nr,n_left);
|
|
n_read+=nr;
|
|
nph_read+=nn;
|
|
*n_left=nph-nn;
|
|
}
|
|
if (nph_read>=n_clusters)
|
|
break;
|
|
}
|
|
}
|
|
// size_t n_read = fread(buf, sizeof(Cluster), n_clusters, fp);
|
|
printf("Read: %zu items %zu left %d\n", nph_read, n_read,*n_left);
|
|
return nph_read;
|
|
}
|
|
|