static int scanprjfileuintkeysviafileptr(Suffixarray *suffixarray, const char *indexname, GtLogger *logger, FILE *fpin, GtError *err) { uint32_t integersize, littleendian, readmodeint, mirrored; unsigned int linenum; GtUword currentlinelength; size_t dbfilelen = strlen(DBFILEKEY); bool haserr = false; GtScannedprjkeytable *scannedprjkeytable; GtStr *currentline; /* the following five variables are local as the parsed values are not required: they are determined by reading the encseq */ GtSpecialcharinfo specialcharinfo; GtUword totallength, numofsequences, numofdbsequences, numofquerysequences; gt_error_check(err); scannedprjkeytable = gt_scannedprjkeytable_new(); GT_SCANNEDPRJKEY_ADD("totallength",&totallength,NULL); GT_SCANNEDPRJKEY_ADD("specialcharacters", &specialcharinfo.specialcharacters,NULL); GT_SCANNEDPRJKEY_ADD("specialranges", &specialcharinfo.specialranges,NULL); GT_SCANNEDPRJKEY_ADD("realspecialranges", &specialcharinfo.realspecialranges,NULL); GT_SCANNEDPRJKEY_ADD("lengthofspecialprefix", &specialcharinfo.lengthofspecialprefix,NULL); GT_SCANNEDPRJKEY_ADD("lengthofspecialsuffix", &specialcharinfo.lengthofspecialsuffix,NULL); GT_SCANNEDPRJKEY_ADD("wildcards", &specialcharinfo.wildcards,NULL); GT_SCANNEDPRJKEY_ADD("wildcardranges", &specialcharinfo.wildcardranges,NULL); GT_SCANNEDPRJKEY_ADD("realwildcardranges", &specialcharinfo.realwildcardranges,NULL); GT_SCANNEDPRJKEY_ADD("lengthofwildcardprefix", &specialcharinfo.lengthofwildcardprefix,NULL); GT_SCANNEDPRJKEY_ADD("lengthofwildcardsuffix", &specialcharinfo.lengthofwildcardsuffix,NULL); GT_SCANNEDPRJKEY_ADD("numofsequences",&numofsequences,NULL); GT_SCANNEDPRJKEY_ADD("numofdbsequences",&numofdbsequences,NULL); gt_scannedprjkey_add(scannedprjkeytable,"numofquerysequences", &numofquerysequences,0,false,NULL); GT_SCANNEDPRJKEY_ADD("numberofallsortedsuffixes", &suffixarray->numberofallsortedsuffixes,NULL); GT_SCANNEDPRJKEY_ADD("longest",&suffixarray->longest.valueunsignedlong, &suffixarray->longest.defined); GT_SCANNEDPRJKEY_ADD("prefixlength",&suffixarray->prefixlength,NULL); GT_SCANNEDPRJKEY_ADD("largelcpvalues", &suffixarray->numoflargelcpvalues.valueunsignedlong, &suffixarray->numoflargelcpvalues.defined); gt_scannedprjkey_add(scannedprjkeytable,"averagelcp", &suffixarray->averagelcp.valuedouble, sizeof (suffixarray->averagelcp.valuedouble), true, &suffixarray->averagelcp.defined); GT_SCANNEDPRJKEY_ADD("maxbranchdepth", &suffixarray->maxbranchdepth.valueunsignedlong, &suffixarray->maxbranchdepth.defined); GT_SCANNEDPRJKEY_ADD("integersize",&integersize,NULL); GT_SCANNEDPRJKEY_ADD("littleendian",&littleendian,NULL); GT_SCANNEDPRJKEY_ADD("readmode",&readmodeint,NULL); GT_SCANNEDPRJKEY_ADD("mirrored",&mirrored,NULL); currentline = gt_str_new(); for (linenum = 0; gt_str_read_next_line(currentline, fpin) != EOF; linenum++) { currentlinelength = gt_str_length(currentline); if (dbfilelen <= (size_t) currentlinelength && memcmp(DBFILEKEY,gt_str_get(currentline),dbfilelen) == 0) { /* Nothing */ } else { if (gt_scannedprjkey_analyze(indexname, GT_PROJECTFILESUFFIX, linenum, gt_str_get(currentline), currentlinelength, scannedprjkeytable, err) != 0) { haserr = true; break; } } gt_str_reset(currentline); } gt_str_delete(currentline); if (!haserr && gt_scannedprjkey_allkeysdefined(indexname,GT_PROJECTFILESUFFIX, scannedprjkeytable, logger,err) != 0) { haserr = true; } if (!haserr && integersize != (uint32_t) 32 && integersize != (uint32_t) 64) { gt_error_set(err,"%s%s contains illegal line defining the integer size", indexname,GT_PROJECTFILESUFFIX); haserr = true; } if (!haserr && integersize != (uint32_t) (sizeof (GtUword) * CHAR_BIT)) { gt_error_set(err,"index was generated for %u-bit integers while " "this program uses %u-bit integers", (unsigned int) integersize, (unsigned int) (sizeof (GtUword) * CHAR_BIT)); haserr = true; } if (!haserr) { if (gt_is_little_endian()) { if (littleendian != (uint32_t) 1) { gt_error_set(err,"computer has little endian byte order, while index " "was built on computer with big endian byte order"); haserr = true; } } else { if (littleendian == (uint32_t) 1) { gt_error_set(err,"computer has big endian byte order, while index " "was built on computer with little endian byte " "order"); haserr = true; } } } if (!haserr) { if (readmodeint > (uint32_t) 3) { gt_error_set(err,"illegal readmode %u",(unsigned int) readmodeint); haserr = true; } suffixarray->readmode = (GtReadmode) readmodeint; } if (!haserr) { if (mirrored > (uint32_t) 1) { gt_error_set(err,"illegal mirroring flag: only 0(=no mirroring) and " "1 (=mirroring) is supported, but read %u", (unsigned int) mirrored); haserr = true; } suffixarray->mirroredencseq = (mirrored == (uint32_t) 1); } gt_scannedprjkeytable_delete(scannedprjkeytable); return haserr ? -1 : 0; }
static int scanfmafileviafileptr(Fmindex *fmindex, GtSpecialcharinfo *specialcharinfo, bool *storeindexpos, const char *indexname, FILE *fpin, GtLogger *logger, GtError *err) { bool haserr = false; GtScannedprjkeytable *scannedprjkeytable; unsigned int intstoreindexpos; gt_error_check(err); scannedprjkeytable = gt_scannedprjkeytable_new(); GT_SCANNEDPRJKEY_ADD("bwtlength",&fmindex->bwtlength,NULL); GT_SCANNEDPRJKEY_ADD("longest",&fmindex->longestsuffixpos,NULL); GT_SCANNEDPRJKEY_ADD("storeindexpos",&intstoreindexpos,NULL); GT_SCANNEDPRJKEY_ADD("log2blocksize",&fmindex->log2bsize,NULL); GT_SCANNEDPRJKEY_ADD("log2markdist",&fmindex->log2markdist,NULL); GT_SCANNEDPRJKEY_ADD("specialcharacters", &specialcharinfo->specialcharacters,NULL); GT_SCANNEDPRJKEY_ADD("specialranges",&specialcharinfo->specialranges,NULL); GT_SCANNEDPRJKEY_ADD("realspecialranges",&specialcharinfo->realspecialranges, NULL); GT_SCANNEDPRJKEY_ADD("lengthofspecialprefix", &specialcharinfo->lengthofspecialprefix,NULL); GT_SCANNEDPRJKEY_ADD("lengthofspecialsuffix", &specialcharinfo->lengthofspecialsuffix,NULL); GT_SCANNEDPRJKEY_ADD("wildcards",&specialcharinfo->wildcards,NULL); GT_SCANNEDPRJKEY_ADD("wildcardranges",&specialcharinfo->wildcardranges,NULL); GT_SCANNEDPRJKEY_ADD("realwildcardranges", &specialcharinfo->realwildcardranges,NULL); GT_SCANNEDPRJKEY_ADD("lengthofwildcardprefix", &specialcharinfo->lengthofwildcardprefix,NULL); GT_SCANNEDPRJKEY_ADD("lengthofwildcardsuffix", &specialcharinfo->lengthofwildcardsuffix,NULL); GT_SCANNEDPRJKEY_ADD("suffixlength",&fmindex->suffixlength,NULL); if (!haserr) { GtStr *currentline; unsigned int linenum; currentline = gt_str_new(); for (linenum = 0; gt_str_read_next_line(currentline, fpin) != EOF; linenum++) { if (gt_scannedprjkey_analyze(indexname, FMASCIIFILESUFFIX, linenum, gt_str_get(currentline), gt_str_length(currentline), scannedprjkeytable, err) != 0) { haserr = true; break; } gt_str_reset(currentline); } gt_str_delete(currentline); } if (!haserr && gt_scannedprjkey_allkeysdefined(indexname,FMASCIIFILESUFFIX, scannedprjkeytable, logger,err) != 0) { haserr = true; } if (!haserr) { if (intstoreindexpos == 1U) { *storeindexpos = true; } else { if (intstoreindexpos == 0) { *storeindexpos = false; } else { gt_error_set(err,"illegal value in line matching \"storeindexpos=\""); haserr = true; } } } gt_scannedprjkeytable_delete(scannedprjkeytable); return haserr ? -1 : 0; }