,
105 "***SEQUENCING IN PROGRESS***",
106 "WORKING DRAFT SEQUENCE",
107 "LOW-PASS SEQUENCE SAMPLING",
108 "*** IN PROGRESS ***",
123 if(! line || *line ==
'\0')
126 for(p = line; *p !=
'\0'; p++) {
129 if((*p ==
','&& p[1] ==
',') || (*p ==
';'&& p[1] ==
';'))
131 if((p[1] ==
','|| p[1] ==
';') && p[0] ==
' ') {
137 for(p = line, q = line; *p !=
'\0';) {
139 if(*p ==
' '|| *p ==
'\n') {
140 for(got_nl =
false; *p ==
' '|| *p ==
'\n'; p++) {
152 for(q--; q > line && (*q ==
' '|| *q ==
';'|| *q ==
'\n');)
154 if(*q !=
' '&& *q !=
';'&& *q !=
'\n')
159 for(p = line; *p ==
' '|| *p ==
';'|| *p ==
'\n';)
172 for(
i= 0;
i< line.size(); ++
i) {
173 char& c = line[
i];
176 if(
i+ 1 < line.size()) {
177 char& c1 = line[
i+ 1];
178 if((c ==
','&& c1 ==
',') || (c ==
';'&& c1 ==
';'))
180 if((c1 ==
','|| c1 ==
';') && c ==
' ') {
188 for(
i= 0;
i< line.size();) {
189 charc = line[
i++];
190 if(c ==
' '|| c ==
'\n') {
191 for(;
i< line.size() && (line[
i] ==
' '|| line[
i] ==
'\n'); ++
i) {
192 if(line[
i] ==
'\n')
200 while(! line.empty()) {
201 charc = line.back();
202 if(c ==
' '|| c ==
';'|| c ==
'\n')
209 for(
charc : line) {
210 if(c ==
' '|| c ==
';'|| c ==
'\n')
232 autotail = dbl.before_begin();
233 while(
next(tail) != dbl.end())
257vector<string> lines;
260vector<string> sectionLines;
264 for(
const string& line : lines) {
269 if(nextKw != currentKw || line.starts_with(
"REFERENCE")) {
270 auto* secPtr =
new Section(currentKw, sectionLines);
274sectionLines.clear();
275sectionLines.push_back(line);
278sectionLines.push_back(line);
296 for(; ptr < eptr && *ptr !=
'\n'; ptr++)
304string_view sv(ptr, eptr);
310 if(sv.starts_with(
"REFERENCE"sv))
312}
while(nextkw == curkw);
343eptr = bptr + dbp.
mBuf.
len;
345 const strings = to_string(bases);
346 const string str=
"(bases 1 to "+ s +
")";
347 const stringstr1 =
"(bases 1 to "+ s +
";";
348 const stringstr2 =
"(residues 1 to "+ s +
"aa)";
350 stringref(bptr, bptr + dbp.
mBuf.
len);
352 while(bptr < eptr && *bptr !=
'\n'&& *bptr !=
'(')
354 while(*bptr ==
' ')
385eptr = bptr + dbp.
mBuf.
len;
386ptr =
SrchTheChar(string_view(bptr, eptr),
'\n');
392 while(bptr < eptr) {
398bptr =
SrchTheChar(string_view(bptr, eptr),
'\n');
402 if(! string_view(bptr, eptr - bptr).starts_with(
"XX"sv))
406}
while((*ptr ==
' '&& ptr < eptr) || skip);
418 if(! dbp.
mBuf.
ptr|| (mtag.empty() && ptag.empty()))
426 for(p = dbp.
mBuf.
ptr;; p++) {
456 auto& src_blk = *dbp;
462 for(
auto& ref_blk : chain) {
479 for(
auto& feat_blk : chain) {
493 autosecType = secPtr->mType;
512secPtr->xBuildFeatureBlocks();
546 boolseen_oc =
false;
554 for(; ptr < eptr && *ptr !=
'\n'; ptr++)
563string_view sv(ptr, eptr);
567 if(sv.starts_with(
"RN"sv))
569 if(sv.starts_with(
"ID"sv))
572 if(sv.starts_with(
"OC"sv))
575 if(seen_oc && sv.starts_with(
"OS"sv))
578}
while(nextkw == curkw);
606eptr = bptr + dbp.
mBuf.
len;
607ptr =
SrchTheChar(string_view(bptr, eptr),
'\n');
609 while(ptr && ptr + 1 < eptr) {
610 if(ptr[2] ==
'H') {
615eptr = bptr + dbp.
mBuf.
len;
619 if(bptr[1] ==
'T') {
626ptr =
SrchTheChar(string_view(bptr, eptr),
'\n');
644 while(bptr < eptr) {
645string_view sv(bptr, eptr - bptr);
646 if(sv.starts_with(subkw))
649 auto i= sv.find(
'\n');
650 if(
i!= string_view::npos)
677eptr = bptr + dbp.
mBuf.
len;
687 const string str=
" 1-"+ to_string(bases);
694 if(
SrchTheStr(string_view(bptr, eptr),
" 0-0")) {
702 for(sptr = bptr + 1; sptr < eptr && *sptr !=
'R';)
704 if(
SrchTheStr(string_view(bptr, sptr),
"sites"))
726 for(
auto& os_blk : chain) {
735 for(
auto& ref_blk: chain) {
751 autopredbp = chain.begin();
752 autocurdbp =
next(predbp);
753 while(curdbp != chain.end()) {
770curdbp = chain.erase_after(predbp);
790eptr = bptr + dbp.
mBuf.
len;
816 if(holds_alternative<monostate>(dbp.
mData))
819 if(subblocks.empty())
827 autoldbp = subblocks.cend();
828 for(
autondbp = subblocks.cbegin(); ndbp != subblocks.cend(); ++ndbp) {
829 size_t l= ndbp->mBuf.ptr -
offset;
836 if(ldbp != subblocks.cbegin() && ldbp != subblocks.cend()) {
841 for(
autocurdbp = subblocks.begin();
next(curdbp) != subblocks.end(); ++curdbp) {
842 offset= curdbp->mBuf.ptr;
843ldbp = subblocks.end();
844 for(
autondbp = subblocks.begin(); ndbp != subblocks.end(); ++ndbp) {
845 size_t l= ndbp->mBuf.ptr -
offset;
846 if(
l> 0 && l < curdbp->mBuf.len) {
847curdbp->mBuf.len =
l;
851 if(!
done&& ldbp !=
next(curdbp) && ldbp != subblocks.end()) {
864 if(! acc || *acc ==
'\0')
872pat_id->SetCit().SetCountry(
string(p + 1, q));
875pat_id->SetCit().SetId().SetNumber(
string(q + 1, p));
878pat_id->SetCit().SetDoc_type(
string(p + 1, q));
880pat_id->SetSeqid(
fta_atoi(q + 1));
938 if(! acc || *acc ==
'\0')
947text_id->SetAccession(acc);
949 if(accver && vernum > 0)
950text_id->SetVersion(vernum);
967 if(! locus || *locus ==
'\0')
971text_id->SetName(locus);
999 autosdbp = sdb.cbegin();
1000 while(sdbp != sdb.cend() && sdbp->mType != subtype)
1002 if(sdbp == sdb.cend())
1005*
len= sdbp->mBuf.len;
1006 return(sdbp->mBuf.ptr);
1018bioseq.
SetId().push_back(seqId);
1042 id->SetPatent(*psip);
1043res->
SetId().push_back(
id);
1054res->
SetId().push_back(std::move(pId));
1057res->
SetId().push_back(std::move(pId));
1061}
else if((! locus || *locus ==
'\0') && (! acc || *acc ==
'\0')) {
1066 if(ibp->
embl_new_ID==
false&& locus && *locus !=
'\0'&&
1068textId->SetName(locus);
1070 if(acc && *acc !=
'\0')
1071textId->SetAccession(acc);
1074textId->SetVersion(ibp->
vernum);
1077 if(
SetTextId(seqtype, *seqId, *textId))
1078res->
SetId().push_back(seqId);
1114 boolwithin =
false;
1116 char* eptr = bptr +
len;
1119 for(
str= com; bptr < eptr; bptr = p + 1) {
1123 if((is_htg && bptr[col_data] ==
'*') ||
1124string_view(bptr, eptr - bptr).starts_with(
"XX"sv))
1128 if(
SrchTheStr(string_view(bptr, p),
"-START##"))
1140 if(*(
str- 1) !=
'~')
1146 if(p - bptr < col_data)
1150 size_t size= p - bptr;
1152 if(*bptr ==
' '&& *(
str- 1) !=
'~')
1156 if(is_pat &&
size> 4 &&
1157q[0] >=
'A'&& q[0] <=
'Z'&& q[1] >=
'A'&& q[1] <=
'Z'&&
1160 else if(
size< 50 || within)
1166 if(
SrchTheStr(string_view(bptr, p),
"-END##"))
1175 for(p += 2, eptr = p; *eptr ==
' ';)
1180 for(p = com; *p ==
' ';)
1184 for(p = com; *p !=
'\0';)
1188 if(*p ==
' '|| *p ==
'\t'|| *p ==
';'|| *p ==
','||
1189*p ==
'.'|| *p ==
'~') {
1216 autoit1 = secondaries.begin();
1217 if(it1 == secondaries.end() || it1->empty())
1219 autoit2 =
next(it1);
1220 if(it2 == secondaries.end() || *it2 !=
"-"||
fta_if_wgs_acc(*it1) != 0)
1223 autotbp = secondaries.insert_after(it1, *it1);
1246 boolunusual_wgs_msg;
1257is_cp = (acc[0] ==
'C'&& acc[1] ==
'P');
1260 if(pri_acc == 1 || pri_acc == 4) {
1262 for(p = acc; (*p >=
'A'&& *p <=
'Z') || *p ==
'_';)
1272unusual_wgs =
false;
1273 for(
autotbp = ibp->
secaccs.begin(); tbp != ibp->
secaccs.end(); ++tbp) {
1274 if(*tbp ==
"-"s) {
1276 if(tbp == ibp->
secaccs.end())
1278 if(! accessions.empty()) {
1279accessions.back() +=
'-';
1280accessions.back() += *tbp;
1286 const string&
a= *tbp;
1289unusual_wgs_msg =
true;
1290 if(sec_acc == 0 || sec_acc == 3 ||
1291sec_acc == 4 || sec_acc == 6 ||
1292sec_acc == 10 || sec_acc == 12)
1301unusual_wgs_msg =
false;
1302 if(ibp->
wgssec.empty())
1308 if(sec_acc < 0 || sec_acc == 2) {
1309 if(pri_acc == 1 || pri_acc == 5 || pri_acc == 11) {
1310 if(! allow_uwsec) {
1311 FtaErrPost(
SEV_REJECT,
ERR_ACCESSION_WGSWithNonWGS_Sec,
"This WGS/TSA/TLS record has non-WGS/TSA/TLS secondary accession \"{}\". WGS/TSA/TLS records are not currently allowed to replace finished sequence records, scaffolds, etc. without human review and confirmation.",
a);
1318accessions.push_back(
a);
1322 if(sec_acc == 3 || sec_acc == 6)
1325(pri_acc == 1 || pri_acc == 5 || pri_acc == 11) &&
1336 if(pri_acc == 1 || pri_acc == 5 || pri_acc == 11)
1339 i=
a.starts_with(
"NZ_"sv) ? 7 : 4;
1340 if(!
a.starts_with(string_view(ibp->
acnum,
i))) {
1341 if(! allow_uwsec) {
1342 FtaErrPost(
SEV_REJECT,
ERR_ACCESSION_UnusualWGS_Secondary,
"This record has one or more WGS/TSA/TLS secondary accession numbers which imply that a WGS/TSA/TLS project is being replaced (either by another project or by finished sequence). This is not allowed without human review and confirmation.");
1345 FtaErrPost(
SEV_WARNING,
ERR_ACCESSION_UnusualWGS_Secondary,
"This record has one or more WGS/TSA/TLS secondary accession numbers which imply that a WGS/TSA project is being replaced (either by another project or by finished sequence). This is being allowed via the use of a special parser flag.");
1348}
else if(pri_acc == 2)
1350 if(sec_acc == 1 || sec_acc == 5 || sec_acc == 11)
1356}
else if(unusual_wgs_msg) {
1357 if(! allow_uwsec) {
1358 if(! unusual_wgs) {
1359 if(sec_acc == 1 || sec_acc == 5 || sec_acc == 11)
1360 text=
"WGS/TSA/TLS contig secondaries are present, implying that a scaffold is replacing a contig";
1362 text=
"This record has one or more WGS/TSA/TLS secondary accession numbers which imply that a WGS/TSA/TLS project is being replaced (either by another project or by finished sequence)";
1365unusual_wgs =
true;
1368 if(! unusual_wgs) {
1369 if(sec_acc == 1 || sec_acc == 5 || sec_acc == 11)
1370 text=
"WGS/TSA/TLS contig secondaries are present, implying that a scaffold is replacing a contig";
1372 text=
"This record has one or more WGS/TSA/TLS secondary accession numbers which imply that a WGS/TSA/TLS project is being replaced (either by another project or by finished sequence)";
1375unusual_wgs =
true;
1379 if(pri_acc == 1 || pri_acc == 5 || pri_acc == 11) {
1380 if(
StringEquN(acc,
a.c_str(),
i) &&
a[
i] >=
'0'&&
a[
i] <=
'9') {
1381 if(sec_acc == 1 || sec_acc == 5 || pri_acc == 11)
1382accessions.push_back(
a);
1383}
else if(allow_uwsec) {
1384accessions.push_back(
a);
1386}
else if(pri_acc == 2) {
1387 if(sec_acc == 0 || sec_acc == 4)
1388accessions.push_back(
a);
1390accessions.push_back(
a);
1402 for(
string&
key: keywords) {
1409 string buf(
"TPA:");
1411 for(p =
key.c_str() + 4; *p ==
' '|| *p ==
'\t';)
1416 for(string::iterator p =
buf.begin() + 4; p !=
buf.end(); ++p) {
1417 if(*p >=
'A'&& *p <=
'Z')
1429 string& keywordData)
1432 const stringproblematic(
"WGS Third Party Data");
1433 const stringdesired(
"WGS; Third Party Data");
1435 if(keywordData.empty()) {
1439 if(wgsStart == string::npos) {
1442 autoafterProblematic = keywordData[wgsStart + problematic.size()];
1443 if(afterProblematic !=
';'&& afterProblematic !=
'.') {
1447 stringfixedKeywords;
1449 autosemiBefore = keywordData.rfind(
';', wgsStart - 1);
1450 if(semiBefore == string::npos) {
1453 for(
auto i= semiBefore + 1;
i< wgsStart; ++
i) {
1454 if(keywordData[
i] !=
' ') {
1458fixedKeywords = keywordData.substr(0, wgsStart - 1);
1460fixedKeywords += desired;
1461fixedKeywords += keywordData.substr(wgsStart + problematic.size());
1462keywordData = fixedKeywords;
1478 if(
tmp.empty()) {
1488 autoit = keywords.begin();
1489 auto last= --keywords.end();
1490 while(it != keywords.end()) {
1491 auto& keyword = *it;
1497 if(keyword.empty()) {
1498keywords.erase(it++);
1551 while(*ptr !=
'\n'&& *ptr !=
'\0'&& blank < 6 &&
count< 100) {
1552 if(numns && (*ptr ==
'n'|| *ptr ==
'N'))
1563}
else if(residue == 1 && (warn ||
isalpha(*ptr) != 0)) {
1565*bu++ = replacechar;
1617 for(
char& c : *
tmp)
1618 if(c >=
'A'&& c <=
'Z')
1629endptr = seqptr +
len;
1639 while(*seqptr ==
' '|| *seqptr ==
'\n'|| *seqptr ==
'\t')
1642 while(*seqptr !=
'\n')
1644 while(
isalpha(*seqptr) == 0)
1648std::vector<char>
buf;
1650 for(numns = 0; seqptr < endptr;) {
1659 while(
isalpha(*seqptr) == 0 && seqptr < endptr)
1677 "This sequence for this patent record falls below the minimum length requirement of 4 amino acids.");
1684 if(ibp->
is_pat==
false)
1689 if(ibp->
is_pat==
false)
1696 if(seqlen ==
static_cast<Uint4>(numns)) {
1718unique_ptr<unsigned char[]> dnaconv(
new unsigned char[255]());
1719 MemSet((
char*)dnaconv.get(), (
Uint1)1, (
size_t)255);
1727dnaconv[
static_cast<int>(
code[0])] =
code[0];
1738 staticunique_ptr<unsigned char[]> dnaconv;
1740 if(! dnaconv.get()) {
1742 if(! dnaconv.get()) {
1743dnaconv.reset(
new unsigned char[255]());
1744 MemSet((
char*)dnaconv.get(), (
Uint1)1, (
size_t)255);
1749dnaconv[
static_cast<int>(
code[0])] =
code[0];
1755 returndnaconv.get();
1770unique_ptr<unsigned char[]> protconv(
new unsigned char[255]());
1773 MemSet((
char*)protconv.get(), (
Uint1)1, (
size_t)255);
1793 staticunique_ptr<unsigned char[]> protconv;
1794 if(! protconv.get()) {
1796 if(! protconv.get()) {
1797protconv.reset(
new unsigned char[255]());
1798 MemSet((
char*)protconv.get(), (
Uint1)1, (
size_t)255);
1808 returnprotconv.get();
1828 if(
id.NotEmpty()) {
1849 bool check_div(
boolpat_acc,
boolpat_ref,
boolest_kwd,
boolsts_kwd,
boolgss_kwd,
boolif_cds,
string& div,
CMolInfo::TTech* tech,
size_tbases,
Parser::ESource source,
bool& drop)
1854 if(pat_acc || pat_ref || div ==
"PAT") {
1855 if(pat_ref ==
false) {
1871 if(div !=
"PAT") {
1878}
else if(est_kwd) {
1880 if(div ==
"EST") {
1887}
else if(bases > 1000) {
1888 if(div ==
"EST") {
1901}
else if(div ==
"EST") {
1909}
else if(sts_kwd) {
1911 if(div ==
"STS") {
1918}
else if(bases > 1000) {
1919 if(div ==
"STS") {
1932}
else if(div ==
"STS") {
1937}
else if(gss_kwd) {
1939 if(div ==
"GSS") {
1946}
else if(bases > 2500) {
1947 if(div ==
"GSS") {
1960}
else if(div ==
"GSS") {
1965}
else if(div ==
"TSA") {
1970 return! div.empty();
1982 if(*pch ==
'd'|| *pch ==
'e') {
1985lID = strtol(pch + 1, &pchEnd, 10);
1987 if(! ((lID == 0 && pch + 1 == pchEnd) || (lID == LONG_MAX && errno == ERANGE))) {
1992 tag->SetStr(
string(pch, pchEnd - pch));
1996dbtag->
SetDb(pid ?
"PID":
"NID");
1998 id->SetGeneral(*dbtag);
2018bioseq.
SetId().push_back(sid);
2026 for(
auto& entry : seq_entries) {
2029 if(bioseq->IsSetId())
2031 for(
const auto&
id: bioseq->GetId())
2040 if(bioseq->IsSetDescr()) {
2045 for(
auto& descr : bioseq->SetDescr().Set()) {
2046 if(descr->IsGenbank() && ! gb_block)
2047gb_block = &descr->SetGenbank();
2048 else if(descr->IsMolinfo() && ! molinfo) {
2049molinfo = &descr->SetMolinfo();
2053 if(gb_block && molinfo)
2066 if(! gb_block->
IsSetDiv() && (!ispat ||
2071 else if(gb_block->
IsSetDiv() && ispat &&
2085 for(
const auto& descr : descrs) {
2086 if(descr->IsSource())
2087 return&(descr->GetSource());
2109 if(seq_entries.empty())
2132 for(q =
tmp; *q !=
'\0'; q++) {
2135 else if(*q ==
'\n'|| *q ==
'\t')
2138 for(q =
tmp, p =
tmp; *p !=
'\0'; p++) {
2139 if(*p ==
' '&& p[1] ==
' ')
2151! p && ! cancelled) {
2163 r=
new char[dbp->
mBuf.
len+ 1];
2168 for(p =
r, q =
r; *p !=
'\0'; p++)
2169 if(*p >=
'a'&& *p <=
'z')
2173 for(
count= 0, p =
r; *p !=
'\0'; p++) {
2176 else if(++
count> 10) {
2194 if(! entry || xil.empty())
2201 for(q =
tmp; *q !=
'\0'; q++)
2202 if(*q ==
'\n'|| *q ==
'\t')
2204 for(q =
tmp, p =
tmp; *p !=
'\0'; p++) {
2205 if(*p ==
' '&& p[1] ==
' ')
2217! p && ! cancelled) {
2230 for(
count= 0, p =
r; *p !=
'\0'; p++) {
2233 else if(++
count> 10) {
2246}
else if((! div || !
StringEqu(div,
"HTG")) &&
2256 if(entry.
IsSeq())
2268 size_tstart_pos = 0;
2269 for(; start_pos >
str.size() &&
str[start_pos] <=
' '; ++start_pos)
2272 if(start_pos ==
str.size()) {
2277 str=
str.substr(start_pos);
2278 size_tend_pos =
str.size() - 1;
2279 for(;; --end_pos) {
2280 if(
str[end_pos] ==
';'||
str[end_pos] <=
' ') {
2289 if(
str[end_pos] !=
';'|| end_pos == 0) {
2293 str=
str.substr(0, end_pos);
2298 size_tamp_pos = end_pos - 1;
2299 for(; amp_pos; --amp_pos) {
2300 if(
str[amp_pos] ==
' '||
str[amp_pos] ==
'&'||
str[amp_pos] ==
';')
2304 if(
str[amp_pos] ==
'&')
2307 str=
str.substr(0, end_pos);
2313 for(list<string>::iterator it = str_list.begin(); it != str_list.end();) {
2317it = str_list.erase(it);
2326 const Char* div =
nullptr;
2328 for(
const auto& descr : descrs) {
2329 if(! descr->IsEmbl())
2332 if(! descr->GetEmbl().IsSetDiv() || descr->GetEmbl().GetDiv() > 15)
2335div =
GetEmblDiv(descr->GetEmbl().GetDiv());
2339 for(TSeqdescList::iterator descr = descrs.begin(); descr != descrs.end();) {
2340 if(! (*descr)->IsGenbank()) {
2345 CGB_block& gb_block = (*descr)->SetGenbank();
2351}
else if(gb_block.
IsSetDiv() && gb_block.
GetDiv() !=
"PAT"&&
2352gb_block.
GetDiv() !=
"SYN") {
2401descr = descrs.erase(descr);
2413 for(
auto& entry : seq_entries) {
2415 if(bioseq->IsSetDescr())
2420 if(bio_set->IsSetDescr())
2432 for(
const auto& pub : pub_eq.
Get()) {
2434 if(pub->GetGen().IsSetSerial_number()) {
2435ret = pub->GetGen().GetSerial_number();
2471 if(
strcmp(str1, str2) < 0)
2483 for(
auto& entry : seq_entries) {
2485 if(bioseq->IsSetDescr())
2486bioseq->SetDescr().Set().sort(
descr_cmp);
2490 if(bio_set->IsSetDescr())
2491bio_set->SetDescr().Set().sort(
descr_cmp);
2502}
else if(pub1->
IsGen()) {
2517 for(
auto& annot : annots) {
2518 if(annot->IsFtable()) {
2519 for(
auto& feat : annot->SetData().SetFtable()) {
2520 if(feat->IsSetCit() && feat->GetCit().IsPub()) {
2523 TPubList& pubs = feat->SetCit().SetPub();
2524 for(TPubList::iterator pub = pubs.begin(); pub != pubs.end(); ++pub) {
2525TPubList::iterator next_pub = pub;
2526 for(++next_pub; next_pub != pubs.end(); ++next_pub) {
2527 if(
pub_cmp(*next_pub, *pub))
2528 swap(*next_pub, *pub);
2540 for(
auto& entry : seq_entries) {
2542 if(bioseq->IsSetAnnot())
2547 if(bio_set->IsSetAnnot())
2556 for(
const auto&
tag: dbtags) {
2557 if(
tag->IsSetDb() &&
tag->IsSetTag() &&
2558!
tag->GetTag().IsStr() &&
tag->GetTag().GetId() > 0 &&
2559 tag->GetDb() ==
"taxon")
2570 if(! org_ref || ! gbb.
IsSetDiv())
2580 for(
const auto& annot : annots) {
2581 if(! annot->IsFtable())
2585 for(
const auto& feat : feats) {
2586 if(! feat->IsSetData() || ! feat->GetData().IsBiosrc())
2591 const CBioSource& bio_src = feat->GetData().GetBiosrc();
2608 if(! entry || xil.empty())
2611 autoxip = xil.begin();
2612 for(; xip != xil.end(); ++xip)
2615 if(xip == xil.end())
2618 autotxip = xip->subtags.begin();
2619 for(; txip != xip->subtags.end(); ++txip) {
2620 if(txip->subtags.empty())
2622 autofxip = txip->subtags.begin();
2623 for(; fxip != txip->subtags.end(); ++fxip)
2627 if(fxip != txip->subtags.end())
2631 if(txip == xip->subtags.end())
2639 for(
auto& entry : seq_entries) {
2641 if(bioseq->IsSetInst() && bioseq->GetInst().IsSetStrand())
2644 if(bioseq->GetInst().IsSetMol()) {
2658 for(
const auto& entry : seq_entries) {
2660 if(bioseq->IsSetId()) {
2661 for(
const auto&
id: bioseq->GetId()) {
2662 if(id->IsSwissprot())
2687 for(TPubList::iterator pub = pubs.begin(); pub != pubs.end();) {
2688 if((*pub)->IsGen()) {
2689 if((*pub)->GetGen().IsSetSerial_number())
2690(*pub)->SetGen().ResetSerial_number();
2693pub = pubs.erase(pub);
2705 for(
auto& entry : seq_entries) {
2707 if(pubdesc->IsSetPub()) {
2709 if(pubdesc->GetPub().Get().empty())
2710pubdesc->ResetPub();
2715 if(feat->IsSetData()) {
2716 if(feat->GetData().IsPub()) {
2718 if(feat->GetData().GetPub().GetPub().Get().empty())
2719feat->SetData().SetPub().ResetPub();
2720}
else if(feat->GetData().IsImp()) {
2721 CImp_feat& imp = feat->SetData().SetImp();
2722 if(imp.
IsSetKey() && imp.
GetKey() ==
"Site-ref"&& feat->IsSetCit() && feat->GetCit().IsPub()) {
2724 if(feat->GetCit().GetPub().empty())
2725feat->SetCit().Reset();
2737 const string* seq_str =
nullptr;
2738 constvector<Char>* seq_vec =
nullptr;
2741 size_told_size = 0;
2747old_size = seq_str->size();
2753old_size = seq_vec->size();
2759old_size = seq_vec->size();
2765std::vector<Char> new_seq(old_size);
2766 size_tnew_size = 0;
2772 if(! new_seq.empty()) {
2773seq_data.
SetNcbieaa().
Set().assign(new_seq.begin(), new_seq.begin() + new_size);
2793 for(
auto&
delta: bioseq.
SetInst().SetExt().SetDelta().Set()) {
2794 if(
delta->IsLiteral() &&
delta->GetLiteral().IsSetSeq_data() && !
delta->GetLiteral().GetSeq_data().IsGap()) {
2804 for(
auto& entry : seq_entries) {
2806 if(bioseq->IsSetInst() && bioseq->GetInst().IsSetRepr()) {
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
void StripECO(string &str)
void xFixEMBLKeywords(string &keywordData)
vector< string > genbankKeywords
static bool SwissProtIDPresent(const TEntryList &seq_entries)
void GetGenBankSubBlock(const DataBlk &entry, size_t bases)
void StripSerialNumbers(TEntryList &seq_entries)
static void RemoveSerials(TPubList &pubs)
char * GetGenBankBlock(TDataBlkList &chain, char *ptr, Int2 *retkw, char *eptr)
vector< string > emblKeywords
CRef< CSeq_id > StrToSeqId(const char *pch, bool pid)
static void BuildFeatureBlock(DataBlk &dbp)
static const CBioSource * GetTopBiosource(const CSeq_entry &entry)
void AddNIDSeqId(CBioseq &bioseq, const DataBlk &entry, Int2 type, Int2 coldata, Parser::ESource source)
void fta_fix_orgref_div(const CBioseq::TAnnot &annots, COrg_ref *org_ref, CGB_block &gbb)
static void GetEmblRefType(size_t bases, Parser::ESource source, DataBlk &dbp)
void DefVsHTGKeywords(CMolInfo::TTech tech, const DataBlk &entry, Int2 what, Int2 ori, bool cancelled)
static void CheckDivCode(TEntryList &seq_entries, ParserPtr pp)
vector< string > swissProtKeywords
CRef< CPatent_seq_id > MakeUsptoPatSeqId(const char *acc)
unsigned char *const GetDNAConvTable()
void xGetGenBankSubBlocks(Entry &entry, size_t bases)
void fta_sort_seqfeat_cit(TEntryList &seq_entries)
void PackEntries(TEntryList &seq_entries)
void fta_set_strandedness(TEntryList &seq_entries)
static void fta_fix_tpa_keywords(TKeywordList &keywords)
void CheckHTGDivision(const char *div, CMolInfo::TTech tech)
unique_ptr< unsigned char[]> GetDNAConv(void)
unique_ptr< unsigned char[]> GetProteinConv(void)
static bool fta_if_pubs_sorted(const CPub_equiv &pub1, const CPub_equiv &pub2)
static bool SeqEntryCheckTaxonDiv(const CSeq_entry &entry)
bool fta_orgref_has_taxid(const COrg_ref::TDb &dbtags)
DEFINE_STATIC_MUTEX(s_DNAConvMutex)
bool XMLCheckCDS(const char *entry, const TXmlIndexList &xil)
char * GetDescrComment(char *offset, size_t len, Uint2 col_data, bool is_htg, bool is_pat)
void GetSequenceOfKeywords(const DataBlk &entry, int type, Uint2 col_data, TKeywordList &keywords)
static void CheckGBBlock(TSeqdescList &descrs, bool &got)
static void CleanVisString(string &str)
static void CleanVisStringList(list< string > &str_list)
static bool pub_cmp(const CRef< CPub > &pub1, const CRef< CPub > &pub2)
char * GetEmblBlock(TDataBlkList &chain, char *ptr, short *retkw, Parser::EFormat format, char *eptr)
void BuildSubBlock(DataBlk &dbp, Int2 subtype, string_view subkw)
void EntryCheckDivCode(TEntryList &seq_entries, ParserPtr pp)
void GetEmblSubBlock(size_t bases, Parser::ESource source, const DataBlk &entry)
const char * magic_phrases[]
void XMLDefVsHTGKeywords(CMolInfo::TTech tech, const char *entry, const TXmlIndexList &xil, bool cancelled)
static void PackSeqData(CSeq_data::E_Choice code, CSeq_data &seq_data)
static bool IsCitEmpty(const CCit_gen &cit)
static Uint1 ValidSeqType(const char *accession, Uint1 type)
static bool descr_cmp(const CRef< CSeqdesc > &desc1, const CRef< CSeqdesc > &desc2)
void GetSeqExt(ParserPtr pp, CSeq_loc &seq_loc)
static bool GetSubNodeType(string_view subkw, char *&bptr, char *eptr)
CRef< CSeq_id > MakeAccSeqId(const char *acc, Uint1 seqtype, bool accver, Int2 vernum)
bool GetSeqData(ParserPtr pp, const DataBlk &entry, CBioseq &bioseq, Int4 nodetype, unsigned char *seqconv, Uint1 seq_data_type)
static void InsertDatablkVal(TDataBlkList &dbl, Int2 type, char *offset, size_t len)
static void fta_check_mult_ids(const DataBlk &dbp, string_view mtag, string_view ptag)
static void GetGenBankRefType(DataBlk &dbp, size_t bases)
bool fta_EntryCheckGBBlock(TEntryList &seq_entries)
char * SrchNodeSubType(const DataBlk &entry, Int2 type, Int2 subtype, size_t *len)
void xGetGenBankBlocks(Entry &entry)
static void sort_feat_cit(CBioseq::TAnnot &annots)
static void SetEmptyId(CBioseq &bioseq)
static void fta_fix_secondaries(TokenBlkList &secondaries)
CRef< CSeq_id > MakeLocusSeqId(const char *locus, CSeq_id::E_Choice seqtype)
unsigned char *const GetProtConvTable()
void fta_sort_descr(TEntryList &seq_entries)
static void DeltaBioseqPack(CBioseq &bioseq)
static int GetSerialNumFromPubEquiv(const CPub_equiv &pub_eq)
void GetExtraAccession(IndexblkPtr ibp, bool allow_uwsec, Parser::ESource source, TAccessionList &accessions)
void GetLenSubNode(DataBlk &dbp)
void ShrinkSpaces(char *line)
static void RawBioseqPack(CBioseq &bioseq)
static bool TrimEmblFeatBlk(DataBlk &dbp)
bool check_div(bool pat_acc, bool pat_ref, bool est_kwd, bool sts_kwd, bool gss_kwd, bool if_cds, string &div, CMolInfo::TTech *tech, size_t bases, Parser::ESource source, bool &drop)
CRef< CBioseq > CreateEntryBioseq(ParserPtr pp)
const CSeq_descr & GetDescrPointer(const CSeq_entry &entry)
Int4 ScanSequence(bool warn, char **seqptr, std::vector< char > &bsp, unsigned char *conv, Char replacechar, int *numns)
const char * GetEmblDiv(Uint1 num)
TSeqPos GetLength(void) const
@Imp_feat.hpp User-defined methods of the data storage class.
static SIZE_TYPE Convert(const CTempString &src, TCoding src_coding, TSeqPos pos, TSeqPos length, string &dst, TCoding dst_coding)
@Seq_descr.hpp User-defined methods of the data storage class.
static bool IsNa(EMol mol)
static TPair GetCodeIndexFromTo(CSeq_data::E_Choice code_type)
static const string & GetCode(CSeq_data::E_Choice code_type, TIndex idx)
pair< TIndex, TIndex > TPair
static TSeqPos Pack(CSeq_data *in_seq, TSeqPos uLength=ncbi::numeric_limits< TSeqPos >::max())
Template class for iteration on objects of class C (non-medifiable version)
std::variant< monostate, TList, EntryBlk *, FeatBlk *, const TXmlIndexList * > mData
struct DataBlk::@1166 mBuf
#define ERR_DIVISION_NotMappedtoEST
#define ERR_ACCESSION_UnusualWGS_Secondary
#define ERR_DIVISION_ShouldBePAT
#define ERR_DIVISION_MappedtoPAT
#define ERR_DIVISION_MappedtoSTS
#define ERR_SEQUENCE_TooShort
#define ERR_SEQUENCE_TooShortIsPatent
#define ERR_SEQUENCE_UnknownBaseHTG3
#define ERR_DIVISION_LongGSSSequence
#define ERR_DIVISION_ESTHasCDSFeature
#define ERR_DIVISION_PATHasGSSKeywords
#define ERR_REFERENCE_MultipleIdentifiers
#define ERR_DIVISION_MissingSTSKeywords
#define ERR_DIVISION_MissingPatentRef
#define ERR_SEQUENCE_BadResidue
#define ERR_DIVISION_PATHasESTKeywords
#define ERR_ACCESSION_ScfldHasWGSContigSec
#define ERR_FORMAT_LineTypeOrder
#define ERR_DIVISION_MappedtoGSS
#define ERR_DIVISION_GSSHasCDSFeature
#define ERR_DIVISION_MappedtoEST
#define ERR_DEFINITION_HTGNotInProgress
#define ERR_ACCESSION_WGSMasterAsSecondary
#define ERR_DIVISION_STSHasCDSFeature
#define ERR_FEATURE_NoFeatData
#define ERR_DIVISION_ShouldBeHTG
#define ERR_DIVISION_MissingESTKeywords
#define ERR_DIVISION_NotMappedtoGSS
#define ERR_SEQUENCE_SeqLenNotEq
#define ERR_DIVISION_PATHasCDSFeature
#define ERR_DIVISION_MissingGSSKeywords
#define ERR_DIVISION_NotMappedtoSTS
#define ERR_DIVISION_LongSTSSequence
#define ERR_DIVISION_GBBlockDivision
#define ERR_SEQUENCE_AllNs
#define ERR_ACCESSION_WGSWithNonWGS_Sec
#define ERR_DIVISION_PATHasSTSKeywords
#define ERR_DIVISION_LongESTSequence
#define ERR_DEFINITION_HTGShouldBeComplete
#define ERR_DIVISION_ESTHasSTSKeywords
#define ERR_DIVISION_ShouldNotBeHTG
list< CRef< objects::CSeq_entry > > TEntryList
unique_ptr< string > XMLFindTagValue(const char *entry, const TXmlIndexList &xil, Int4 tag)
#define INSDSEQ_DEFINITION
#define INSDSEQ_FEATURE_TABLE
DataBlk::TList TDataBlkList
std::list< std::string > TKeywordList
std::list< CRef< objects::CPub > > TPubList
forward_list< string > TokenBlkList
std::list< CRef< objects::CSeqdesc > > TSeqdescList
forward_list< XmlIndex > TXmlIndexList
std::list< std::string > TAccessionList
int fta_atoi(string_view sv)
void MemSet(void *p, int n, size_t sz)
bool fta_StartsWith(const char *s1, string_view s2)
bool StringEquN(const char *s1, const char *s2, size_t n)
bool StringEqu(const char *s1, const char *s2)
void StringNCpy(char *d, const char *s, size_t n)
size_t StringLen(const char *s)
void MemCpy(void *p, const void *q, size_t sz)
char * StringNew(size_t sz)
#define FtaErrPost(sev, level,...)
static DLIST_TYPE *DLIST_NAME() last(DLIST_LIST_TYPE *list)
static DLIST_TYPE *DLIST_NAME() next(DLIST_LIST_TYPE *list, DLIST_TYPE *item)
static const char * str(char *buf, int n)
unsigned int TSeqPos
Type for sequence locations and lengths.
void swap(NCBI_NS_NCBI::pair_base_member< T1, T2 > &pair1, NCBI_NS_NCBI::pair_base_member< T1, T2 > &pair2)
const TPrim & Get(void) const
static EAccessionInfo IdentifyAccession(const CTempString &accession, TParseFlags flags=fParse_AnyRaw)
Deduces information from a bare accession a la WHICH_db_accession; may report false negatives on prop...
static E_Choice GetAccType(EAccessionInfo info)
void Add(const CSeq_loc &other)
Simple adding of seq-locs.
CBeginInfo Begin(C &obj)
Get starting point of object hierarchy.
CRef< C > Ref(C *object)
Helper functions to get CRef<> and CConstRef<> objects.
void Reset(void)
Reset reference object.
bool Empty(void) const THROWS_NONE
Check if CRef is empty â not pointing to any object, which means having a null value.
uint8_t Uint1
1-byte (8-bit) unsigned integer
int16_t Int2
2-byte (16-bit) signed integer
int32_t Int4
4-byte (32-bit) signed integer
char Char
Alias for char.
uint32_t Uint4
4-byte (32-bit) unsigned integer
uint16_t Uint2
2-byte (16-bit) unsigned integer
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
static list< string > & Split(const CTempString str, const CTempString delim, list< string > &arr, TSplitFlags flags=0, vector< SIZE_TYPE > *token_pos=NULL)
Split a string using specified delimiters.
static SIZE_TYPE FindNoCase(const CTempString str, const CTempString pattern, SIZE_TYPE start, SIZE_TYPE end, EOccurrence which=eFirst)
Find the pattern in the specified range of a string using a case insensitive search.
static bool IsBlank(const CTempString str, SIZE_TYPE pos=0)
Check if a string is blank (has no text).
static void TruncateSpacesInPlace(string &str, ETrunc where=eTrunc_Both)
Truncate whitespace in a string (in-place)
static SIZE_TYPE CommonSuffixSize(const CTempString s1, const CTempString s2)
Determine the common suffix of two strings.
static SIZE_TYPE Find(const CTempString str, const CTempString pattern, ECase use_case=eCase, EDirection direction=eForwardSearch, SIZE_TYPE occurrence=0)
Find the pattern in the string.
static bool EqualCase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-sensitive equality of a substring with another string.
static bool StartsWith(const CTempString str, const CTempString start, ECase use_case=eCase)
Check if a string starts with a specified prefix value.
static void TrimSuffixInPlace(string &str, const CTempString suffix, ECase use_case=eCase)
Trim suffix from a string (in-place)
static bool EqualNocase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-insensitive equality of a substring with another string.
@ eNocase
Case insensitive compare.
void SetSource(const TSource &value)
Assign a value to Source data member.
TKeywords & SetKeywords(void)
Assign a value to Keywords data member.
bool IsSetExtra_accessions(void) const
Check if a value has been assigned to Extra_accessions data member.
void ResetKeywords(void)
Reset Keywords data member.
void ResetOrigin(void)
Reset Origin data member.
bool IsSetDiv(void) const
GenBank division Check if a value has been assigned to Div data member.
void ResetSource(void)
Reset Source data member.
void ResetDate(void)
Reset Date data member.
bool IsSetSource(void) const
source line Check if a value has been assigned to Source data member.
void SetDate(const TDate &value)
Assign a value to Date data member.
bool IsSetEntry_date(void) const
replaces date Check if a value has been assigned to Entry_date data member.
const TDiv & GetDiv(void) const
Get the Div member data.
TExtra_accessions & SetExtra_accessions(void)
Assign a value to Extra_accessions data member.
const TExtra_accessions & GetExtra_accessions(void) const
Get the Extra_accessions member data.
const TKeywords & GetKeywords(void) const
Get the Keywords member data.
bool IsSetOrigin(void) const
Check if a value has been assigned to Origin data member.
void SetDiv(const TDiv &value)
Assign a value to Div data member.
bool IsSetKeywords(void) const
Check if a value has been assigned to Keywords data member.
void ResetExtra_accessions(void)
Reset Extra_accessions data member.
void ResetDiv(void)
Reset Div data member.
bool IsSetDate(void) const
OBSOLETE old form Entry Date Check if a value has been assigned to Date data member.
void SetOrigin(const TOrigin &value)
Assign a value to Origin data member.
bool IsSetPages(void) const
Check if a value has been assigned to Pages data member.
bool IsSetDate(void) const
Check if a value has been assigned to Date data member.
bool IsSetAuthors(void) const
Check if a value has been assigned to Authors data member.
bool IsSetVolume(void) const
Check if a value has been assigned to Volume data member.
const TCit & GetCit(void) const
Get the Cit member data.
bool IsSetSerial_number(void) const
for GenBank style references Check if a value has been assigned to Serial_number data member.
bool IsSetCit(void) const
anything, not parsable Check if a value has been assigned to Cit data member.
bool IsSetTitle(void) const
eg.
bool IsSetJournal(void) const
Check if a value has been assigned to Journal data member.
bool IsSetPmid(void) const
PubMed Id Check if a value has been assigned to Pmid data member.
bool IsSetIssue(void) const
Check if a value has been assigned to Issue data member.
bool IsSetMuid(void) const
medline uid Check if a value has been assigned to Muid data member.
bool IsSetOrg(void) const
Check if a value has been assigned to Org data member.
const TOrg & GetOrg(void) const
Get the Org member data.
bool IsStr(void) const
Check if variant Str is selected.
bool IsSetType(void) const
type of object within class Check if a value has been assigned to Type data member.
void SetTag(TTag &value)
Assign a value to Tag data member.
const TStr & GetStr(void) const
Get the variant data.
const TType & GetType(void) const
Get the Type member data.
void SetDb(const TDb &value)
Assign a value to Db data member.
vector< CRef< CDbtag > > TDb
const TDb & GetDb(void) const
Get the Db member data.
bool IsSetDiv(void) const
GenBank division code Check if a value has been assigned to Div data member.
bool IsSetOrgname(void) const
Check if a value has been assigned to Orgname data member.
void SetOrgname(TOrgname &value)
Assign a value to Orgname data member.
const TOrgname & GetOrgname(void) const
Get the Orgname member data.
const Tdata & Get(void) const
Get the member data.
E_Choice Which(void) const
Which variant is currently selected.
const TGen & GetGen(void) const
Get the variant data.
TMuid GetMuid(void) const
Get the variant data.
bool IsMuid(void) const
Check if variant Muid is selected.
bool IsGen(void) const
Check if variant Gen is selected.
@ eSeq_code_type_iupacaa
IUPAC 1 letter amino acid code.
@ eSeq_code_type_iupacna
IUPAC 1 letter nuc acid code.
const TKey & GetKey(void) const
Get the Key member data.
bool IsSetKey(void) const
Check if a value has been assigned to Key data member.
E_Choice
Choice variants.
TLocal & SetLocal(void)
Select the variant.
@ e_Other
for historical reasons, 'other' = 'refseq'
@ e_Tpe
Third Party Annot/Seq EMBL.
@ e_Tpd
Third Party Annot/Seq DDBJ.
@ e_not_set
No variant selected.
@ e_Tpg
Third Party Annot/Seq Genbank.
const TSeq & GetSeq(void) const
Get the variant data.
const TDescr & GetDescr(void) const
Get the Descr member data.
const TSet & GetSet(void) const
Get the variant data.
bool IsSeq(void) const
Check if variant Seq is selected.
const TIupacaa & GetIupacaa(void) const
Get the variant data.
TId & SetId(void)
Assign a value to Id data member.
const TUser & GetUser(void) const
Get the variant data.
bool IsSetSeq_data(void) const
the sequence Check if a value has been assigned to Seq_data data member.
ERepr
representation class
const TInst & GetInst(void) const
Get the Inst member data.
bool IsSetMol(void) const
Check if a value has been assigned to Mol data member.
const TPub & GetPub(void) const
Get the variant data.
const TNcbi8aa & GetNcbi8aa(void) const
Get the variant data.
TNcbieaa & SetNcbieaa(void)
Select the variant.
E_Choice
Choice variants.
TTech GetTech(void) const
Get the Tech member data.
bool IsSetExt(void) const
extensions for special types Check if a value has been assigned to Ext data member.
bool IsDelta(void) const
Check if variant Delta is selected.
void SetInst(TInst &value)
Assign a value to Inst data member.
const TNcbistdaa & GetNcbistdaa(void) const
Get the variant data.
const TExt & GetExt(void) const
Get the Ext member data.
EMol
molecule class in living organism
bool IsPub(void) const
Check if variant Pub is selected.
list< CRef< CSeq_feat > > TFtable
E_Choice Which(void) const
Which variant is currently selected.
list< CRef< CSeq_annot > > TAnnot
bool IsGap(void) const
Check if variant Gap is selected.
const TPub & GetPub(void) const
Get the Pub member data.
const TSeq_data & GetSeq_data(void) const
Get the Seq_data member data.
const TDescr & GetDescr(void) const
Get the Descr member data.
bool IsUser(void) const
Check if variant User is selected.
E_Choice Which(void) const
Which variant is currently selected.
@ eRepr_const
constructed sequence
@ eRepr_delta
sequence made by changes (delta) to others
@ eRepr_raw
continuous sequence
@ eTech_htgs_2
ordered High Throughput sequence contig
@ eTech_sts
Sequence Tagged Site.
@ eTech_htgs_3
finished High Throughput sequence
@ eTech_htgs_1
unordered High Throughput sequence contig
@ eTech_tsa
transcriptome shotgun assembly
@ eTech_survey
one-pass genomic sequence
@ eTech_htgs_0
single genomic reads for coordination
@ eTech_est
Expressed Sequence Tag.
@ e_Ncbistdaa
consecutive codes for std aas
@ e_Iupacna
IUPAC 1 letter nuc acid code.
@ e_Iupacaa
IUPAC 1 letter amino acid code.
@ e_Ncbi8aa
8 bit extended amino acid codes
@ eStrand_ds
double strand
@ eStrand_ss
single strand
unsigned int
A callback function used to compare two keys in a database.
int fta_if_wgs_acc(string_view accession)
void DelNonDigitTail(string &str)
CSeq_id::E_Choice GetNucAccOwner(string_view acc)
The blob sat and sat key Both must be positive integers</td > n< td > Non empty string The interpretation of the blob id depends on a processor Cassandra n processor expects the following format
static void text(MDB_val *v)
const struct ncbi::grid::netcache::search::fields::SIZE size
const struct ncbi::grid::netcache::search::fields::KEY key
const CharType(& source)[N]
int strcmp(const char *str1, const char *str2)
Int4 delta(size_t dimension_, const Int4 *score_)
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)
void copy(Njn::Matrix< S > *matrix_, const Njn::Matrix< T > &matrix0_)
static SLJIT_INLINE sljit_ins l(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)
list< SectionPtr > mSections
vector< IndexblkPtr > entrylist
string_view GetNodeData(const DataBlk &entry, int nodeType)
char * SrchTheChar(string_view sv, Char letter)
bool SetTextId(Uint1 seqtype, CSeq_id &seqId, CTextseq_id &textId)
string GetBlkDataReplaceNewLine(string_view instr, Uint2 indent)
bool SrchNodeType(const DataBlk &entry, Int4 type, size_t *plen, char **pptr)
TDataBlkList & TrackNodes(const DataBlk &entry)
char * SrchTheStr(string_view sv, string_view leadstr)
void fta_StringCpy(char *dst, const char *src)
DataBlk * TrackNodeType(const DataBlk &entry, Int2 type)
int SrchKeyword(string_view str, const vector< string > &keywordList)
bool fta_is_tpa_keyword(string_view str)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4