NCBI C++ ToolKit
feature_item.hpp
Go to the documentation of this file.

Go to the SVN repository for this file.

1 #ifndef OBJTOOLS_FORMAT_ITEMS___FLAT_FEATURE__HPP
2 #define OBJTOOLS_FORMAT_ITEMS___FLAT_FEATURE__HPP
3 
4 /* $Id: feature_item.hpp 99549 2023-04-17 14:20:00Z gotvyans $
5 * ===========================================================================
6 *
7 * PUBLIC DOMAIN NOTICE
8 * National Center for Biotechnology Information
9 *
10 * This software/database is a "United States Government Work" under the
11 * terms of the United States Copyright Act. It was written as part of
12 * the author's official duties as a United States Government employee and
13 * thus cannot be copyrighted. This software/database is freely available
14 * to the public for use. The National Library of Medicine and the U.S.
15 * Government have not placed any restriction on its use or reproduction.
16 *
17 * Although all reasonable efforts have been taken to ensure the accuracy
18 * and reliability of the software and data, the NLM and the U.S.
19 * Government do not and cannot warrant the performance or results that
20 * may be obtained by using this software or data. The NLM and the U.S.
21 * Government disclaim all warranties, express or implied, including
22 * warranties of performance, merchantability or fitness for any particular
23 * purpose.
24 *
25 * Please cite the author in any work or product based on this material.
26 *
27 * ===========================================================================
28 *
29 * Author: Aaron Ucko, NCBI
30 * Mati Shomrat
31 * Maintainer: Frank Ludwig
32 *
33 * File Description:
34 * new (early 2003) flat-file generator -- representation of features
35 * (mainly of interest to implementors)
36 *
37 */
38 #include <corelib/ncbistd.hpp>
39 #include <corelib/ncbiobj.hpp>
41 #include <objmgr/feat_ci.hpp>
42 #include <objmgr/mapped_feat.hpp>
43 #include <objmgr/util/feature.hpp>
49 
50 
53 
54 class CTrna_ext;
55 
56 // ============================================================================
58  public CFlatItem
59 // ============================================================================
60 {
61 public:
63  void Format(IFormatter& formatter,
64  IFlatTextOStream& text_os) const override {
65  formatter.FormatFeatHeader(*this, text_os);
66  }
67 
68  const CSeq_id& GetId(void) const { return *m_Id; } // for FTable format
69 
70  EItem GetItemType() const override;
71 private:
72  void x_GatherInfo(CBioseqContext& ctx) override;
73 
74  // data
75  CConstRef<CSeq_id> m_Id; // for FTable format
76 };
77 
78 
79 // ============================================================================
81  public CObject
82 // ============================================================================
83 {
84 public:
85  CFlatFeature(const string& key,
86  const CFlatSeqLoc& loc,
87  const CMappedFeat& feat)
88  : m_Key(key), m_Loc(&loc), m_Feat(feat) { }
89 
90  typedef vector<CRef<CFormatQual> > TQuals;
91 
92  const string& GetKey (void) const { return m_Key; }
93  const CFlatSeqLoc& GetLoc (void) const { return *m_Loc; }
94  const TQuals& GetQuals(void) const { return m_Quals; }
95  //const CSeq_feat& GetFeat (void) const { return m_Feat.GetOriginalFeature(); }
96  const CMappedFeat& GetFeat (void) const { return m_Feat; }
97 
98  TQuals& SetQuals(void) { return m_Quals; }
99 
100 private:
101  string m_Key;
105 };
106 
107 
108 // ============================================================================
110  public CFlatItem
111 // ============================================================================
112 {
113 public:
114  CConstRef<CFlatFeature> Format(void) const;
115  void Format(IFormatter& formatter, IFlatTextOStream& text_os) const {
116  formatter.FormatFeature(*this, text_os);
117  }
118  bool operator<(const CFeatureItemBase& f2) const {
119  //return m_Feat.Compare(*f2.m_Feat, GetLoc(), f2.GetLoc()) < 0;
120  return m_Feat < f2.m_Feat;
121  }
122  const CMappedFeat& GetFeat(void) const { return m_Feat; }
123  const CSeq_loc& GetLoc(void) const { return *m_Loc; }
124 
125  virtual string GetKey(void) const {
126  return m_Feat.GetData().GetKey(CSeqFeatData::eVocabulary_genbank);
127  }
128 
129  bool IsSuppressAccession(void) const { return m_SuppressAccession; }
130 
131 protected:
132 
133  // constructor
135  CRef<feature::CFeatTree> ftree, const CSeq_loc* loc = 0,
136  bool suppressAccession = false);
137 
138  virtual void x_AddQuals(CBioseqContext& ctx) = 0;
139  virtual void x_FormatQuals(CFlatFeature& ff) const = 0;
140 
145 };
146 
147 
148 // ============================================================================
150  public CFeatureItemBase
151 // ============================================================================
152 {
153 public:
154  enum EMapped
155  {
159  eMapped_from_prot
160  };
161 
162  // constructors
163  CFeatureItem(const CMappedFeat& feat,
166  const CSeq_loc* loc,
167  EMapped mapped = eMapped_not_mapped,
168  bool suppressAccession = false,
169  CConstRef<CFeatureItem> parentFeatureItem = CConstRef<CFeatureItem>() );
170 
171  virtual ~CFeatureItem() {};
172 
173  // fetaure key (name)
174  string GetKey(void) const override;
175 
176  EItem GetItemType() const override;
177 
178  // mapping
179  bool IsMapped (void) const { return m_Mapped != eMapped_not_mapped; }
180  bool IsMappedFromGenomic(void) const { return m_Mapped == eMapped_from_genomic; }
181  bool IsMappedFromCDNA (void) const { return m_Mapped == eMapped_from_cdna; }
182  bool IsMappedFromProt (void) const { return m_Mapped == eMapped_from_prot; }
183 
184 protected:
186 
187  void x_GatherInfoWithParent(CBioseqContext& ctx, CConstRef<CFeatureItem> parentFeatureItem );
188 
189  void x_GetAssociatedProtInfo( CBioseqContext&, CBioseq_Handle&,
190  const CProt_ref*&, CMappedFeat& protFeat, CConstRef<CSeq_id>& );
191  void x_GetAssociatedProtInfoIdx( CBioseqContext&, CBioseq_Handle&,
192  const CProt_ref*&, CMappedFeat& protFeat, CConstRef<CSeq_id>& );
193  void x_AddQualPartial( CBioseqContext& );
194  void x_AddQualDbXref(
195  CBioseqContext& );
196  void x_AddQualCitation();
197  void x_AddQualExt();
198  void x_AddQualExpInv( CBioseqContext& );
199  void x_AddQualGeneXref( const CGene_ref*, const CConstRef<CSeq_feat>& );
200  void x_AddQualOperon( CBioseqContext&, CSeqFeatData::ESubtype );
201  void x_AddQualsRegulatoryClass( CBioseqContext& ctx, CSeqFeatData::ESubtype subtype );
203 
204  void x_AddQualPseudo( CBioseqContext&, CSeqFeatData::E_Choice,
205  CSeqFeatData::ESubtype, bool );
206  void x_AddQualExceptions( CBioseqContext& );
207  void x_AddQualNote( CConstRef<CSeq_feat> );
208  void x_AddQualOldLocusTag( const CBioseqContext& ctx, CConstRef<CSeq_feat> );
209  void x_AddQualDb( const CGene_ref* );
210  void x_AddQualSeqfeatNote( CBioseqContext & );
211  void x_AddQualTranslation( CBioseq_Handle&, CBioseqContext&, bool );
212  void x_AddQualTranslationTable( const CCdregion&, CBioseqContext& );
213  void x_AddQualCodonStart( const CCdregion&, CBioseqContext& );
214  void x_AddQualCodonStartIdx( const CCdregion&, CBioseqContext&, const int inset );
215  void x_AddQualTranslationException( const CCdregion&, CBioseqContext& );
216  void x_AddQualTranslationExceptionIdx( const CCdregion&, CBioseqContext&, string& tr_ex );
217  void x_AddQualProteinConflict( const CCdregion&, CBioseqContext& );
218  void x_AddQualCodedBy( CBioseqContext& );
219  void x_AddQualProteinId( CBioseqContext&, const CBioseq_Handle&, CConstRef<CSeq_id> );
220  void x_AddQualProtComment( const CBioseq_Handle& );
221  void x_AddQualProtMethod( const CBioseq_Handle& );
222  void x_AddQualProtNote( const CProt_ref*, const CMappedFeat& );
223  void x_AddQualCdsProduct( CBioseqContext&, const CProt_ref* );
224  void x_AddQualProtDesc( const CProt_ref* );
225  void x_AddQualProtActivity( const CProt_ref* );
226  void x_AddQualProtEcNumber( CBioseqContext&, const CProt_ref* );
227  void x_AddQualsGb( CBioseqContext& );
228  bool x_GetPseudo( const CGene_ref* =0, const CSeq_feat* =0 ) const;
229 
230  // qualifier collection
231  void x_AddQualsCdregion(const CMappedFeat& cds, CBioseqContext& ctx,
232  bool pseudo);
233  void x_AddQualsCdregionIdx(const CMappedFeat& cds, CBioseqContext& ctx,
234  bool pseudo);
235  virtual void x_AddQualsRna(const CMappedFeat& feat, CBioseqContext& ctx,
236  bool pseudo);
237  void x_AddQualsExt( const CUser_field& field, const CSeq_feat::TExt& ext );
238  void x_AddQualsExt( const CSeq_feat::TExt& );
239  void x_AddQualsBond( CBioseqContext& );
240  void x_AddQualsSite( CBioseqContext& );
241  void x_AddQualsRegion( CBioseqContext& );
242  void x_AddQualsProt( CBioseqContext&, bool );
243  void x_AddQualsPsecStr( CBioseqContext& );
244  void x_AddQualsNonStd(CBioseqContext& ctx );
245 
246  void x_AddQualsHet( CBioseqContext& ctx );
247  void x_AddQualsVariation( CBioseqContext& ctx );
248 
249  void x_AddQuals( CBioseqContext& ctx, CConstRef<CFeatureItem> parentFeatureItem );
251  void x_AddQualsIdx( CBioseqContext& ctx, CConstRef<CFeatureItem> parentFeatureItem );
253 
254  void x_AddQuals(const CProt_ref& prot);
255  void x_AddProductIdQuals(CBioseq_Handle& prod, EFeatureQualifier slot);
256  void x_AddQualsGene(const CBioseqContext& ctx, const CGene_ref*, CConstRef<CSeq_feat>&,
257  bool from_overlap);
258  void x_AddGoQuals(const CUser_field& field);
259  void x_AddGoQuals(const CUser_object& uo);
260  void x_ImportQuals(CBioseqContext& ctx);
261  void x_AddRptUnitQual(const string& rpt_unit);
262  void x_AddRptTypeQual(const string& rpt_type, bool check_qual_syntax);
263  void x_AddRegulatoryClassQual(const string& regulatory_class, bool check_qual_syntax);
264  void x_AddRecombinationClassQual(const string& recombination_class, bool check_qual_syntax);
265  void x_CleanQuals( const CGene_ref* );
266  const CFlatStringQVal* x_GetStringQual(EFeatureQualifier slot) const;
267  CFlatStringListQVal* x_GetStringListQual(EFeatureQualifier slot) const;
268  CFlatProductNamesQVal * x_GetFlatProductNamesQual(EFeatureQualifier slot) const;
269  // feature table quals
270  typedef vector< CRef<CFormatQual> > TQualVec;
271  void x_AddFTableQuals(CBioseqContext& ctx);
272  bool x_AddFTableGeneQuals(const CSeqFeatData::TGene& gene);
273  void x_AddFTableRnaQuals(const CMappedFeat& feat, CBioseqContext& ctx);
274  void x_AddFTableAnticodon(const CTrna_ext& trna_ext, CBioseqContext& ctx);
275  static string x_SeqIdWriteForTable(const CBioseq& seq, bool suppress_local, bool giOK);
276  void x_AddFTableCdregionQuals(const CMappedFeat& feat, CBioseqContext& ctx);
277  void x_AddFTableProtQuals(const CMappedFeat& prot);
278  void x_AddFTableProtQuals(const CProt_ref& prot_ref);
279  void x_AddFTableRegionQuals(const CSeqFeatData::TRegion& region);
280  void x_AddFTableBondQuals(const CSeqFeatData::TBond& bond);
281  void x_AddFTableSiteQuals(const CSeqFeatData::TSite& site);
282  void x_AddFTablePsecStrQuals(const CSeqFeatData::TPsec_str& psec_str);
283  void x_AddFTablePsecStrQuals(const CSeqFeatData::THet& het);
284  void x_AddFTableNonStdQuals(const CSeqFeatData::TNon_std_residue& res);
285  void x_AddFTableBiosrcQuals(const CBioSource& src);
286  void x_AddFTableDbxref(const CSeq_feat::TDbxref& dbxref);
287  void x_AddFTableExtQuals(const CSeq_feat::TExt& ext);
288  const string kProteinId = "protein_id";
289  const string kTranscriptId = "transcript_id";
290  const string& x_GetFtableNameAlias(const string& name)
291  {
292  if (NStr::Equal(name, "orig_protein_id")) {
293  return kProteinId;
294  } else if (NStr::Equal(name, "orig_transcript_id")) {
295  return kTranscriptId;
296  } else {
297  return name;
298  }
299  }
300  void x_AddFTableQual(const string& name, const string& val = kEmptyStr,
302  {
304  m_FTableQuals.push_back(CRef<CFormatQual>(new CFormatQual(x_GetFtableNameAlias(name), val, style, 0, trim)));
305  }
306  // typdef
311 
312  // qualifiers container
314  m_Quals.AddQual(slot, value);
315  }
316  void x_RemoveQuals(EFeatureQualifier slot) const {
317  m_Quals.RemoveQuals(slot);
318  }
319  bool x_HasQual(EFeatureQualifier slot) const {
320  return m_Quals.HasQual(slot);
321  }
322  /*pair<TQCI, TQCI> x_GetQual(EFeatureQualifier slot) const {
323  return const_cast<const TQuals&>(m_Quals).GetQuals(slot);
324  }*/
326  return const_cast<const TQuals&>(m_Quals).LowerBound(slot);
327  }
328  void x_DropIllegalQuals(void) const;
329  bool x_IsSeqFeatDataFeatureLegal( CSeqFeatData::EQualifier qual );
330  bool x_GetGbValue(
331  const string&,
332  string& ) const;
333  bool x_HasMethodtRNAscanSE(void) const;
334 
335  // format
336  void x_FormatQuals(CFlatFeature& ff) const override;
337  void x_FormatNoteQuals(CFlatFeature& ff) const;
338  void x_FormatQual(EFeatureQualifier slot, const char* name,
339  CFlatFeature::TQuals& qvec, TQualFlags flags = 0) const;
340  void x_FormatNoteQual(EFeatureQualifier slot, const CTempString & name,
341  CFlatFeature::TQuals& qvec, TQualFlags flags = 0) const;
342  void x_FormatGOQualCombined( EFeatureQualifier slot, const CTempString & name,
343  CFlatFeature::TQuals& qvec, TQualFlags flags = 0) const;
344 
345  // data
347  mutable TQuals m_Quals;
350  // bool m_SuppressAccession;
351  mutable string m_Gene;
352  // Note that this holds the gene xref as specified in the original
353  // ASN file. It does NOT hold any genes found by overlap, etc.
355 };
356 
357 // ----------------------------------------------------------------------------
359  const CGene_ref* gene_ref )
360 // ----------------------------------------------------------------------------
361 {
362  if ( ! gene_ref || ! gene_ref->CanGetDb() ) {
363  return;
364  }
365  x_AddQual(eFQ_gene_xref, new CFlatXrefQVal( gene_ref->GetDb() ) );
366 }
367 
368 // ----------------------------------------------------------------------------
370 // ----------------------------------------------------------------------------
371 {
372  if ( ! m_Feat.IsSetCit() ) {
373  return;
374  }
376 }
377 
378 // ----------------------------------------------------------------------------
381 // ----------------------------------------------------------------------------
382 {
383  if (m_Feat.IsSetQual()) {
385  }
386 }
387 
388 // ----------------------------------------------------------------------------
390 // ----------------------------------------------------------------------------
391 {
392  if ( m_Feat.IsSetExt() ) {
394  }
395 }
396 
397 // ============================================================================
399  public CFeatureItemBase
400 // ============================================================================
401 {
402 public:
404 
408  CRef<feature::CFeatTree> ftree, const CSeq_loc* loc = nullptr);
409 
410  void SetObject(const CSerialObject& obj) { x_SetObject(obj); }
411 
412  bool WasDesc(void) const { return m_WasDesc; }
413  const CBioSource& GetSource(void) const {
414  return m_Feat.GetData().GetBiosrc();
415  }
416  string GetKey(void) const override { return "source"; }
417 
418  bool IsFocus (void) const { return m_IsFocus; }
419  bool IsSynthetic(void) const { return m_IsSynthetic; }
420  void Subtract(const CSourceFeatureItem& other, CScope& scope);
421 
422  void SetLoc(const CSeq_loc& loc);
423 
424  EItem GetItemType() const override;
425 
426 private:
430 
431  void x_GatherInfo(CBioseqContext& ctx) override;
432 
433  void x_AddQuals(CBioseqContext& ctx) override;
434  void x_AddQuals(const CBioSource& src, CBioseqContext& ctx) const;
435  void x_AddQuals(const COrg_ref& org, CBioseqContext& ctx) const;
436  void x_AddPcrPrimersQuals(const CBioSource& src, CBioseqContext& ctx) const;
437 
438  // XXX - massage slot as necessary and perhaps sanity-check value's type
439  void x_AddQual (ESourceQualifier slot, const IFlatQVal* value) const {
440  m_Quals.AddQual(slot, value);
441  }
442 
443  void x_FormatQuals(CFlatFeature& ff) const override;
444  void x_FormatGBNoteQuals(CFlatFeature& ff) const;
445  void x_FormatNoteQuals(CFlatFeature& ff) const;
446  void x_FormatQual(ESourceQualifier slot, const CTempString& name,
447  CFlatFeature::TQuals& qvec, TQualFlags flags = 0) const;
448  void x_FormatNoteQual(ESourceQualifier slot, const char* name,
449  CFlatFeature::TQuals& qvec, TQualFlags flags = 0) const {
450  x_FormatQual(slot, name, qvec, flags | IFlatQVal::fIsNote);
451  }
452 
453  bool m_WasDesc;
454  mutable TQuals m_Quals;
455  bool m_IsFocus;
458 };
459 
460 
463 
464 #endif /* OBJTOOLS_FORMAT_ITEMS___FLAT_FEATURE__HPP */
CBioseq_Handle –.
CCdregion –.
Definition: Cdregion.hpp:66
CConstRef< CSeq_id > m_Id
void Format(IFormatter &formatter, IFlatTextOStream &text_os) const override
const CSeq_id & GetId(void) const
CRef< feature::CFeatTree > m_Feat_Tree
bool operator<(const CFeatureItemBase &f2) const
virtual void x_AddQuals(CBioseqContext &ctx)=0
virtual string GetKey(void) const
const CMappedFeat & GetFeat(void) const
const CSeq_loc & GetLoc(void) const
bool IsSuppressAccession(void) const
virtual void x_FormatQuals(CFlatFeature &ff) const =0
CConstRef< CSeq_loc > m_Loc
void Format(IFormatter &formatter, IFlatTextOStream &text_os) const
CMappedFeat m_Feat
void x_AddQual(EFeatureQualifier slot, const IFlatQVal *value)
bool IsMappedFromProt(void) const
void x_AddQualDb(const CGene_ref *)
void x_AddQualsExt(const CUser_field &field, const CSeq_feat::TExt &ext)
vector< CRef< CFormatQual > > TQualVec
TQuals::iterator TQI
void x_AddFTableQual(const string &name, const string &val=kEmptyStr, CFormatQual::ETrim trim=CFormatQual::eTrim_Normal)
CConstRef< CGene_ref > m_GeneRef
bool IsMappedFromGenomic(void) const
EMapped m_Mapped
void x_RemoveQuals(EFeatureQualifier slot) const
virtual ~CFeatureItem()
TQualVec m_FTableQuals
TQuals::const_iterator TQCI
IFlatQVal::TFlags TQualFlags
void x_AddQualsGb(CBioseqContext &)
CQualContainer< EFeatureQualifier > TQuals
void x_AddQuals(CBioseqContext &ctx) override
void x_AddQualsIdx(CBioseqContext &ctx)
CGene_ref::TSyn TGeneSyn
const string & x_GetFtableNameAlias(const string &name)
void x_AddQuals(const CProt_ref &prot)
CSeqFeatData::ESubtype m_Type
void x_ImportQuals(CBioseqContext &ctx)
bool IsMappedFromCDNA(void) const
void x_AddQualsRecombinationClass(CBioseqContext &ctx, CSeqFeatData::ESubtype subtype)
TQCI x_GetQual(EFeatureQualifier slot) const
void x_AddQualExt()
bool IsMapped(void) const
void x_AddQualCitation()
bool x_HasQual(EFeatureQualifier slot) const
TQuals & SetQuals(void)
const CFlatSeqLoc & GetLoc(void) const
const TQuals & GetQuals(void) const
vector< CRef< CFormatQual > > TQuals
const CMappedFeat & GetFeat(void) const
CFlatFeature(const string &key, const CFlatSeqLoc &loc, const CMappedFeat &feat)
const string & GetKey(void) const
CConstRef< CFlatSeqLoc > m_Loc
CMappedFeat m_Feat
void x_SetObject(const CSerialObject &obj)
Definition: item_base.hpp:160
virtual void Format(IFormatter &formatter, IFlatTextOStream &text_os) const =0
virtual void x_GatherInfo(CBioseqContext &)
Definition: item_base.hpp:71
CHeterogen –.
Definition: Heterogen.hpp:66
CMappedFeat –.
Definition: mapped_feat.hpp:59
CObject –.
Definition: ncbiobj.hpp:180
TQualMMap::const_iterator const_iterator
Definition: qualifiers.hpp:185
CScope –.
Definition: scope.hpp:92
EQualifier
List of available qualifiers for feature keys.
namespace ncbi::objects::
Definition: Seq_feat.hpp:58
Base class for all serializable objects.
Definition: serialbase.hpp:150
const CBioSource & GetSource(void) const
TQuals::const_iterator TQCI
void x_AddQual(ESourceQualifier slot, const IFlatQVal *value) const
bool IsSynthetic(void) const
bool WasDesc(void) const
CQualContainer< ESourceQualifier > TQuals
void SetObject(const CSerialObject &obj)
IFlatQVal::TFlags TQualFlags
bool IsFocus(void) const
CRange< TSeqPos > TRange
string GetKey(void) const override
void x_FormatNoteQual(ESourceQualifier slot, const char *name, CFlatFeature::TQuals &qvec, TQualFlags flags=0) const
CRef< feature::CFeatTree > m_Feat_Tree
CTempString implements a light-weight string on top of a storage buffer whose lifetime management is ...
Definition: tempstr.hpp:65
virtual EItem GetItemType(void) const =0
virtual void FormatFeature(const CFeatureItemBase &feat, IFlatTextOStream &text_os)=0
virtual void FormatFeatHeader(const CFeatHeaderItem &fh, IFlatTextOStream &text_os)=0
Include a standard set of the NCBI C++ Toolkit most basic headers.
static uch flags
ESourceQualifier
EFeatureQualifier
@ eFQ_gene_xref
@ eFQ_citation
CS_CONTEXT * ctx
Definition: t0006.c:12
const CPub_set & GetCit(void) const
const CUser_object & GetExt(void) const
bool IsSetQual(void) const
bool IsSetExt(void) const
bool IsSetCit(void) const
#define END_NCBI_SCOPE
End previously defined NCBI scope.
Definition: ncbistl.hpp:103
#define END_SCOPE(ns)
End the previously defined scope.
Definition: ncbistl.hpp:75
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
Definition: ncbistl.hpp:100
#define BEGIN_SCOPE(ns)
Define a new scope.
Definition: ncbistl.hpp:72
#define kEmptyStr
Definition: ncbistr.hpp:123
static bool Equal(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2, ECase use_case=eCase)
Test for equality of a substring with another string.
Definition: ncbistr.hpp:5384
#define NCBI_FORMAT_EXPORT
Definition: ncbi_export.h:496
bool CanGetDb(void) const
Check if it is safe to call GetDb method.
Definition: Gene_ref_.hpp:737
const TDb & GetDb(void) const
Get the Db member data.
Definition: Gene_ref_.hpp:743
list< string > TSyn
Definition: Gene_ref_.hpp:102
vector< CRef< CDbtag > > TDbxref
Definition: Seq_feat_.hpp:123
EPsec_str
protein secondary structure
E_Choice
Choice variants.
range(_Ty, _Ty) -> range< _Ty >
const struct ncbi::grid::netcache::search::fields::KEY key
const GenericPointer< typename T::ValueType > T2 value
Definition: pointer.h:1227
ESERV_Site site
Portable reference counted smart and weak pointers using CWeakRef, CRef, CObject and CObjectEx.
Modified on Sun Apr 21 03:42:08 2024 by modify_doxy.py rev. 669887