int lwpr_xml_read_file_into_buffer(const char *filename, char **buffer) { int length,numRead; char *buf; FILE *fp; fp = fopen(filename,"r"); if (fp==NULL) return -1; fseek(fp,0,SEEK_END); length=ftell(fp); buf = (char *) LWPR_MALLOC((size_t)length); if (buf==NULL) { fclose(fp); return -1; } *buffer = buf; rewind(fp); numRead = 0; while (numRead<length) { size_t n = fread(buf,1,(size_t)(length-numRead),fp); if (n==0) { LWPR_FREE(*buffer); fclose(fp); return -1; } buf +=n; numRead+=n; } fclose(fp); return length; }
int lwpr_read_binary_fp(LWPR_Model *model, FILE *fp) { char str[5]; int ok; int nIn,nInS,nOut; int i,dim; int version; ok = (int) fread(str, sizeof(char), 4, fp); if (ok!=4) return 0; str[4]=0; if (strcmp(str,"LWPR")!=0) return 0; if (!lwpr_io_read_int(fp, &version)) return 0; if (version!=LWPR_BINIO_VERSION) { fprintf(stderr,"Sorry, version of binary LWPR file does not match this implementation.\n"); return 0; } if (!lwpr_io_read_int(fp, &nIn) || !lwpr_io_read_int(fp, &nOut)) return 0; if (nIn<=0) return 0; if (nOut<=0) return 0; if (!lwpr_init_model(model, nIn, nOut, NULL)) return 0; ok = lwpr_io_read_int(fp, &i); model->kernel = (LWPR_Kernel) i; ok &= lwpr_io_read_int(fp, &i); if (i>0) { size_t len = (size_t) i; model->name = (char *) LWPR_MALLOC((len+1)*sizeof(char)); if (model->name == NULL) return 0; ok &= (fread(model->name, sizeof(char), len, fp) == len)?1:0; model->name[i] = 0; } nInS = model->nInStore; ok &= lwpr_io_read_int(fp, &model->n_data); ok &= lwpr_io_read_vector(fp, nIn, model->mean_x); ok &= lwpr_io_read_vector(fp, nIn, model->var_x); ok &= lwpr_io_read_int(fp, &model->diag_only); ok &= lwpr_io_read_int(fp, &model->update_D); ok &= lwpr_io_read_int(fp, &model->meta); ok &= lwpr_io_read_scalar(fp, &model->meta_rate); ok &= lwpr_io_read_scalar(fp, &model->penalty); ok &= lwpr_io_read_matrix(fp, nIn, nInS, nIn, model->init_alpha); ok &= lwpr_io_read_vector(fp, nIn, model->norm_in); ok &= lwpr_io_read_vector(fp, nOut, model->norm_out); ok &= lwpr_io_read_matrix(fp, nIn, nInS, nIn, model->init_D); ok &= lwpr_io_read_matrix(fp, nIn, nInS, nIn, model->init_M); ok &= lwpr_io_read_scalar(fp, &model->w_gen); ok &= lwpr_io_read_scalar(fp, &model->w_prune); ok &= lwpr_io_read_scalar(fp, &model->init_lambda); ok &= lwpr_io_read_scalar(fp, &model->final_lambda); ok &= lwpr_io_read_scalar(fp, &model->tau_lambda); ok &= lwpr_io_read_scalar(fp, &model->init_S2); ok &= lwpr_io_read_scalar(fp, &model->add_threshold); for (dim=0;dim<model->nOut;dim++) { int numRFS; LWPR_SubModel *sub = &model->sub[dim]; ok &= (fread(str, sizeof(char), 4, fp)==4)?1:0; str[4]=0; if (!ok || strcmp(str,"SUBM")!=0) { lwpr_free_model(model); return 0; } ok &= lwpr_io_read_int(fp, &i); ok &= (i==dim); ok &= lwpr_io_read_int(fp, &numRFS); ok &= lwpr_io_read_int(fp, &sub->n_pruned); for (i=0;i<numRFS;i++) { ok &= lwpr_io_read_rf(fp, sub); } ok &= (numRFS == sub->numRFS); } ok &= (fread(str, sizeof(char), 4, fp) == 4)?1:0; str[4] = 0; if (!ok || strcmp(str,"RPWL")!=0) { lwpr_free_model(model); return 0; } return 1; }