Example #1
0
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;
}
Example #2
0
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;
}