feat_ci.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:20k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: feat_ci.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:23:14  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.32
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: feat_ci.cpp,v 1000.2 2004/06/01 19:23:14 gouriano Exp $
  10. * ===========================================================================
  11. *
  12. *                            PUBLIC DOMAIN NOTICE
  13. *               National Center for Biotechnology Information
  14. *
  15. *  This software/database is a "United States Government Work" under the
  16. *  terms of the United States Copyright Act.  It was written as part of
  17. *  the author's official duties as a United States Government employee and
  18. *  thus cannot be copyrighted.  This software/database is freely available
  19. *  to the public for use. The National Library of Medicine and the U.S.
  20. *  Government have not placed any restriction on its use or reproduction.
  21. *
  22. *  Although all reasonable efforts have been taken to ensure the accuracy
  23. *  and reliability of the software and data, the NLM and the U.S.
  24. *  Government do not and cannot warrant the performance or results that
  25. *  may be obtained by using this software or data. The NLM and the U.S.
  26. *  Government disclaim all warranties, express or implied, including
  27. *  warranties of performance, merchantability or fitness for any particular
  28. *  purpose.
  29. *
  30. *  Please cite the author in any work or product based on this material.
  31. *
  32. * ===========================================================================
  33. *
  34. * Author: Aleksey Grichenko, Eugene Vasilchenko
  35. *
  36. * File Description:
  37. *   Object manager iterators
  38. *
  39. */
  40. #include <ncbi_pch.hpp>
  41. #include <objmgr/feat_ci.hpp>
  42. #include <objmgr/bioseq_handle.hpp>
  43. #include <objmgr/seq_entry_handle.hpp>
  44. #include <objmgr/seq_annot_handle.hpp>
  45. #include <objmgr/impl/annot_object.hpp>
  46. #include <objmgr/impl/seq_annot_info.hpp>
  47. #include <objmgr/impl/snp_annot_info.hpp>
  48. #include <objects/seqfeat/Gb_qual.hpp>
  49. #include <objects/seqfeat/SeqFeatXref.hpp>
  50. #include <objects/general/Dbtag.hpp>
  51. #include <objects/seqloc/Seq_id.hpp>
  52. #include <objects/seqloc/Na_strand.hpp>
  53. #include <objects/seqloc/Seq_loc.hpp>
  54. #include <objects/seqloc/Seq_point.hpp>
  55. #include <objects/seqloc/Seq_interval.hpp>
  56. BEGIN_NCBI_SCOPE
  57. BEGIN_SCOPE(objects)
  58. CFeat_CI::CFeat_CI(void)
  59. {
  60. }
  61. CFeat_CI::CFeat_CI(const CFeat_CI& iter)
  62.     : CAnnotTypes_CI(iter)
  63. {
  64.     Update();
  65. }
  66. CFeat_CI::~CFeat_CI(void)
  67. {
  68. }
  69. CFeat_CI& CFeat_CI::operator= (const CFeat_CI& iter)
  70. {
  71.     CAnnotTypes_CI::operator=(iter);
  72.     Update();
  73.     return *this;
  74. }
  75. CFeat_CI::CFeat_CI(const CBioseq_Handle& bioseq,
  76.                    TSeqPos start, TSeqPos stop,
  77.                    TFeatType feat_type,
  78.                    SAnnotSelector::EOverlapType overlap_type,
  79.                    SAnnotSelector::EResolveMethod resolve,
  80.                    EFeat_Location loc_type)
  81.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Ftable,
  82.                      bioseq, start, stop,
  83.                      SAnnotSelector(feat_type)
  84.                      .SetByProduct(loc_type == e_Product)
  85.                      .SetOverlapType(overlap_type)
  86.                      .SetResolveMethod(resolve))
  87. {
  88.     Update();
  89. }
  90. CFeat_CI::CFeat_CI(const CBioseq_Handle& bioseq,
  91.                    TSeqPos start, TSeqPos stop,
  92.                    TFeatType feat_type,
  93.                    SAnnotSelector::EOverlapType overlap_type,
  94.                    SAnnotSelector::EResolveMethod resolve,
  95.                    EFeat_Location loc_type,
  96.                    const CSeq_entry_Handle& limitEntry)
  97.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Ftable,
  98.                      bioseq, start, stop,
  99.                      SAnnotSelector(feat_type)
  100.                      .SetByProduct(loc_type == e_Product)
  101.                      .SetOverlapType(overlap_type)
  102.                      .SetResolveMethod(resolve)
  103.                      .SetLimitSeqEntry(limitEntry))
  104. {
  105.     Update();
  106. }
  107. CFeat_CI::CFeat_CI(const CBioseq_Handle& bioseq,
  108.                    TSeqPos start, TSeqPos stop,
  109.                    TFeatType feat_type,
  110.                    SAnnotSelector::EOverlapType overlap_type,
  111.                    SAnnotSelector::EResolveMethod resolve,
  112.                    EFeat_Location loc_type,
  113.                    const CSeq_entry* limitEntry)
  114.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Ftable,
  115.                      bioseq, start, stop,
  116.                      SAnnotSelector(feat_type)
  117.                      .SetByProduct(loc_type == e_Product)
  118.                      .SetOverlapType(overlap_type)
  119.                      .SetResolveMethod(resolve)
  120.                      .SetLimitSeqEntry(limitEntry))
  121. {
  122.     Update();
  123. }
  124. CFeat_CI::CFeat_CI(CScope& scope,
  125.                    const CSeq_loc& loc,
  126.                    TFeatType feat_type,
  127.                    SAnnotSelector::EOverlapType overlap_type,
  128.                    SAnnotSelector::EResolveMethod resolve,
  129.                    EFeat_Location loc_type)
  130.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Ftable,
  131.                      scope, loc,
  132.                      SAnnotSelector(feat_type)
  133.                      .SetByProduct(loc_type == e_Product)
  134.                      .SetOverlapType(overlap_type)
  135.                      .SetResolveMethod(resolve))
  136. {
  137.     Update();
  138. }
  139. CFeat_CI::CFeat_CI(CScope& scope,
  140.                    const CSeq_loc& loc)
  141.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Ftable,
  142.                      scope, loc,
  143.                      SAnnotSelector::eOverlap_Intervals,
  144.                      SAnnotSelector::eResolve_TSE)
  145. {
  146.     Update();
  147. }
  148. CFeat_CI::CFeat_CI(const CBioseq_Handle& bioseq,
  149.                    TSeqPos start, TSeqPos stop)
  150.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Ftable,
  151.                      bioseq, start, stop,
  152.                      SAnnotSelector::eOverlap_Intervals,
  153.                      SAnnotSelector::eResolve_TSE)
  154. {
  155.     Update();
  156. }
  157. CFeat_CI::CFeat_CI(CScope& scope,
  158.                    const CSeq_loc& loc,
  159.                    const SAnnotSelector& sel)
  160.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Ftable,
  161.                      scope, loc,
  162.                      sel)
  163. {
  164.     Update();
  165. }
  166. CFeat_CI::CFeat_CI(const CBioseq_Handle& bioseq,
  167.                    TSeqPos start, TSeqPos stop,
  168.                    const SAnnotSelector& sel)
  169.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Ftable,
  170.                      bioseq, start, stop,
  171.                      sel)
  172. {
  173.     Update();
  174. }
  175. CFeat_CI::CFeat_CI(const CSeq_annot_Handle& annot)
  176.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Ftable,
  177.                      annot)
  178. {
  179.     Update();
  180. }
  181. CFeat_CI::CFeat_CI(const CSeq_annot_Handle& annot,
  182.                    const SAnnotSelector& sel)
  183.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Ftable,
  184.                      annot,
  185.                      sel)
  186. {
  187.     Update();
  188. }
  189. CFeat_CI::CFeat_CI(const CSeq_entry_Handle& entry)
  190.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Ftable,
  191.                      entry)
  192. {
  193.     Update();
  194. }
  195. CFeat_CI::CFeat_CI(const CSeq_entry_Handle& entry,
  196.                    const SAnnotSelector& sel)
  197.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Ftable,
  198.                      entry,
  199.                      sel)
  200. {
  201.     Update();
  202. }
  203. CFeat_CI::CFeat_CI(CScope& scope, const CSeq_annot& annot)
  204.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Ftable,
  205.                      scope.GetSeq_annotHandle(annot))
  206. {
  207.     Update();
  208. }
  209. CFeat_CI::CFeat_CI(CScope& scope, const CSeq_annot& annot,
  210.                    const SAnnotSelector& sel)
  211.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Ftable,
  212.                      scope.GetSeq_annotHandle(annot),
  213.                      sel)
  214. {
  215.     Update();
  216. }
  217. CFeat_CI::CFeat_CI(CScope& scope, const CSeq_entry& entry)
  218.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Ftable,
  219.                      scope.GetSeq_entryHandle(entry))
  220. {
  221.     Update();
  222. }
  223. CFeat_CI::CFeat_CI(CScope& scope, const CSeq_entry& entry,
  224.                    const SAnnotSelector& sel)
  225.     : CAnnotTypes_CI(CSeq_annot::C_Data::e_Ftable,
  226.                      scope.GetSeq_entryHandle(entry),
  227.                      sel)
  228. {
  229.     Update();
  230. }
  231. CMappedFeat::CMappedFeat(void)
  232. {
  233. }
  234. CMappedFeat::CMappedFeat(const CMappedFeat& feat)
  235. {
  236.     *this = feat;
  237. }
  238. CMappedFeat& CMappedFeat::operator=(const CMappedFeat& feat)
  239. {
  240.     if ( this != &feat ) {
  241.         m_Collector = feat.m_Collector;
  242.         m_FeatRef = feat.m_FeatRef;
  243.         m_OriginalSeq_feat = feat.m_OriginalSeq_feat;
  244.         m_MappedSeq_feat = feat.m_MappedSeq_feat;
  245.         m_MappedSeq_loc = feat.m_MappedSeq_loc;
  246.     }
  247.     return *this;
  248. }
  249. CMappedFeat::~CMappedFeat(void)
  250. {
  251. }
  252. CSeq_feat_Handle CMappedFeat::GetSeq_feat_Handle(void) const
  253. {
  254.     if ( m_FeatRef->IsSNPFeat() ) {
  255.         return CSeq_feat_Handle(m_Collector->GetScope(),
  256.             m_FeatRef->GetSeq_annot_SNP_Info(),
  257.             m_FeatRef->GetAnnotObjectIndex());
  258.     }
  259.     return CSeq_feat_Handle(m_Collector->GetScope(),
  260.         m_FeatRef->GetSeq_annot_Info(),
  261.         m_FeatRef->GetAnnotObjectIndex());
  262. }
  263. CSeq_annot_Handle CMappedFeat::GetAnnot(void) const
  264. {
  265.     return CSeq_annot_Handle(m_Collector->GetScope(),
  266.         m_FeatRef->GetSeq_annot_Info());
  267. }
  268. const CSeq_annot& CMappedFeat::GetSeq_annot(void) const
  269. {
  270.     ERR_POST_ONCE(Warning<<
  271.                   "CMappedFeat::GetSeq_annot() is deprecated, "
  272.                   "use GetAnnot().");
  273.     return *m_FeatRef->GetSeq_annot_Info().GetCompleteSeq_annot();
  274. }
  275. void CMappedFeat::Reset(void)
  276. {
  277.     m_Collector.Reset();
  278.     m_OriginalSeq_feat.Reset();
  279.     m_MappedSeq_feat.Reset();
  280.     m_MappedSeq_loc.Reset();
  281. }
  282. CMappedFeat& CMappedFeat::Set(CAnnot_Collector& collector,
  283.                               const TIterator& annot)
  284. {
  285.     m_Collector.Reset(&collector);
  286.     _ASSERT(annot->IsFeat());
  287.     m_FeatRef = annot;
  288.     m_OriginalSeq_feat.Reset();
  289.     m_MappedSeq_feat.Reset();
  290.     m_MappedSeq_loc.Reset();
  291.     return *this;
  292. }
  293. const CSeq_feat& CMappedFeat::x_MakeOriginalFeature(void) const
  294. {
  295.     if ( m_FeatRef->IsSNPFeat() ) {
  296.         _ASSERT(!m_OriginalSeq_feat);
  297.         const CSeq_annot_SNP_Info& snp_annot =
  298.             m_FeatRef->GetSeq_annot_SNP_Info();
  299.         const SSNP_Info& snp_info =
  300.             snp_annot.GetSNP_Info(m_FeatRef->GetAnnotObjectIndex());
  301.         CRef<CSeq_feat> orig_feat;
  302.         m_Collector->m_CreatedOriginalSeq_feat.AtomicReleaseTo(orig_feat);
  303.         CRef<CSeq_point> created_point;
  304.         m_Collector->m_CreatedOriginalSeq_point.AtomicReleaseTo(created_point);
  305.         CRef<CSeq_interval> created_interval;
  306.         m_Collector->m_CreatedOriginalSeq_interval.
  307.             AtomicReleaseTo(created_interval);
  308.         snp_info.UpdateSeq_feat(orig_feat,
  309.                                 created_point,
  310.                                 created_interval,
  311.                                 snp_annot);
  312.         m_OriginalSeq_feat = orig_feat;
  313.         m_Collector->m_CreatedOriginalSeq_feat.AtomicResetFrom(orig_feat);
  314.         m_Collector->m_CreatedOriginalSeq_point.AtomicResetFrom(created_point);
  315.         m_Collector->m_CreatedOriginalSeq_interval.
  316.             AtomicResetFrom(created_interval);
  317.     }
  318.     else {
  319.         m_OriginalSeq_feat.Reset(&m_FeatRef->GetFeat());
  320.     }
  321.     return *m_OriginalSeq_feat;
  322. }
  323. const CSeq_loc& CMappedFeat::x_MakeMappedLocation(void) const
  324. {
  325.     _ASSERT(!m_MappedSeq_loc);
  326.     if ( m_FeatRef->MappedSeq_locNeedsUpdate() ) {
  327.         _ASSERT(!m_MappedSeq_feat);
  328.         // need to covert Seq_id to Seq_loc
  329.         // clear references to mapped location from mapped feature
  330.         // Can not use m_MappedSeq_feat since it's a const-ref
  331.         CRef<CSeq_feat> mapped_feat;
  332.         m_Collector->m_CreatedMappedSeq_feat.AtomicReleaseTo(mapped_feat);
  333.         if ( mapped_feat ) {
  334.             if ( !mapped_feat->ReferencedOnlyOnce() ) {
  335.                 mapped_feat.Reset();
  336.             }
  337.             else {
  338.                 // hack with null pointer as ResetLocation doesn't reset CRef<>
  339.                 CSeq_loc* loc = 0;
  340.                 mapped_feat->SetLocation(*loc);
  341.                 mapped_feat->ResetProduct();
  342.             }
  343.         }
  344.         m_MappedSeq_feat = mapped_feat;
  345.         m_Collector->m_CreatedMappedSeq_feat.AtomicResetFrom(mapped_feat);
  346.         CRef<CSeq_loc> mapped_loc;
  347.         m_Collector->m_CreatedMappedSeq_loc.AtomicReleaseTo(mapped_loc);
  348.         CRef<CSeq_point> created_point;
  349.         m_Collector->m_CreatedMappedSeq_point.AtomicReleaseTo(created_point);
  350.         CRef<CSeq_interval> created_interval;
  351.         m_Collector->m_CreatedMappedSeq_interval.
  352.             AtomicReleaseTo(created_interval);
  353.         m_FeatRef->UpdateMappedSeq_loc(mapped_loc,
  354.                                        created_point,
  355.                                        created_interval);
  356.         m_MappedSeq_loc = mapped_loc;
  357.         m_Collector->m_CreatedMappedSeq_loc.AtomicResetFrom(mapped_loc);
  358.         m_Collector->m_CreatedMappedSeq_point.AtomicResetFrom(created_point);
  359.         m_Collector->m_CreatedMappedSeq_interval.
  360.             AtomicResetFrom(created_interval);
  361.     }
  362.     else if ( m_FeatRef->IsMapped() ) {
  363.         _ASSERT(!m_MappedSeq_feat);
  364.         m_MappedSeq_loc.Reset(&m_FeatRef->GetMappedSeq_loc());
  365.     }
  366.     return *m_MappedSeq_loc;
  367. }
  368. const CSeq_feat& CMappedFeat::x_MakeMappedFeature(void) const
  369. {
  370.     if ( m_FeatRef->IsMapped() ) {
  371.         _ASSERT(!m_MappedSeq_feat);
  372.         // some Seq-loc object is mapped
  373.         CRef<CSeq_feat> mapped_feat;
  374.         m_Collector->m_CreatedMappedSeq_feat.AtomicReleaseTo(mapped_feat);
  375.         if ( !mapped_feat || !mapped_feat->ReferencedOnlyOnce() ) {
  376.             mapped_feat.Reset(new CSeq_feat);
  377.         }
  378.         CSeq_feat& dst = *mapped_feat;
  379.         CSeq_feat& src = const_cast<CSeq_feat&>(GetOriginalFeature());
  380.         if ( src.IsSetId() )
  381.             dst.SetId(src.SetId());
  382.         else
  383.             dst.ResetId();
  384.         dst.SetData(src.SetData());
  385.         if ( GetPartial() )
  386.             dst.SetPartial(true);
  387.         else
  388.             dst.ResetPartial();
  389.         if ( src.IsSetExcept() )
  390.             dst.SetExcept(src.GetExcept());
  391.         else
  392.             dst.ResetExcept();
  393.         
  394.         if ( src.IsSetComment() )
  395.             dst.SetComment(src.GetComment());
  396.         else
  397.             dst.ResetComment();
  398.         GetMappedLocation();
  399.         dst.SetLocation(const_cast<CSeq_loc&>(GetLocation()));
  400.         if ( src.IsSetProduct() ) {
  401.             dst.SetProduct(const_cast<CSeq_loc&>(GetProduct()));
  402.         }
  403.         else {
  404.             dst.ResetProduct();
  405.         }
  406.         if ( src.IsSetQual() )
  407.             dst.SetQual() = src.SetQual();
  408.         else
  409.             dst.ResetQual();
  410.         if ( src.IsSetTitle() )
  411.             dst.SetTitle(src.GetTitle());
  412.         else
  413.             dst.ResetTitle();
  414.         if ( src.IsSetExt() )
  415.             dst.SetExt(src.SetExt());
  416.         else
  417.             dst.ResetExt();
  418.         if ( src.IsSetCit() )
  419.             dst.SetCit(src.SetCit());
  420.         else
  421.             dst.ResetCit();
  422.         if ( src.IsSetExp_ev() )
  423.             dst.SetExp_ev(src.GetExp_ev());
  424.         else
  425.             dst.ResetExp_ev();
  426.         if ( src.IsSetXref() )
  427.             dst.SetXref() = src.SetXref();
  428.         else
  429.             dst.ResetXref();
  430.         if ( src.IsSetDbxref() )
  431.             dst.SetDbxref() = src.SetDbxref();
  432.         else
  433.             dst.ResetDbxref();
  434.         if ( src.IsSetPseudo() )
  435.             dst.SetPseudo(src.GetPseudo());
  436.         else
  437.             dst.ResetPseudo();
  438.         if ( src.IsSetExcept_text() )
  439.             dst.SetExcept_text(src.GetExcept_text());
  440.         else
  441.             dst.ResetExcept_text();
  442.         m_MappedSeq_feat = mapped_feat;
  443.         m_Collector->m_CreatedMappedSeq_feat.AtomicResetFrom(mapped_feat);
  444.     }
  445.     else {
  446.         m_MappedSeq_feat.Reset(&GetOriginalFeature());
  447.     }
  448.     return *m_MappedSeq_feat;
  449. }
  450. END_SCOPE(objects)
  451. END_NCBI_SCOPE
  452. /*
  453. * ---------------------------------------------------------------------------
  454. * $Log: feat_ci.cpp,v $
  455. * Revision 1000.2  2004/06/01 19:23:14  gouriano
  456. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.32
  457. *
  458. * Revision 1.32  2004/05/21 21:42:12  gorelenk
  459. * Added PCH ncbi_pch.hpp
  460. *
  461. * Revision 1.31  2004/05/04 18:08:48  grichenk
  462. * Added CSeq_feat_Handle, CSeq_align_Handle and CSeq_graph_Handle
  463. *
  464. * Revision 1.30  2004/04/07 13:20:17  grichenk
  465. * Moved more data from iterators to CAnnot_Collector
  466. *
  467. * Revision 1.29  2004/04/05 15:56:14  grichenk
  468. * Redesigned CAnnotTypes_CI: moved all data and data collecting
  469. * functions to CAnnotDataCollector. CAnnotTypes_CI is no more
  470. * inherited from SAnnotSelector.
  471. *
  472. * Revision 1.28  2004/03/16 15:47:27  vasilche
  473. * Added CBioseq_set_Handle and set of EditHandles
  474. *
  475. * Revision 1.27  2004/02/11 22:19:24  grichenk
  476. * Fixed annot type initialization in iterators
  477. *
  478. * Revision 1.26  2004/02/05 19:53:40  grichenk
  479. * Fixed type matching in SAnnotSelector. Added IncludeAnnotType().
  480. *
  481. * Revision 1.25  2004/02/04 18:05:39  grichenk
  482. * Added annotation filtering by set of types/subtypes.
  483. * Renamed *Choice to *Type in SAnnotSelector.
  484. *
  485. * Revision 1.24  2004/01/28 20:54:36  vasilche
  486. * Fixed mapping of annotations.
  487. *
  488. * Revision 1.23  2003/08/27 19:44:06  vasilche
  489. * Avoid error on IRIX with null reference cast.
  490. *
  491. * Revision 1.22  2003/08/27 14:48:56  vasilche
  492. * Fixed constness of mapped location.
  493. *
  494. * Revision 1.21  2003/08/27 14:29:52  vasilche
  495. * Reduce object allocations in feature iterator.
  496. *
  497. * Revision 1.20  2003/08/15 19:19:16  vasilche
  498. * Fixed memory leak in string packing hooks.
  499. * Fixed processing of 'partial' flag of features.
  500. * Allow table packing of non-point SNP.
  501. * Allow table packing of SNP with long alleles.
  502. *
  503. * Revision 1.19  2003/08/14 20:05:19  vasilche
  504. * Simple SNP features are stored as table internally.
  505. * They are recreated when needed using CFeat_CI.
  506. *
  507. * Revision 1.18  2003/06/02 16:06:37  dicuccio
  508. * Rearranged src/objects/ subtree.  This includes the following shifts:
  509. *     - src/objects/asn2asn --> arc/app/asn2asn
  510. *     - src/objects/testmedline --> src/objects/ncbimime/test
  511. *     - src/objects/objmgr --> src/objmgr
  512. *     - src/objects/util --> src/objmgr/util
  513. *     - src/objects/alnmgr --> src/objtools/alnmgr
  514. *     - src/objects/flat --> src/objtools/flat
  515. *     - src/objects/validator --> src/objtools/validator
  516. *     - src/objects/cddalignview --> src/objtools/cddalignview
  517. * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
  518. * replaces the three libmmdb? libs.
  519. *
  520. * Revision 1.17  2003/04/24 16:12:38  vasilche
  521. * Object manager internal structures are splitted more straightforward.
  522. * Removed excessive header dependencies.
  523. *
  524. * Revision 1.16  2003/02/24 21:35:22  vasilche
  525. * Reduce checks in CAnnotObject_Ref comparison.
  526. * Fixed compilation errors on MS Windows.
  527. * Removed obsolete file src/objects/objmgr/annot_object.hpp.
  528. *
  529. * Revision 1.15  2003/02/24 18:57:22  vasilche
  530. * Make feature gathering in one linear pass using CSeqMap iterator.
  531. * Do not use feture index by sub locations.
  532. * Sort features at the end of gathering in one vector.
  533. * Extracted some internal structures and classes in separate header.
  534. * Delay creation of mapped features.
  535. *
  536. * Revision 1.14  2003/02/13 14:34:34  grichenk
  537. * Renamed CAnnotObject -> CAnnotObject_Info
  538. * + CSeq_annot_Info and CAnnotObject_Ref
  539. * Moved some members of CAnnotObject to CSeq_annot_Info
  540. * and CAnnotObject_Ref.
  541. * Added feat/align/graph to CAnnotObject_Info map
  542. * to CDataSource.
  543. *
  544. * Revision 1.13  2003/02/10 15:50:45  grichenk
  545. * + CMappedFeat, CFeat_CI resolves to CMappedFeat
  546. *
  547. * Revision 1.12  2002/12/20 20:54:24  grichenk
  548. * Added optional location/product switch to CFeat_CI
  549. *
  550. * Revision 1.11  2002/12/06 15:36:00  grichenk
  551. * Added overlap type for annot-iterators
  552. *
  553. * Revision 1.10  2002/11/04 21:29:12  grichenk
  554. * Fixed usage of const CRef<> and CRef<> constructor
  555. *
  556. * Revision 1.9  2002/07/08 20:51:01  grichenk
  557. * Moved log to the end of file
  558. * Replaced static mutex (in CScope, CDataSource) with the mutex
  559. * pool. Redesigned CDataSource data locking.
  560. *
  561. * Revision 1.8  2002/05/06 03:28:47  vakatov
  562. * OM/OM1 renaming
  563. *
  564. * Revision 1.7  2002/05/03 21:28:09  ucko
  565. * Introduce T(Signed)SeqPos.
  566. *
  567. * Revision 1.6  2002/04/05 21:26:19  grichenk
  568. * Enabled iteration over annotations defined on segments of a
  569. * delta-sequence.
  570. *
  571. * Revision 1.5  2002/03/05 16:08:14  grichenk
  572. * Moved TSE-restriction to new constructors
  573. *
  574. * Revision 1.4  2002/03/04 15:07:48  grichenk
  575. * Added "bioseq" argument to CAnnotTypes_CI constructor to iterate
  576. * annotations from a single TSE.
  577. *
  578. * Revision 1.3  2002/02/21 19:27:05  grichenk
  579. * Rearranged includes. Added scope history. Added searching for the
  580. * best seq-id match in data sources and scopes. Updated tests.
  581. *
  582. * Revision 1.2  2002/01/16 16:25:57  gouriano
  583. * restructured objmgr
  584. *
  585. * Revision 1.1  2002/01/11 19:06:18  gouriano
  586. * restructured objmgr
  587. *
  588. *
  589. * ===========================================================================
  590. */