Exemple #1
0
	CSA *csa_load(ifstream & fp) {
		CSA *SA;
		SA = (CSA *) malloc(sizeof(CSA));
		csa_init(SA);
		initranktables();
		mkdecodetable();
		SA->m = loadValue<int>(fp);
		SA->two = loadValue<int>(fp);
		SA->two2 = loadValue<int>(fp);
		SA->l = loadValue<int>(fp);
		SA->n = loadValue<int>(fp);
		for(int i=0; i<(SIGMA+2); i++)
			SA->K[i] = loadValue<int>(fp);
		for(int i=0; i<(SIGMA+1); i++)
			SA->C[i] = loadValue<int>(fp);
		for(int i=0; i<(SIGMA+1); i++)
			SA->C2[i] = loadValue<int>(fp);
		#ifdef USE_MMAP
		SA->p_size = loadValue<int>(fp);
		SA->B = loadValue<unsigned short>(fp, SA->p_size);
		SA->i_size = loadValue<int>(fp);
		SA->r_size = loadValue<int>(fp);
		SA->R = loadValue<int>(fp, SA->r_size);
		SA->sa_size = loadValue<int>(fp);
		SA->SA = loadValue<int>(fp, SA->sa_size);
		SA->isa_size = loadValue<int>(fp);
		SA->ISA = loadValue<int>(fp, SA->isa_size);
		SA->mapp = NULL;
		SA->mapi = NULL;
		#endif
		return SA;
	}
int load_index(char *filename, void **index){
   char fname1[128],fname2[128];
   CSA *SA;
   SA = (CSA *) malloc(sizeof(CSA));
   initranktables();
   mkdecodetable();
   sprintf(fname1,"%s.psi",filename);
   sprintf(fname2,"%s.idx",filename);
   csa_read(SA,fname1,fname2);
   (*index) = SA;
   return 0;
}
Exemple #3
0
i64 psi1_read(CSA *csa, char *fname)
{
  FILE *f1;
  i64 psize1,psize2;
  i64 n;
  int k,l,id,id2;
  char *fpsi, *fpsd, *fname2;
  psi1 *ps;
  uchar *p,*q;
  
  csa->psi_struc = ps = mymalloc(sizeof(psi1));

  k = strlen(fname);
  fname2 = mymalloc(k-4+1);
  strncpy(fname2,fname,k-4);
  fname2[k-4] = 0;
  k -= 5;

  initranktables();
  mkdecodetable();

  fpsi = mymalloc(k+5+1);
//  fpsd = mymalloc(k+5);

//  sprintf(fpsd,"%s.psd",fname2);
  fpsd = fname;
//  printf("psi_read: read %s\n",fpsd);

  ps->mappsd = mymmap(fpsd);
  if (ps->mappsd->addr==NULL) {
    perror("psi1_read: mmap2\n");
    exit(1);
  }
  p = q = (uchar *)ps->mappsd->addr;
  psize1 = ps->mappsd->len;

  id = getuint(p,0,1);  p += 1;
  if (id != ID_PSI) {
    printf("read_psi: id = %d is not supported.\n",id);
    exit(1);
  }
  ps->k = k = getuint(p,0,1);  p += 1;
  ps->n = n = getuint(p,0,k);  p += k;
  ps->L = l = getuint(p,0,k);  p += k;

  id = getuint(p,0,1);  p += 1;
//  printf("read_psi: psi_id = %d L = %d\n",id,l);
  csa->id = ps->id = id;
  id2 = id & 0x3f;
  switch (id2) {
    case ID_DIFF_GAMMA:
      printf("#psi format = GAMMA L=%d C=%d\n",l,(id>>7));
      sprintf(fpsi,"%s.psi",fname2);
      break;
    case ID_DIFF_GAMMA_RL:
      printf("#psi format = GAMMA_RL L=%d C=%d\n",l,(id>>7));
      sprintf(fpsi,"%s.pri",fname2);
      break;
    case ID_DIFF_GAMMA_SPARSE:
      printf("#psi format = GAMMA_SPARSE L=%d C=%d\n",l,(id>>7));
      sprintf(fpsi,"%s.psi",fname2);
      break;
    case ID_DIFF_GAMMA_RL_SPARSE:
      printf("#psi format = GAMMA_RL_SPARSE L=%d C=%d\n",l,(id>>7));
      sprintf(fpsi,"%s.pri",fname2);
      break;
    case ID_DIFF_GAMMA_RR:
      printf("#psi format = GAMMA_RR L=%d C=%d\n",l,(id>>7));
      sprintf(fpsi,"%s.pxi",fname2);
      break;
    default:
      printf("read_csa: ID %d is not supported.\n",id);
      break;
  }

  if (id & ID_COMPPTR) {
    printf("COMPPTR\n");
    ps->sx = mymalloc(sizeof(SPARSEARRAY));
    ps->sb = mymalloc(sizeof(SPARSEARRAY));
    SPARSEARRAY_read(ps->sx, &p);
    SPARSEARRAY_read(ps->sb, &p);
  } else {
    ps->R = p;
  }
//  printf("psize = %ld\n",psize);

////   read psi
//  printf("psi_read: map %s\n",fpsi);
  ps->mappsi = mymmap(fpsi);
  if (ps->mappsi->addr==NULL) {
    perror("psi1_read: mmap1\n");
    exit(1);
  }
  ps->B = (unsigned short *)ps->mappsi->addr;
  psize2 = ps->mappsi->len;
//  printf("psize2 = %ld\n",psize2);

//  printf("psi1_read: psize1 = %ld psize2 = %ld\n",psize1,psize2);
  ps->psize = psize1 + psize2;

  free(fpsi);
//  free(fpsd);
  free(fname2);

// user-specific functions
  csa->psi = psi1_psi;
  if (id2 == ID_DIFF_GAMMA_RR) {
    csa->psi = psi12_psi;
    csa->psi_pred = csa_psi_pred_naive;
    csa->psi_succ = csa_psi_succ_naive;
  } else {
    if ((id & ID_COMPPTR) || 0) {
      csa->psi_pred = csa_psi_pred_naive;
      csa->psi_succ = csa_psi_succ_naive;
    } else {
      csa->psi_succ = psi1_succ_tmp;
      csa->psi_pred = psi1_pred_tmp;
//    csa->psi_succ = csa_psi_succ_naive;
//    csa->psi_pred = csa_psi_pred_naive;
    }
  }

// default functions
  csa->LF = csa_LF_by_psi;
  csa->lookup = csa_lookup;
  csa->inverse = csa_inverse;
  csa->text = csa_text;
  csa->substring = csa_substring;
  csa->T = csa_T;
  csa->head = csa_head_rank;
  csa->search = csa_search;
  csa->searchsub = csa_searchsub;


  return psize1 + psize2;
}