/*///////////////////////
//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;
}
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;
}
Exemplo n.º 3
0
	ulong locate_extract(void *index) {
		CSA *SA=(CSA *) index;
		ulong largo,*occ,lar,n=SA->n,l,r,lll=0;
		ulong matches,locate;
		ulong random,hh;
		for ( hh=1; hh <= 1000000; hh*=10)
		for (lar=1;lar<=9;lar++) {
			largo=lar*hh;
			occ=NULL;
			random = (ulong) (((float) rand()/ (float) RAND_MAX)*(n-1));
			matches = largo+1;
			locate=0;
			occ = (ulong *) malloc(matches*sizeof(ulong));
			l=random;
			r=min(random+largo,n-3);
			occ = csa_batchlookup2(SA,l,r);
			free(occ);
		}
		return lll;
	}
ULONG locate_extract(void *index){
CSA *SA=(CSA *) index;
ULONG largo,*occ,lar,n=SA->n,l,r,lll=0;
long te; 
ULONG matches,locate;
ULONG random,hh;
for ( hh=1; hh <= 1000000; hh*=10)
 for (lar=1;lar<=9;lar++) {
   largo=lar*hh;
   startclock3();
   occ=NULL;
   random = (ULONG) (((float) rand()/ (float) RAND_MAX)*(n-1));
   matches = largo+1;
   locate=0;
   occ = (ULONG *) malloc(matches*sizeof(ULONG));
   l=random;
   r=min(random+largo,n-3);
   occ = csa_batchlookup2(SA,l,r);
   free(occ);
   te = stopclock3();
//   printf("Largo=%lu|e_t=%.4fs(%ldms)\n",largo, (te*1.0)/(HZ*1.0), te);fflush(stdout);
 }
 return lll;
}