⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flat_feature.hpp

📁 ncbi源码
💻 HPP
字号:
/* * =========================================================================== * PRODUCTION $Log: flat_feature.hpp,v $ * PRODUCTION Revision 1000.0  2003/10/29 20:58:49  gouriano * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.6 * PRODUCTION * =========================================================================== */#ifndef OBJECTS_FLAT___FLAT_FEATURE__HPP#define OBJECTS_FLAT___FLAT_FEATURE__HPP/*  $Id: flat_feature.hpp,v 1000.0 2003/10/29 20:58:49 gouriano Exp $* ===========================================================================**                            PUBLIC DOMAIN NOTICE*               National Center for Biotechnology Information**  This software/database is a "United States Government Work" under the*  terms of the United States Copyright Act.  It was written as part of*  the author's official duties as a United States Government employee and*  thus cannot be copyrighted.  This software/database is freely available*  to the public for use. The National Library of Medicine and the U.S.*  Government have not placed any restriction on its use or reproduction.**  Although all reasonable efforts have been taken to ensure the accuracy*  and reliability of the software and data, the NLM and the U.S.*  Government do not and cannot warrant the performance or results that*  may be obtained by using this software or data. The NLM and the U.S.*  Government disclaim all warranties, express or implied, including*  warranties of performance, merchantability or fitness for any particular*  purpose.**  Please cite the author in any work or product based on this material.** ===========================================================================** Author:  Aaron Ucko, NCBI** File Description:*   new (early 2003) flat-file generator -- representation of features*   (mainly of interest to implementors)**/#include <objtools/flat/flat_formatter.hpp>#include <objtools/flat/flat_qual_slots.hpp>#include <objects/seqfeat/SeqFeatData.hpp>#include <objects/seqfeat/Seq_feat.hpp>#include <objmgr/feat_ci.hpp>BEGIN_NCBI_SCOPEBEGIN_SCOPE(objects)// low-level formatted qualifierclass CFlatQual : public CObject{public:    enum EStyle {        eEmpty,   // /name [value ignored]        eQuoted,  // /name="value"        eUnquoted // /name=value    };    CFlatQual(const string& name, const string& value, EStyle style = eQuoted)        : m_Name(name), m_Value(value), m_Style(style)        { }    const string& GetName (void) const { return m_Name;  }    const string& GetValue(void) const { return m_Value; }    EStyle        GetStyle(void) const { return m_Style; }private:    string m_Name, m_Value;    EStyle m_Style;};typedef vector<CRef<CFlatQual> > TFlatQuals;// abstract qualifier value -- see flat_quals.hpp for derived classesclass IFlatQV : public CObject{public:    enum EFlags {        fIsNote   = 0x1,        fIsSource = 0x2    };    typedef int TFlags; // binary OR of EFlags    virtual void Format(TFlatQuals& quals, const string& name,                        CFlatContext& ctx, TFlags flags = 0) const = 0;protected:    static void x_AddFQ(TFlatQuals& q, const string& n, const string& v,                        CFlatQual::EStyle st = CFlatQual::eQuoted)        { q.push_back(CRef<CFlatQual>(new CFlatQual(n, v, st))); }};class CFlatFeature : public CObject{public:    CFlatFeature(const string& key, const CFlatLoc& loc, const CSeq_feat& feat)        : m_Key(key), m_Loc(&loc), m_Feat(&feat) { }    typedef vector<CRef<CFlatQual> > TQuals;    const string&    GetKey  (void) const { return m_Key;   }    const CFlatLoc&  GetLoc  (void) const { return *m_Loc;  }    const TQuals&    GetQuals(void) const { return m_Quals; }    const CSeq_feat& GetFeat (void) const { return *m_Feat; }    TQuals& SetQuals(void) { return m_Quals; }private:    string               m_Key;    CConstRef<CFlatLoc>  m_Loc;    TQuals               m_Quals;    CConstRef<CSeq_feat> m_Feat;};class IFlattishFeature : public IFlatItem{public:    CRef<CFlatFeature> Format(void) const;    void Format(IFlatFormatter& f) const { f.FormatFeature(*this); }    bool operator<(const IFlattishFeature& f2) const         { return m_Feat->Compare(*f2.m_Feat, *m_Loc, *f2.m_Loc) < 0; }    string GetKey(void) const        { return m_Feat->GetData().GetKey(CSeqFeatData::eVocabulary_genbank); }    const CSeq_loc&  GetLoc(void)  const { return *m_Loc; }    const CSeq_feat& GetFeat(void) const { return *m_Feat; }protected:    IFlattishFeature(const CSeq_feat& feat, CFlatContext& ctx,                     const CSeq_loc* loc = 0)        : m_Feat(&feat), m_Context(&ctx),          m_Loc(loc ? loc : &feat.GetLocation())        { }    virtual void x_AddQuals   (void) const = 0;    virtual void x_FormatQuals(void) const = 0;    CConstRef<CSeq_feat>        m_Feat;    mutable CRef<CFlatContext>  m_Context;    mutable CConstRef<CSeq_loc> m_Loc;    mutable CRef<CFlatFeature>  m_FF; ///< populated on demand then cached here};class CFlattishFeature : public IFlattishFeature{public:    CFlattishFeature(const CSeq_feat& feat, CFlatContext& ctx,                     const CSeq_loc* loc = 0, bool is_product = false)        : IFlattishFeature(feat, ctx, loc), m_IsProduct(is_product)        { }    CFlattishFeature(const CMappedFeat& feat, CFlatContext& ctx,                     const CSeq_loc* loc = 0, bool is_product = false)        : IFlattishFeature(feat.GetOriginalFeature(), ctx,                           loc ? loc : &feat.GetLocation()),          m_IsProduct(is_product)        { }private:    void x_AddQuals(void) const;    void x_AddQuals(const CGene_ref& gene) const;    void x_AddQuals(const CCdregion& cds)  const;    void x_AddQuals(const CProt_ref& prot) const;    // ...    // XXX - massage slot as necessary and perhaps sanity-check value's type    void x_AddQual(EFeatureQualifier slot, const IFlatQV* value) const        { m_Quals.insert(TQuals::value_type(slot,CConstRef<IFlatQV>(value))); }    void x_ImportQuals(const CSeq_feat::TQual& quals) const;    void x_FormatQuals   (void) const;    void x_FormatQual    (EFeatureQualifier slot, const string& name,                          IFlatQV::TFlags flags = 0) const;    void x_FormatNoteQual(EFeatureQualifier slot, const string& name,                          IFlatQV::TFlags flags = 0) const        { x_FormatQual(slot, name, flags | IFlatQV::fIsNote); }    typedef multimap<EFeatureQualifier, CConstRef<IFlatQV> > TQuals;    mutable CSeqFeatData::ESubtype m_Type;    mutable TQuals                 m_Quals;    bool                           m_IsProduct;};class CFlattishSourceFeature : public IFlattishFeature{public:    CFlattishSourceFeature(const CSeq_feat& feat, CFlatContext& ctx,                           const CSeq_loc* loc = 0)        : IFlattishFeature(feat, ctx, loc), m_WasDesc(false)        { }    CFlattishSourceFeature(const CMappedFeat& feat, CFlatContext& ctx,                           const CSeq_loc* loc = 0)        : IFlattishFeature(feat.GetOriginalFeature(), ctx,                           loc ? loc : &feat.GetLocation()),          m_WasDesc(false)        { }    CFlattishSourceFeature(const CBioSource& src, CFlatContext& ctx);    CFlattishSourceFeature(const COrg_ref& org,   CFlatContext& ctx);private:    void x_AddQuals(void)                  const;    void x_AddQuals(const CBioSource& src) const;    void x_AddQuals(const COrg_ref&   org) const;    // XXX - massage slot as necessary and perhaps sanity-check value's type    void x_AddQual (ESourceQualifier slot, const IFlatQV* value) const        { m_Quals.insert(TQuals::value_type(slot,CConstRef<IFlatQV>(value))); }    void x_FormatQuals   (void) const;    void x_FormatQual    (ESourceQualifier slot, const string& name,                          IFlatQV::TFlags flags = 0) const;    void x_FormatNoteQual(ESourceQualifier slot, const string& name,                          IFlatQV::TFlags flags = 0) const        { x_FormatQual(slot, name, flags | IFlatQV::fIsNote); }    typedef multimap<ESourceQualifier, CConstRef<IFlatQV> > TQuals;    bool           m_WasDesc;    mutable TQuals m_Quals;};/////////////////////////////////////////////////////////////////////////////// INLINE METHODSinlineCFlattishSourceFeature::CFlattishSourceFeature(const CBioSource& src,                                               CFlatContext& ctx)    : IFlattishFeature(*new CSeq_feat, ctx, &ctx.GetLocation()),      m_WasDesc(true){    CSeq_feat& feat = const_cast<CSeq_feat&>(*m_Feat);    feat.SetData().SetBiosrc(const_cast<CBioSource&>(src));    feat.SetLocation().Assign(*m_Loc);}inlineCFlattishSourceFeature::CFlattishSourceFeature(const COrg_ref& org,                                               CFlatContext& ctx)    : IFlattishFeature(*new CSeq_feat, ctx, &ctx.GetLocation()),      m_WasDesc(true){    CSeq_feat& feat = const_cast<CSeq_feat&>(*m_Feat);    feat.SetData().SetOrg(const_cast<COrg_ref&>(org));    feat.SetLocation().Assign(*m_Loc);}inlinevoid CFlattishFeature::x_FormatQual(EFeatureQualifier slot, const string& name,                                    IFlatQV::TFlags flags) const{    typedef TQuals::const_iterator TQCI;    pair<TQCI, TQCI> range        = const_cast<const TQuals&>(m_Quals).equal_range(slot);    for (TQCI it = range.first;  it != range.second;  ++it) {        it->second->Format(m_FF->SetQuals(), name, *m_Context, flags);    }}inlinevoid CFlattishSourceFeature::x_FormatQual(ESourceQualifier slot,                                          const string& name,                                          IFlatQV::TFlags flags) const{    typedef TQuals::const_iterator TQCI;    pair<TQCI, TQCI> range        = const_cast<const TQuals&>(m_Quals).equal_range(slot);    for (TQCI it = range.first;  it != range.second;  ++it) {        it->second->Format(m_FF->SetQuals(), name, *m_Context,                           flags | IFlatQV::fIsSource);    }}END_SCOPE(objects)END_NCBI_SCOPE/** ===========================================================================** $Log: flat_feature.hpp,v $* Revision 1000.0  2003/10/29 20:58:49  gouriano* PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.6** Revision 1.6  2003/10/17 20:57:53  ucko* IFlattishFeature: also expose the underlying Seq-feat to permit* additional filtering prior to actual formatting.** Revision 1.5  2003/10/08 21:10:47  ucko* Add a couple of accessors to IFlattishFeature for the GFF/GTF formatter.** Revision 1.4  2003/06/02 16:01:39  dicuccio* Rearranged include/objects/ subtree.  This includes the following shifts:*     - include/objects/alnmgr --> include/objtools/alnmgr*     - include/objects/cddalignview --> include/objtools/cddalignview*     - include/objects/flat --> include/objtools/flat*     - include/objects/objmgr/ --> include/objmgr/*     - include/objects/util/ --> include/objmgr/util/*     - include/objects/validator --> include/objtools/validator** Revision 1.3  2003/04/10 20:08:22  ucko* Arrange to pass the item as an argument to IFlatTextOStream::AddParagraph** Revision 1.2  2003/03/21 18:47:47  ucko* Turn most structs into (accessor-requiring) classes; replace some* formerly copied fields with pointers to the original data.** Revision 1.1  2003/03/10 16:39:08  ucko* Initial check-in of new flat-file generator*** ===========================================================================*/#endif  /* OBJECTS_FLAT___FLAT_FEATURE__HPP */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -