int fm_search(char *pattern, int pat_len, char *infile_name) { void fatal_error(char *); void read_prologue(bwi_out *); bwi_out s_main; bwi_out *s = &s_main; int num_occ,sp,ep; Report_occ = 0; Locate_occ = 0; Display_occ = 0; Oneline_report = 0; Type_mem_ops = EXT_MEM; Cache_percentage = 0; if (check_bwi_suffix(infile_name) == 0) fatal_error("The file name must end with .bwi -main-\n"); my_open_file(infile_name); init_bwi_cache(); read_prologue(s); num_occ = bwsearch(s, pattern, pat_len, &sp, &ep); my_fclose(Infile); return num_occ; }
int fm_unbuild(fm_index *s, uchar ** text, ulong *length) { int error; ulong i; if ((error = read_prologue(s)) < 0 ) { free_unbuild_mem(s); return error; } if ((error = uncompress_data(s)) < 0 ) { free_unbuild_mem(s); return error; } if ((error = fm_compute_lf(s)) < 0 ) { free_unbuild_mem(s); return error; } if ((error = fm_invert_bwt(s)) < 0 ) { free_unbuild_mem(s); return error; } ulong real_text_size; if(s->skip>1) real_text_size = s->text_size-s->num_marked_rows; else real_text_size = s->text_size; /* remap text */ for(i=0; i<real_text_size; i++) { if(s->text[i] == s->specialchar) s->text[i] = s->subchar; s->text[i] = s->inv_char_map[s->text[i]]; } *text = s->text; s->text = NULL; free_unbuild_mem(s); /* libera memoria allocata */ *length = real_text_size; return FM_OK; }