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