/*/////////////////////// //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; }
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; }