lts_file_t lts_reader(lts_t lts,int segments,lts_file_t settings){ lts_file_t file=lts_file_bare("<heap>",lts->ltstype,segments,settings,sizeof(struct lts_file_s)); file->lts=lts; file->segments=segments; file->edge_labels=lts_type_get_edge_label_count(lts->ltstype); lts_file_set_read_init(file,read_init); lts_file_set_read_state(file,read_state); lts_file_set_read_edge(file,read_edge); lts_file_set_close(file,read_close); lts_file_complete(file); int T=lts_type_get_type_count(lts->ltstype); for(int i=0;i<T;i++){ lts_file_set_table(file,i,lts->values[i]); } lts_set_type(file->lts,LTS_LIST); file->init_count=0; file->state_count=0; file->edge_count=0; return file; }
lts_file_t aut_file_open(const char* name){ lts_type_t ltstype=single_action_type(); lts_file_t file=lts_file_bare(name,ltstype,1,NULL,sizeof(struct lts_file_s)); file->type_no=lts_type_get_edge_label_typeno(ltstype,0); lts_file_set_read_init(file,aut_read_init); lts_file_set_read_edge(file,aut_read_edge); lts_file_set_close(file,aut_read_close); lts_file_complete(file); file->f=fopen(name,"r"); if(file->f==NULL){ AbortCall("while opening %s",name); } int matches; matches = fscanf(file->f,"des%*[^(]s"); if (matches != 0) Abort("while parsing %s",name); matches = fscanf(file->f,"(%llu,%llu,%llu)\n",&file->root,&file->trans,&file->states); if (matches != 3) Abort("while parsing %s",name); Print(infoLong,"file %s contains %llu states and %llu transitions", name,file->states,file->trans); return file; }