/*///////////////////////
//Accessing the indexed//
///////////////////////*/
int display(void *index, UCHAR *pattern, ULONG length, ULONG numc, ULONG *numocc, UCHAR **snippet_text, ULONG **snippet_lengths) {
  int l,r;
  int pos;
  ULONG *occ, i, j, from, to, len, x;
  UCHAR *text_aux;
  CSA *SA=(CSA *) index;
  csa_bsearch(pattern,length,SA,&l,&r);
  *numocc = r-l+1;
  occ = csa_batchlookup2(SA,l,r);
  *snippet_lengths = (ULONG *) malloc((*numocc)*sizeof(ULONG));
  if (!(*snippet_lengths)) return 1;
  *snippet_text = (UCHAR *) malloc((*numocc)*(length+2*numc)*sizeof(UCHAR));
  if (!(*snippet_text)) return 1;
  text_aux=*snippet_text;

  for (i=0;i<(*numocc);i++) {
    x=occ[i];
    if (x>numc) from = x-numc;
    else from=0;
    to= ((int)(x+length+numc-1)<(int)(SA->n-1)?(x+length+numc-1):(SA->n-1));
    len =to-from+1;
    pos = csa_inverse(SA,from+1);
    for (j=0; (int)j<(int)len;j++) {
      text_aux[j] = csa_T(SA,pos);
      pos= csa_psi(SA,pos);
    }
    text_aux+=length+2*numc;
    (*snippet_lengths)[i] = len;
  }
  free(occ);
  return 0;
}
/*////////////////////
//Querying the Index//
////////////////////*/
int count(void *index, UCHAR *pattern, ULONG length, ULONG *numocc){
  int l,r,len;
  CSA *SA=(CSA *) index;
  len = csa_bsearch(pattern,length,SA,&l,&r);
  *numocc = r-l+1; 
  return 0;
}
Ejemplo n.º 3
0
	/*////////////////////
	//Querying the Index//
	////////////////////*/
	int count(void *index, uchar *pattern, ulong length, ulong *numocc) {
		int l,r,len;
		CSA *SA=(CSA *) index;
		len = csa_bsearch(pattern,length,SA,&l,&r);
		*numocc = r-l+1;
		return 0;
	}
int locate(void *index, UCHAR *pattern, ULONG length, ULONG **occ, ULONG *numocc){
  //*numocc=locate_extract(index);
  //exit(0);
  int l,r,len;
  CSA *SA=(CSA *) index;
  len = csa_bsearch(pattern,length,SA,&l,&r);
  *numocc = r-l+1; 
  (*occ) = csa_batchlookup2(SA,l,r);
  return 0;
}