;
45 #define i2s(x) NStr::NumericToString(x) 53m_is_chr=for_chr_from_scaf;
55m_CheckObjLen=
false;
57m_CommentLineCount=m_EolComments=0;
58m_componentsInLastScaffold=m_componentsInLastObject=0;
59m_gapsInLastScaffold=m_gapsInLastObject=0;
61m_prev_component_beg = m_prev_component_end = 0;
65m_SingleCompScaffolds = 0;
66m_SingleCompObjects = 0;
67m_SingleCompScaffolds_withGaps=0;
68m_SingleCompObjects_withGaps=0;
75m_comp_name_matches=0;
78memset(m_CompOri, 0,
sizeof(m_CompOri));
79memset(m_GapTypeCnt, 0,
sizeof(m_GapTypeCnt));
80m_ln_ev_flags2count.clear();
81m_Ngap_ln2count.clear();
82m_Ugap_ln2count.clear();
85m_max_comp_beg=m_max_obj_beg=0;
86m_has_partial_comp=m_has_comp_of_unknown_len=
false;
88 if(for_chr_from_scaf) {
89 NCBI_ASSERT(m_explicit_scaf,
"m_explicit_scaf is false in CAgpValidateReader::Reset(true)");
92m_obj_id_pattern.clear();
94m_obj_id_digits->clear();
95m_prev_id_digits->clear();
97m_prev_component_id.clear();
99m_TypeCompCnt.clear();
101m_objNamePatterns.clear();
102m_CompId2Spans.clear();
104m_comp2len = &m_scaf2len;
168 "m_GapTypeCnt[] index out of bounds");
176 if(!res.second) res.first->second++;
182 if(!res.second) res.first->second++;
268pair<TCompId2Spans::iterator, bool> id_insert_result =
271 stringsameComId_otherScaf;
273 if(id_insert_result.second ==
false) {
275 CCompSpans& spans = (id_insert_result.first)->second;
286 string(
": ")+ check_sp.first->ToString(
m_AgpErr)
291 string(
"; preceding span: ")+ check_sp.first->ToString(
m_AgpErr)
300 intprev_comp_file=spans.rbegin()->file_num;
301 intprev_comp_line=spans.rbegin()->line_num;
303sameComId_otherScaf=
"; previous occurance at ";
306sameComId_otherScaf +=
":";
309sameComId_otherScaf+=
"line ";
311sameComId_otherScaf+=
i2s(prev_comp_line);
314sameComId_otherScaf+=
", in another object";
317sameComId_otherScaf+=
", before a scaffold-breaking gap at ";
323sameComId_otherScaf +=
":";
326sameComId_otherScaf+=
"line ";
410 " out of "+
i2s(it->second)+
" bp)" 430 boolrow_saved =
false;
437 if(!intersection.
empty()) {
443 for(; it != intersection.
end() && masked_spans.size() < 80; ++it) {
444 if(masked_spans.size()) masked_spans +=
", ";
445masked_spans +=
i2s(it->GetFrom()) +
".."+
i2s(it->GetTo());
447 if(it != intersection.
end()) masked_spans +=
", ...";
458 else if(sameComId_otherScaf.size()) {
476 "CAgpValidateReader::OnScaffoldEnd() invoked for a scaffold with no components or gaps");
542 stringdetails=
": ";
570 stringparsing_error;
587parsing_error = e.
GetMsg();
595 string(
" in object_id (column 1)") + (parsing_error.size()?
": ":
"") + parsing_error );
602 if(obj_insert_result.second ==
false) {
609 if(
NPOS!= p_space) {
671 " and component_end = length of sequence",
680 #define ALIGN_W(x) setw(w) << resetiosflags(IOS_BASE::left) << (x) 681 #define ALIGN_M_W(x) setw(m_w) << resetiosflags(IOS_BASE::left) << (x) 726 if(xml_tag.size()==0) {
731 booluc = !add_label_as_attribute;
733 for(string::const_iterator it =
label.begin(); it !=
label.end(); ++it) {
739 if(*it==
',')
break;
740uc = !add_label_as_attribute;
747 if(xml_tag.size() && xml_tag[xml_tag.size()-1]==
':') {
748xml_tag.resize( xml_tag.size()-1 );
754 if( add_label_as_attribute ) {
755xml_tag =
last_tag+
"\""+ xml_tag +
"\"";
771 if(pos!=
NPOS) xml_tag.resize(pos);
773 m_out<<
"</"<< xml_tag <<
">\n";
801 if(mf_len_cnt < it->second) {
802mf_len_cnt = it->second;
812 if(mf_len_cnt>1 && mf_len_cnt==gap_cnt)
return "100";
813 if(mf_len_cnt>=10 || (mf_len_cnt>2 && mf_len_cnt*10>=gap_cnt && mf_len%10==0) ) {
830 intmf_len, mf_len_cnt;
835 if(pct!=
"100") eol_text +=
i2s(mf_len_cnt) +
" or ";
837eol_text += pct +
"% of N gaps have length="+
i2s(mf_len)+
")\n";
839attrs =
" mf_len=\""+
i2s(mf_len)+
"\"";
840attrs+=
" cnt=\""+
i2s(mf_len_cnt)+
"\"";
841attrs+=
" pct=\""+pct+
"\"";
857 string(
"\t") + str_gap_type +
858 string(
" ").substr(0, 15-str_gap_type.size() ) +
": " 863xprint.
last_tag+
"\""+ str_gap_type +
"\""+ attrs
871 stringnot_in_agp_msg = not_in_agp.
CheckIds();
884 if(not_in_agp_msg.size()) {
889 const intsingleton_ori_not_plus_count =
891e_count += singleton_ori_not_plus_count;
892w_count -= singleton_ori_not_plus_count;
913 out<<
" (to print all: -limit 0; to skip some: -skip CODE)";
925 "(Use -g to print lines with WGS component_id/component_type mismatch.)";
930 " to print lines with short gaps.)";
945 if(not_in_agp_msg.size() && !use_xml) {
946 out<<
" - - "<< not_in_agp_msg <<
"\n";
949 out<<
" - - no gap lines\n";
954 strings_comp, s_gap;
959 for(CValuesCount::TValPtrVec::iterator
960it = comp_cnt.begin();
961it != comp_cnt.end();
966 if( s->size() ) *s+=
", ";
969*s+=
i2s((*it)->second);
974 if(use_xml)
out<<
"<stats>\n";
997 if( s_comp.size() ) {
999 stringcomp_by_type =
", "+ s_comp;
1004comp_by_type = comp_by_type.substr(8) + comp_by_type.substr(0, 8);
1005 out<< comp_by_type;
1018xprint.
line(
"Components : ",
m_CompCount,
string(
"Components type_counts=\"")+s_comp+
"\"");
1030xprint.
line(
"Component spans in AGP are consistent with FASTA\n(i.e. do not include or intersect runs of Ns longer than 10 bp).");
1038 if( s_gap.size() ) {
1040 stringgap_u_n =
", "+ s_gap;
1045gap_u_n = gap_u_n.substr(7) + gap_u_n.substr(0, 7);
1060xprint.
line(
"Gaps : ",
m_GapCount,
string(
"Gaps u_n_counts=\"")+s_gap+
"\"");
1069 intlinkageNoCnt =
m_GapCount- linkageYesCnt;
1074xprint.
line(
"- do not break scaffold: ", doNotBreakCnt,
"GapsWithinScaf");
1076 if(doNotBreakCnt) {
1077xprint.
last_tag=
"GapsWithinScaf_byType linkage=\"yes\" type=";
1080xprint.
last_tag=
"GapsWithinScaf_byType linkage=\"no\" type=";
1082xprint.
last_tag=
"GapsWithinScaf_byType linkage=\"yes\" type=";
1088xprint.
line(
"- break it, linkage no : ", breakCnt,
"GapsBreakScaf");
1090xprint.
last_tag=
"GapsBreakScaf_byType linkage=\"no\" type=";
1100 intmf_len, mf_len_cnt;
1106 string label=
"Most frequent N gap_length ("+ pct +
"% or "+
1107 i2s(mf_len_cnt) +
" lines): ";
1109 string tag=
"MostFrequentNGapLen pct=\""+ pct +
"\" cnt=\""+
1110 i2s(mf_len_cnt) +
"\"";
1120xprint.
line(
"Linkage evidence:");
1121xprint.
last_tag=
"LinkageEvidence value=";
1124 typedefmultimap<int,int> TMultiMapIntInt;
1125TMultiMapIntInt cnt2ln_ev;
1126 size_tlabel_width=0;
1130 if(
label.size() > label_width) label_width =
label.size();
1132 if(label_width>40) label_width=40;
1133 for(TMultiMapIntInt::reverse_iterator it = cnt2ln_ev.rbegin(); it != cnt2ln_ev.rend(); ++it) {
1136 string(
" ").substr(0, label_width-
label.size());
1139xprint.
line(
string(
" ") +
label+
": ", it->first );
1156compNamePatterns.
AddName(it->first);
1158 boolhasSuspicious =
x_PrintPatterns(compNamePatterns,
"Component names",
1164xprint.
line(
"Use -g or \"-show all\" to print lines with suspicious accessions.");
1167 const intMAX_objname_eq_comp=3;
1168 intcnt_objname_eq_comp=0;
1169 stringstr_objname_eq_comp;
1172cnt_objname_eq_comp++;
1173 if(cnt_objname_eq_comp<=MAX_objname_eq_comp) {
1174 if(cnt_objname_eq_comp>1) str_objname_eq_comp+=
", ";
1175str_objname_eq_comp+=*it;
1181 if(cnt_objname_eq_comp && !use_xml) {
1182 out<<
"\n"<< cnt_objname_eq_comp <<
" name" 1183<< (cnt_objname_eq_comp==1?
" is":
"s are")
1184<<
" used both as object and as component_id:\n";
1185 out<<
" "<< str_objname_eq_comp;
1186 if(cnt_objname_eq_comp>MAX_objname_eq_comp)
out<<
", ...";
1190 if(use_xml)
out<<
"</stats>\n";
1196 if(not_in_agp_msg.size()) {
1197 if(use_xml) not_in_agp.
PrintXml(
out, not_in_agp_msg);
1198 elsenot_in_agp.
Print(
out, not_in_agp_msg);
1230 boolopenBracket=
false;
1231 if( s[pos]==
'[') {
1242 while( pos<(
int)s.size() ) {
1246 else if(openBracket) {
1248 if(pos==p1)
return false;
1249 if(ch==
'.'|| ch==
',') {
1250 if( pos >= (
int)s.size()-1 || len1 )
1256 if( pos >= (
int)s.size() || s[pos] !=
'.')
return false;
1260 else if(ch==
']') {
1261 if( !p2 || p2==pos )
return false;
1262openBracket=
false;
1273 if(openBracket || pos==p1)
return false;
1276sd1=s.substr(p1, pos-p1);
1280sd1=s.substr(p1, len1);
1281sd2=s.substr(p2, pos-1-p2);
1302 if( !
isalpha(s[numLetters]) && s[numLetters]!=
'_')
break;
1310 if(sd2.size()==0 && s[pos]==
'[') {
1320 if(pos<(
int)s.size()) {
1327 if(ver1.size()) ver1=
string(
".")+ver1;
1328 if(ver2.size()) ver2=
string(
".")+ver2;
1333 if(sd2.size()==0) {
1343 stringltr=s.substr(0, numLetters);
1352 return fSome|(c1>c2?c1:c2);
1357 CAccPatternCounter& namePatterns,
const string& strHeader,
intfasta_count,
const char* count_label,
1360 const intMaxPatterns=10;
1362 const stringSPACES=
" ";
1373cnt_pat.rbegin()->first
1378 intwPattern=strHeader.size()-2;
1382 intpatternsPrinted=0;
1383 boolmixedPattern=
false;
1385CAccPatternCounter::TMapCountToString::reverse_iterator
1386it = cnt_pat.rbegin(); it != cnt_pat.rend(); it++
1388 if( ++patternsPrinted<=MaxPatterns ||
1389cnt_pat_size<=2*MaxPatterns
1391 int i= it->second.size();
1392 if(
i> wPattern ) wPattern =
i;
1395 if(w+15>wPattern) wPattern = w+15;
1397totalCount+=it->first;
1400 if(
code&
fSome) mixedPattern=
true;
1403 boolmixedCategories=(nucCount && otherCount);
1404 if(mixedCategories && wPattern<20) wPattern=20;
1407 stringxml_outer_tag;
1408 if(strHeader.size()) {
1410xml_outer_tag = strHeader.substr(0, strHeader.find(
' ')) +
"Names";
1411 out<<
"<"<< xml_outer_tag <<
">\n";
1413 if(fasta_count && fasta_count!=totalCount) {
1417(count_label ? count_label :
"FASTA")+
"\n";
1420strHeader+SPACES.substr(
14210, wPattern+2>(
int)strHeader.size() ? wPattern+2-strHeader.size() : 0
1429 boolprintNuc=(nucCount>0);
1432 if(mixedCategories) {
1435xprint.
line(
string(
"------------------------").substr(0, wPattern-20)+
" ");
1437 if(printNuc) xprint.
line(
"Nucleotide accessions: ", nucCount);
1438 elsexprint.
line(
"OTHER identifiers : ", otherCount);
1443 intaccessionsSkipped=0;
1444 intpatternsSkipped=0;
1446CAccPatternCounter::TMapCountToString::reverse_iterator
1447it = cnt_pat.rbegin(); it != cnt_pat.rend(); it++
1453 if( ++patternsPrinted<=MaxPatterns ||
1454cnt_pat_size<=2*MaxPatterns
1463acc_warning =
"some local or misspelled";
break;
1465acc_warning =
"some look like protein accessions";
break;
1467 case fUnknownFormat:
if(!(mixedCategories || mixedPattern))
break;
1468 case fOneAccManyVer: acc_warning =
"local or misspelled";
break;
1469 case fProtein: acc_warning =
"looks like protein accession";
break;
1473 if( acc_warning.size() ) {
1481( acc_warning.size() ?
string(
" warn=\"")+acc_warning+
"\"":
"")+
1487 string(
" ") + it->second +
1488SPACES.substr(0, wPattern - it->second.size()) +
": ",
1496accessionsSkipped += it->first;
1501 if(accessionsSkipped) {
1502 strings =
"other ";
1503s+=
i2s(patternsSkipped);
1505xprint.
line(
" "+ s + SPACES.substr(0, wPattern - s.size()) +
": ",
1509 " patterns=\"other\"" 1513 if(!mixedCategories || !printNuc)
break;
1517 if(use_xml && xml_outer_tag.size()) {
1518 out<<
"</"<< xml_outer_tag <<
">\n";
1521 returnmixedCategories||mixedPattern;
1563 if(
id.
size() &&
1564 id.find(
"|") ==
NPOS 1572 if(
m_cnt>0)
return 1575 "component name(s) in FASTA not found in AGP";
1584 out<<
"\n"<< (m_reader.m_AgpErr->m_strict?
"ERROR":
"WARNING")
1585<<
" -- "<< m_cnt <<
" "<<
tmp<<
": ";
1588 out<< *(m_ids.begin()) <<
"\n";
1590 else if(m_cnt<m_reader.m_AgpErr->m_MaxRepeat||m_reader.m_AgpErr->m_MaxRepeat==0) {
1593 out<<
" "<< *it <<
"\n";
1605 out<<
"<MissingSeqNames level=\""+
label+
"\">\n";
1610 out<<
"</MissingSeqNames>\n";
1618 for(
iteratorit = begin(); it != end(); ++it) {
1619 out.push_back(&*it);
1637 if(
a->second !=
b->second ){
1638 return a->second >
b->second;
1640 return a->first <
b->first;
1649 for(iterator it = begin(); it != end(); ++it) {
1651 if( (it->beg <= span_beg && span_beg <= it->end) ||
1652(it->beg <= span_end && span_end <= it->end) )
1656 if( ( isPlus && span_beg < it->beg) ||
1657(!isPlus && span_end > it->end)
1677 if(insert_result.second ==
false) {
1678 if(insert_result.first->second !=
len)
1679 returninsert_result.first->second;
1681 if(increment_count) m_count++;
@ eAgpVersion_auto
auto-detect using the first gap line
@ eAgpVersion_2_0
AGP spec 2.0 or later.
static int GetNameCategory(const string &s)
string MostFrequentGapSize(CAgpValidateReader::TMapIntInt &ln2count, int &mf_len, int &mf_len_cnt)
static bool ReadNumberOrRange(const string &s, int &pos, string &sd1, string &sd2)
Accession naming patterns; find ranges for consequtive digits.
vector< double > TDoubleVec
iterator AddName(const string &name, TDoubleVec *runsOfDigits=nullptr)
void GetSortedPatterns(TMapCountToString &dst)
Correctly print multiple errors and warnings on consequitive lines; suppress undesired or higly repet...
virtual void Msg(int code, const string &details, int appliesTo=fAtThisLine)
void PrintMessageCounts(CNcbiOstream &ostr, int from, int to=E_First, bool report_lines_skipped=false, TMapCcodeToString *hints=nullptr)
void UpgradeToError(EErrCode code)
@ CODE_First
The number of the first CAgpErr error enum.
@ CODE_Last
This is one past the last code allowed, after built-in and user errors.
string GetPrintableCode(int code, bool strict=false) const
virtual void LineDone(const string &s, int line_num, bool invalid_line=false)
static void PrintTotalsXml(CNcbiOstream &ostr, int e_count, int w_count, int note_count, int skipped_count)
static void PrintTotals(CNcbiOstream &ostr, int e_count, int w_count, int note_count, int skipped_count)
int GetCount(EErrCode code) const
const string & GetFile(int num)
int CountTotals(int from, int to=E_First)
@ W_BreakingGapSameCompId
@ W_UnSingleCompNotInFull
Detects scaffolds, object boundaries, errors that involve 2 consecutive lines, and is intended as a s...
CAgpErr * GetErrorHandler()
CRef< CAgpRow > m_prev_row
CRef< CAgpRow > m_this_row
EAgpVersion m_agp_version
string & GetComponentId()
static bool CheckComponentEnd(const string &comp_id, TAgpPos comp_end, TAgpLen comp_len, CAgpErr &agp_err)
string LinkageEvidenceFlagsToString()
int linkage_evidence_flags
a bit map which holds summary of info in linkage_evidences.
static bool IsGap(char c)
bool GapEndsScaffold() const
static bool IsDraftComponent(char c)
string & GetComponentType()
static const char * GapTypeToString(int i)
CAgpValidateReader & m_reader
void PrintXml(CNcbiOstream &out, const string &msg)
void Print(CNcbiOstream &out, const string &msg)
CAccPatternCounter m_patterns
static bool x_PrintPatterns(CAccPatternCounter &namePatterns, const string &strHeader, int fasta_count, const char *count_label=nullptr, CNcbiOstream &out=cout, bool use_xml=false)
bool m_last_scaf_start_is_obj
TAgpPos m_prev_component_beg
TMapIntInt m_NgapByType_ln2count[CAgpRow::eGapCount+CAgpRow::eGapYes_count]
void x_GetMostFreqGapsText(int gap_type, string &eol_text, string &attrs)
CAccPatternCounter::TDoubleVec * m_prev_id_digits
TMapIntInt m_ln_ev_flags2count
pair< TObjSet::iterator, bool > TObjSetResult
pair< string, CCompSpans > TCompIdSpansPair
void PrintTotals(CNcbiOstream &out=cout, bool use_xml=false)
int m_last_scaf_start_line
void x_PrintTotals(CNcbiOstream &out=cout, bool use_xml=false)
void Reset(bool for_chr_from_scaf=false)
int m_GapTypeCnt[CAgpRow::eGapCount+CAgpRow::eGapYes_count]
pair< TAgpPos, int > TPairIntInt
IAgpRowOutput * m_row_output
pair< TMapIntInt::iterator, bool > TMapIntIntResult
CAgpValidateReader(CAgpErrEx &agpErr, CMapCompLen &comp2len, TMapStrRangeColl &comp2range_coll)
string m_prev_component_id
int m_SingleCompObjects_withGaps
TAgpLen m_expected_obj_len
int m_componentsInLastObject
int m_SingleCompScaffolds
int m_SingleCompScaffolds_withGaps
CAccPatternCounter m_objNamePatterns
void x_PrintGapCountsLine(XPrintTotalsItem &xprint, int gap_type, const string &label=NcbiEmptyString)
int m_componentsInLastScaffold
virtual void OnScaffoldEnd()
bool m_has_comp_of_unknown_len
TMapIntInt m_Ngap_ln2count
virtual ~CAgpValidateReader()
TCompId2Spans m_CompId2Spans
virtual void OnObjectChange()
void SetRowOutput(IAgpRowOutput *row_output)
CValuesCount m_TypeCompCnt
TMapStrRangeColl * m_comp2range_coll
CAccPatternCounter::TDoubleVec * m_obj_id_digits
int m_last_scaf_start_file
TMapIntInt m_Ugap_ln2count
TAgpPos m_prev_component_end
virtual void OnGapOrComponent()
pair< iterator, TAgpPos > TCheckSpan
TCheckSpan CheckSpan(TAgpPos span_beg, TAgpPos span_end, bool isPlus)
void AddSpan(const CCompVal &span)
void init(CAgpRow &row, int line_num_arg)
pair< TMapStrInt::iterator, bool > TMapStrIntResult
TAgpLen AddCompLen(const string &acc, TAgpLen len, bool increment_count=true)
TRangeVector::const_iterator const_iterator
const_iterator end() const
TThisType & IntersectWith(const TRange &r)
const_iterator begin() const
vector< value_type * > TValPtrVec
static int x_byCount(value_type *a, value_type *b)
void add(const string &c)
void GetSortedValues(TValPtrVec &out)
virtual void SaveRow(const string &s, CRef< CAgpRow > row, TRangeColl *runs_of_Ns)=0
Output the count as text or as xml.
void line(const string &s=NcbiEmptyString)
void line(const string &label, int value, const string &xml_tag=NcbiEmptyString)
void line(const string &label, const string &value, string xml_tag=NcbiEmptyString)
XPrintTotalsItem(CNcbiOstream &out, bool use_xml, int w)
container_type::iterator iterator
const_iterator begin() const
const_iterator end() const
iterator_bool insert(const value_type &val)
container_type::value_type value_type
const_iterator find(const key_type &key) const
iterator_bool insert(const value_type &val)
const_iterator begin() const
parent_type::iterator iterator
const_iterator find(const key_type &key) const
const_iterator end() const
std::ofstream out("events_result.xml")
main entry point for tests
#define NCBI_ASSERT(expr, mess)
const string & GetMsg(void) const
Get message string.
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...
EAccessionInfo
For IdentifyAccession (below)
static SIZE_TYPE ParseFastaIds(CBioseq::TId &ids, const CTempString &s, bool allow_partial_failure=false)
Parse an entire set of |-delimited FASTA-style IDs, appending the results to IDS.
CRange< TSeqPos > TSeqRange
typedefs for sequence ranges
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
IO_PREFIX::ostream CNcbiOstream
Portable alias for ostream.
NCBI_NS_STD::string::size_type SIZE_TYPE
static string DoubleToString(double value, int precision=-1, TNumToStringFlags flags=0)
Convert double to string.
static void TruncateSpacesInPlace(string &str, ETrunc where=eTrunc_Both)
Truncate whitespace in a string (in-place)
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 string & Replace(const string &src, const string &search, const string &replace, string &dst, SIZE_TYPE start_pos=0, SIZE_TYPE max_replace=0, SIZE_TYPE *num_replace=0)
Replace occurrences of a substring within a string.
static string XmlEncode(const CTempString str, TXmlEncode flags=eXmlEnc_Contents)
Encode a string for XML.
static bool StartsWith(const CTempString str, const CTempString start, ECase use_case=eCase)
Check if a string starts with a specified prefix value.
static enable_if< is_arithmetic< TNumeric >::value||is_convertible< TNumeric, Int8 >::value, string >::type NumericToString(TNumeric value, TNumToStringFlags flags=0, int base=10)
Convert numeric value to string.
static string & ReplaceInPlace(string &src, const string &search, const string &replace, SIZE_TYPE start_pos=0, SIZE_TYPE max_replace=0, SIZE_TYPE *num_replace=0)
Replace occurrences of a substring within a string.
static string TruncateSpaces(const string &str, ETrunc where=eTrunc_Both)
Truncate whitespace in a string.
@ fDoubleFixed
DoubleToString*(): Use n.nnnn format for double conversions.
@ eNocase
Case insensitive compare.
static const char label[]
list< CRef< CSeq_id > > TId
constexpr auto sort(_Init &&init)
double value_type
The numeric datatype used by the parser.
const struct ncbi::grid::netcache::search::fields::SIZE size
Magic spell ;-) needed for some weird compilers... very empiric.
const GenericPointer< typename T::ValueType > T2 value
static SLJIT_INLINE sljit_ins msg(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)
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