/* * cache.c * * Save the reflection datablock to save having to recalculate it * * (c) 2007 Gordon Ball * Thomas White * * dtr - Diffraction Tomography Reconstruction * */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include "reflections.h" #include "cache.h" ReflectionContext *cache_load(const char *filename) { FILE *f; CacheHeader ch; ReflectionContext *rctx; rctx = reflection_init(); f = fopen(filename, "rb"); fread(&ch, sizeof(CacheHeader), 1, f); int i; for ( i=0; inext = NULL; /* Guarantee swift failure in the event of a screw-up */ //printf("reading (%f,%f,%f) i=%f (%d,%d,%d) %d\n",cr->x,cr->y,cr->z,cr->intensity,cr->h,cr->k,cr->l,cr->type); reflection_add_from_reflection(rctx, cr); } fclose(f); return rctx; } int cache_save(const char *filename, ReflectionContext *rctx) { FILE *f; CacheHeader ch; Reflection *r; CachedReflection *rnp; int count; char top[16] = "DTRCACHE\0\0\0\0\0\0\0\0"; count = 0; r = rctx->reflections; while ( r != NULL ) { count++; r = r->next; }; f = fopen(filename, "wb"); memcpy(&ch.top, &top, sizeof(top)); ch.count = count; ch.scale = 0.; //temp, currently doesn't do anything fwrite(&ch, sizeof(CacheHeader), 1, f); r = rctx->reflections; rnp = malloc(sizeof(CachedReflection)); while ( r != NULL ) { memcpy(rnp, r, sizeof(CachedReflection)); //printf("writing (%f,%f,%f) i=%f (%d,%d,%d) %d\n",rnp->x,rnp->y,rnp->z,rnp->intensity,rnp->h,rnp->k,rnp->l,rnp->type); fwrite(rnp, sizeof(CachedReflection), 1, f); r = r->next; }; free(rnp); fclose(f); return 0; }