static void showprjinfo(FILE *outprj, GtReadmode readmode, const GtEncseq *encseq, GtUword numberofallsortedsuffixes, unsigned int prefixlength, GtUword numoflargelcpvalues, double averagelcp, GtUword maxbranchdepth, const Definedunsignedlong *longest) { GtUword totallength; GtUword numofsequences; totallength = gt_encseq_total_length(encseq); fprintf(outprj,"totallength="GT_WU"\n",totallength); PRJSPECIALOUT(specialcharacters); PRJSPECIALOUT(specialranges); PRJSPECIALOUT(realspecialranges); PRJSPECIALOUT(lengthofspecialprefix); PRJSPECIALOUT(lengthofspecialsuffix); PRJSPECIALOUT(wildcards); PRJSPECIALOUT(wildcardranges); PRJSPECIALOUT(realwildcardranges); PRJSPECIALOUT(lengthofwildcardprefix); PRJSPECIALOUT(lengthofwildcardsuffix); numofsequences = gt_encseq_num_of_sequences(encseq); fprintf(outprj,"numofsequences="GT_WU"\n",numofsequences); fprintf(outprj,"numofdbsequences="GT_WU"\n",numofsequences); fprintf(outprj,"numofquerysequences=0\n"); fprintf(outprj,"numberofallsortedsuffixes="GT_WU"\n", numberofallsortedsuffixes); if (longest->defined) { fprintf(outprj,"longest="GT_WU"\n",longest->valueunsignedlong); } fprintf(outprj,"prefixlength=%u\n",prefixlength); fprintf(outprj,"largelcpvalues="GT_WU"\n",numoflargelcpvalues); fprintf(outprj,"averagelcp=%.2f\n",averagelcp); fprintf(outprj,"maxbranchdepth="GT_WU"\n",maxbranchdepth); fprintf(outprj,"integersize=%u\n", (unsigned int) (sizeof (GtUword) * CHAR_BIT)); fprintf(outprj,"littleendian=%c\n",gt_is_little_endian() ? '1' : '0'); fprintf(outprj,"readmode=%u\n",(unsigned int) readmode); fprintf(outprj,"mirrored=%c\n", gt_encseq_is_mirrored(encseq) ? '1' : '0'); }
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 scanprjfileuintkeysviafileptr(Suffixarray *suffixarray, const GtStr *indexname, Verboseinfo *verboseinfo, FILE *fpin, GtError *err) { uint32_t integersize, littleendian, readmodeint; unsigned int linenum; unsigned long currentlinelength; DefinedSeqpos maxbranchdepth; size_t dbfilelen = strlen(DBFILEKEY); bool haserr = false; GtArray *riktab; GtStr *currentline; /* the following five variables are local as the parsed values are not required: they are determined by reading the encodedsequence */ Seqpos totallength; Specialcharinfo specialcharinfo; unsigned long numofsequences, numofdbsequences, numofquerysequences; gt_error_check(err); riktab = gt_array_new(sizeofReadintkeys()); SETREADINTKEYS("totallength",&totallength,NULL); SETREADINTKEYS("specialcharacters", &specialcharinfo.specialcharacters,NULL); SETREADINTKEYS("specialranges", &specialcharinfo.specialranges,NULL); SETREADINTKEYS("realspecialranges", &specialcharinfo.realspecialranges,NULL); SETREADINTKEYS("lengthofspecialprefix", &specialcharinfo.lengthofspecialprefix,NULL); SETREADINTKEYS("lengthofspecialsuffix", &specialcharinfo.lengthofspecialsuffix,NULL); SETREADINTKEYS("numofsequences",&numofsequences,NULL); SETREADINTKEYS("numofdbsequences",&numofdbsequences,NULL); setreadintkeys(riktab,"numofquerysequences",&numofquerysequences,0,NULL); SETREADINTKEYS("longest",&suffixarray->longest.valueseqpos, &suffixarray->longest.defined); SETREADINTKEYS("prefixlength",&suffixarray->prefixlength,NULL); SETREADINTKEYS("largelcpvalues", &suffixarray->numoflargelcpvalues.valueseqpos, &suffixarray->numoflargelcpvalues.defined); SETREADINTKEYS("maxbranchdepth",&maxbranchdepth.valueseqpos, &maxbranchdepth.defined); SETREADINTKEYS("integersize",&integersize,NULL); SETREADINTKEYS("littleendian",&littleendian,NULL); SETREADINTKEYS("readmode",&readmodeint,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 (analyzeuintline(indexname, PROJECTFILESUFFIX, linenum, gt_str_get(currentline), currentlinelength, riktab, err) != 0) { haserr = true; break; } } gt_str_reset(currentline); } gt_str_delete(currentline); if (!haserr && allkeysdefined(indexname,PROJECTFILESUFFIX,riktab, verboseinfo,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", gt_str_get(indexname),PROJECTFILESUFFIX); haserr = true; } if (!haserr && integersize != (uint32_t) (sizeof (Seqpos) * 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 (Seqpos) * 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 build 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 build 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 = (Readmode) readmodeint; } gt_array_delete(riktab); return haserr ? -1 : 0; }