std::istream istr(&istrbuf);
96 const string& idString,
100 autoit = m_AnnotMap.lower_bound(idString);
102matchMap.emplace(it->first, it);
105 return!matchMap.
empty();
110 const string& idString,
114 returnx_HasExactMatch(idString, annots);
117 boolhasMatch =
false;
119shared_lock<shared_mutex> sLock{m_Mutex};
120 if(!s_HasPrefixMatch(idString, matchMap)) {
125unique_lock<shared_mutex> uLock{m_Mutex};
126 for(
auto match: matchMap) {
127 const auto& annotId =
match.first;
128 autoit =
match.second;
129 if(m_MatchedAnnots.insert(annotId).second) {
131annots.splice(annots.end(), it->second);
132m_AnnotMap.erase(it);
141 const string& idString,
144shared_lock<shared_mutex> sLock{m_Mutex};
145 autoit = m_AnnotMap.find(idString);
146 if(it == m_AnnotMap.end()) {
149 stringannotId = it->first;
153unique_lock<shared_mutex> uLock{m_Mutex};
154 if(m_MatchedAnnots.insert(annotId).second) {
155annots = std::move(it->second);
156m_AnnotMap.erase(it);
166m_reader_flags = reader_flags;
167m_genome_center_id = genome_center_id;
171 if(genome_center_id.empty())
172m_seqid_prefix.clear();
174m_seqid_prefix =
"gnl|"+ genome_center_id +
"|";
180 for(
autoannot: annots) {
188list<CRef<CSeq_annot>> annots;
189 boolhasMatch =
false;
191 boolmatchVersions = (pSeqId->
GetTextseq_Id() ==
nullptr);
195hasMatch = x_HasMatch(matchVersions, idString, annots);
202matchVersions =
true;
205hasMatch = x_HasMatch(matchVersions, idString, annots);
217 autopAnnotId = GetAnnotId(*pAnnot);
222 autoidString = pAnnotId->GetSeqIdString();
224 autoit = m_AnnotMap.find(idString);
225 if(it == m_AnnotMap.end()) {
229it->second.push_back(pAnnot);
User-defined methods of the data storage class.
CRef< CSeq_annot > ReadSequinFeatureTable(const TFlags flags=0, ITableFilter *filter=nullptr, const string &seqid_prefix=kEmptyStr)
bool IsFtable(void) const
list< CRef< objects::CSeq_annot > > TAnnots
void Init(const std::string &genome_center_id, long reader_flags, TLogger *logger=nullptr)
void AddAnnots(TAnnots &annots)
bool x_HasExactMatch(const string &idString, list< CRef< objects::CSeq_annot >> &annots)
void AddAnnot(CRef< objects::CSeq_annot > annot)
std::list< CRef< objects::CSeq_annot > > GetAndUseAnnot(CRef< objects::CSeq_id > seqid) override
bool s_HasPrefixMatch(const string &idString, map< string, TAnnotMap::iterator > &matchMap)
bool x_HasMatch(bool matchVersions, const string &idString, list< CRef< objects::CSeq_annot >> &annots)
void Open(std::unique_ptr< TFile > file)
static CRef< objects::CSeq_id > GetAnnotId(const objects::CSeq_annot &annot)
objects::ILineErrorListener TLogger
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Set object to copy of another one.
static CRef< ILineReader > New(const string &filename)
Return a new ILineReader object corresponding to the given filename, taking "-" (but not "....
string GetSeqIdString(bool with_version=false) const
Return seqid string with optional version for text seqid type.
const CTextseq_id * GetTextseq_Id(void) const
Return embedded CTextseq_id, if any.
void Reset(void)
Reset reference object.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
static bool StartsWith(const CTempString str, const CTempString start, ECase use_case=eCase)
Check if a string starts with a specified prefix value.
static bool EqualNocase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-insensitive equality of a substring with another string.
static string & ToLower(string &str)
Convert string to lower case â string& version.
bool IsStr(void) const
Check if variant Str is selected.
bool IsSetDb(void) const
name of database or system Check if a value has been assigned to Db data member.
const TTag & GetTag(void) const
Get the Tag member data.
bool IsSetTag(void) const
appropriate tag Check if a value has been assigned to Tag data member.
const TDb & GetDb(void) const
Get the Db member data.
const TStr & GetStr(void) const
Get the variant data.
TGeneral & SetGeneral(void)
Select the variant.
bool IsGeneral(void) const
Check if variant General is selected.
TLocal & SetLocal(void)
Select the variant.
const TGeneral & GetGeneral(void) const
Get the variant data.
const TLocal & GetLocal(void) const
Get the variant data.
bool IsGeneral(void) const
Check if variant General is selected.
bool IsSetId(void) const
Check if a value has been assigned to Id data member.
const TId & GetId(void) const
Get the Id member data.
const TFtable & GetFtable(void) const
Get the variant data.
const TData & GetData(void) const
Get the Data member data.
bool IsLocal(void) const
Check if variant Local is selected.
const TGeneral & GetGeneral(void) const
Get the variant data.
static int match(PCRE2_SPTR start_eptr, PCRE2_SPTR start_ecode, uint16_t top_bracket, PCRE2_SIZE frame_size, pcre2_match_data *match_data, match_block *mb)
static SLJIT_INLINE sljit_ins lr(sljit_gpr dst, sljit_gpr src)
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