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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: scope_impl.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/04/16 17:00:16  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.8
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef OBJMGR_IMPL_SCOPE_IMPL__HPP
  10. #define OBJMGR_IMPL_SCOPE_IMPL__HPP
  11. /*  $Id: scope_impl.hpp,v 1000.2 2004/04/16 17:00:16 gouriano Exp $
  12. * ===========================================================================
  13. *
  14. *                            PUBLIC DOMAIN NOTICE
  15. *               National Center for Biotechnology Information
  16. *
  17. *  This software/database is a "United States Government Work" under the
  18. *  terms of the United States Copyright Act.  It was written as part of
  19. *  the author's official duties as a United States Government employee and
  20. *  thus cannot be copyrighted.  This software/database is freely available
  21. *  to the public for use. The National Library of Medicine and the U.S.
  22. *  Government have not placed any restriction on its use or reproduction.
  23. *
  24. *  Although all reasonable efforts have been taken to ensure the accuracy
  25. *  and reliability of the software and data, the NLM and the U.S.
  26. *  Government do not and cannot warrant the performance or results that
  27. *  may be obtained by using this software or data. The NLM and the U.S.
  28. *  Government disclaim all warranties, express or implied, including
  29. *  warranties of performance, merchantability or fitness for any particular
  30. *  purpose.
  31. *
  32. *  Please cite the author in any work or product based on this material.
  33. *
  34. * ===========================================================================
  35. *
  36. * Authors:
  37. *           Andrei Gourianov
  38. *           Aleksey Grichenko
  39. *           Michael Kimelman
  40. *           Denis Vakatov
  41. *           Eugene Vasilchenko
  42. *
  43. * File Description:
  44. *           Scope is top-level object available to a client.
  45. *           Its purpose is to define a scope of visibility and reference
  46. *           resolution and provide access to the bio sequence data
  47. *
  48. */
  49. #include <corelib/ncbiobj.hpp>
  50. #include <corelib/ncbimtx.hpp>
  51. #include <objmgr/impl/heap_scope.hpp>
  52. #include <objmgr/impl/priority.hpp>
  53. #include <objmgr/bioseq_handle.hpp>
  54. #include <objmgr/seq_entry_handle.hpp>
  55. #include <objmgr/seq_annot_handle.hpp>
  56. #include <objmgr/seq_id_handle.hpp>
  57. #include <objmgr/seq_id_mapper.hpp>
  58. #include <objmgr/impl/scope_info.hpp>
  59. #include <objmgr/impl/mutex_pool.hpp>
  60. #include <objects/seq/Seq_inst.hpp> // for enum EMol
  61. #include <set>
  62. #include <map>
  63. BEGIN_NCBI_SCOPE
  64. BEGIN_SCOPE(objects)
  65. // fwd decl
  66. // objects
  67. class CSeq_entry;
  68. class CSeq_annot;
  69. class CSeq_data;
  70. class CSeq_id;
  71. class CSeq_loc;
  72. class CBioseq;
  73. // objmgr
  74. class CScope;
  75. class CHeapScope;
  76. class CObjectManager;
  77. class CDataSource;
  78. class CSeq_entry_Info;
  79. class CSeq_annot_Info;
  80. class CBioseq_Info;
  81. class CSeq_id_Handle;
  82. class CSeqMap;
  83. class CSeqMatch_Info;
  84. class CSynonymsSet;
  85. class CBioseq_Handle;
  86. class CSeq_annot_Handle;
  87. class CSeq_entry_Handle;
  88. class CBioseq_EditHandle;
  89. class CSeq_annot_EditHandle;
  90. class CSeq_entry_EditHandle;
  91. class CHandleRangeMap;
  92. struct CDataSource_ScopeInfo;
  93. struct SAnnotTypeSelector;
  94. struct SAnnotSelector;
  95. class CPriorityTree;
  96. class CPriorityNode;
  97. /////////////////////////////////////////////////////////////////////////////
  98. // CScope_Impl
  99. /////////////////////////////////////////////////////////////////////////////
  100. class NCBI_XOBJMGR_EXPORT CScope_Impl : public CObject
  101. {
  102. public:
  103.     typedef CConstRef<CTSE_Info>                     TTSE_Lock;
  104.     typedef set<TTSE_Lock>                           TTSE_LockSet;
  105.     // History of requests
  106.     typedef map<CSeq_id_Handle, SSeq_id_ScopeInfo>   TSeq_idMap;
  107.     typedef TSeq_idMap::value_type                   TSeq_idMapValue;
  108.     typedef CRef<CBioseq_ScopeInfo>                  TBioseqMapValue;
  109.     typedef const CBioseq_Info*                      TBioseqMapKey;
  110.     typedef map<TBioseqMapKey, TBioseqMapValue>      TBioseqMap;
  111.     typedef SSeq_id_ScopeInfo::TAnnotRefSet          TAnnotRefSet;
  112.     typedef int                                      TPriority;
  113.     //////////////////////////////////////////////////////////////////
  114.     // Adding top level objects: DataLoader, Seq-entry, Bioseq, Seq-annot
  115.     enum EPriority {
  116.         kPriority_NotSet = -1
  117.     };
  118.     // Add default data loaders from object manager
  119.     void AddDefaults(TPriority priority = kPriority_NotSet);
  120.     // Add data loader by name.
  121.     // The loader (or its factory) must be known to Object Manager.
  122.     void AddDataLoader(const string& loader_name,
  123.                        TPriority priority = kPriority_NotSet);
  124.     // Add the scope's datasources as a single group with the given priority
  125.     void AddScope(CScope_Impl& scope,
  126.                   TPriority priority = kPriority_NotSet);
  127.     // Add seq_entry, default priority is higher than for defaults or loaders
  128.     CSeq_entry_Handle AddTopLevelSeqEntry(CSeq_entry& top_entry,
  129.                                           TPriority pri = kPriority_NotSet);
  130.     // Add bioseq, return bioseq handle. Try to use unresolved seq-id
  131.     // from the bioseq, fail if all ids are already resolved to
  132.     // other sequences.
  133.     CBioseq_Handle AddBioseq(CBioseq& bioseq,
  134.                              TPriority pri = kPriority_NotSet);
  135.     // Add Seq-annot.
  136.     CSeq_annot_Handle AddAnnot(const CSeq_annot& annot,
  137.                                TPriority pri = kPriority_NotSet);
  138.     //////////////////////////////////////////////////////////////////
  139.     // Modification of existing object tree
  140.     CBioseq_EditHandle GetEditHandle(const CBioseq_Handle& seq);
  141.     CSeq_entry_EditHandle GetEditHandle(const CSeq_entry_Handle& entry);
  142.     CSeq_annot_EditHandle GetEditHandle(const CSeq_annot_Handle& annot);
  143.     CBioseq_set_EditHandle GetEditHandle(const CBioseq_set_Handle& seqset);
  144.     // Add new sub-entry to the existing tree if it is in this scope
  145.     CSeq_entry_EditHandle AttachEntry(const CBioseq_set_EditHandle& seqset,
  146.                                       CSeq_entry& entry,
  147.                                       int index = -1);
  148.     CSeq_entry_EditHandle CopyEntry(const CBioseq_set_EditHandle& seqset,
  149.                                     const CSeq_entry_Handle& entry,
  150.                                     int index = -1);
  151.     CSeq_entry_EditHandle TakeEntry(const CBioseq_set_EditHandle& seqset,
  152.                                     const CSeq_entry_EditHandle& entry,
  153.                                     int index = -1);
  154.     // Add annotations to a seq-entry (seq or set)
  155.     CSeq_annot_EditHandle AttachAnnot(const CSeq_entry_EditHandle& entry,
  156.                                       const CSeq_annot& annot);
  157.     CSeq_annot_EditHandle CopyAnnot(const CSeq_entry_EditHandle& entry,
  158.                                     const CSeq_annot_Handle& annot);
  159.     CSeq_annot_EditHandle TakeAnnot(const CSeq_entry_EditHandle& entry,
  160.                                     const CSeq_annot_EditHandle& annot);
  161.     // Remove methods
  162.     void RemoveEntry(const CSeq_entry_EditHandle& entry);
  163.     void RemoveBioseq(const CBioseq_EditHandle& seq);
  164.     void RemoveBioseq_set(const CBioseq_set_EditHandle& seqset);
  165.     void RemoveAnnot(const CSeq_annot_EditHandle& annot);
  166.     // Modify Seq-entry
  167.     void SelectNone(const CSeq_entry_EditHandle& entry);
  168.     CBioseq_EditHandle SelectSeq(const CSeq_entry_EditHandle& entry,
  169.                                  CBioseq& seq);
  170.     CBioseq_EditHandle CopySeq(const CSeq_entry_EditHandle& entry,
  171.                                const CBioseq_Handle& seq);
  172.     CBioseq_EditHandle TakeSeq(const CSeq_entry_EditHandle& entry,
  173.                                const CBioseq_EditHandle& seq);
  174.     CBioseq_set_EditHandle SelectSet(const CSeq_entry_EditHandle& entry,
  175.                                      CBioseq_set& seqset);
  176.     CBioseq_set_EditHandle CopySet(const CSeq_entry_EditHandle& entry,
  177.                                    const CBioseq_set_Handle& seqset);
  178.     CBioseq_set_EditHandle TakeSet(const CSeq_entry_EditHandle& entry,
  179.                                    const CBioseq_set_EditHandle& seqset);
  180.     // Get bioseq handle, limit id resolving
  181.     CBioseq_Handle GetBioseqHandle(const CSeq_id& id, int get_flag);
  182.     CBioseq_Handle GetBioseqHandle(const CSeq_id_Handle& id, int get_flag);
  183.     CBioseq_Handle GetBioseqHandleFromTSE(const CSeq_id& id,
  184.                                           const CBioseq_Handle& bh);
  185.     CBioseq_Handle GetBioseqHandleFromTSE(const CSeq_id& id,
  186.                                           const CSeq_entry_Handle& seh);
  187.     CBioseq_Handle GetBioseqHandleFromTSE(const CSeq_id_Handle& id,
  188.                                           const CBioseq_Handle& bh);
  189.     CBioseq_Handle GetBioseqHandleFromTSE(const CSeq_id_Handle& id,
  190.                                           const CSeq_entry_Handle& seh);
  191.     // Get bioseq handle by seqloc
  192.     CBioseq_Handle GetBioseqHandle(const CSeq_loc& loc, int get_flag);
  193.     // Deprecated interface
  194.     CBioseq_Handle GetBioseqHandle(const CBioseq& bioseq);
  195.     CSeq_entry_Handle GetSeq_entryHandle(const CSeq_entry& entry);
  196.     CSeq_annot_Handle GetSeq_annotHandle(const CSeq_annot& annot);
  197.     void ResetHistory(void);
  198.     virtual void DebugDump(CDebugDumpContext ddc, unsigned int depth) const;
  199.     CConstRef<CSynonymsSet> GetSynonyms(const CSeq_id& id);
  200.     CConstRef<CSynonymsSet> GetSynonyms(const CSeq_id_Handle& id);
  201.     CConstRef<CSynonymsSet> GetSynonyms(const CBioseq_Handle& bh);
  202.     typedef vector<CSeq_entry_Handle> TTSE_Handles;
  203.     void GetAllTSEs(TTSE_Handles& tses, int kind);
  204. private:
  205.     // constructor/destructor visible from CScope
  206.     CScope_Impl(CObjectManager& objmgr);
  207.     virtual ~CScope_Impl(void);
  208.     // to prevent copying
  209.     CScope_Impl(const CScope_Impl&);
  210.     CScope_Impl& operator=(const CScope_Impl&);
  211.     // Return the highest priority loader or null
  212.     CDataSource* GetFirstLoaderSource(void);
  213.     void UpdateAnnotIndex(const CSeq_annot& limit_annot);
  214.     void UpdateAnnotIndex(const CSeq_annot_Handle& annot);
  215.     CConstRef<TAnnotRefSet>
  216.     GetTSESetWithAnnots(const CSeq_id_Handle& idh_type);
  217.     CConstRef<TAnnotRefSet>
  218.     GetTSESetWithAnnots(const CBioseq_Handle& bh);
  219.     void x_AttachToOM(CObjectManager& objmgr);
  220.     void x_DetachFromOM(void);
  221.     void x_ResetHistory(void);
  222.     // clean some cache entries when new data source is added
  223.     void x_ClearCacheOnNewData(void);
  224.     void x_ClearAnnotCache(void);
  225.     void x_ClearCacheOnRemoveData(const CSeq_entry_Info& entry);
  226.     void x_ClearCacheOnRemoveData(const CBioseq_set_Info& seqset);
  227.     void x_ClearCacheOnRemoveData(const CBioseq_Info& seq);
  228.     CSeq_entry_EditHandle x_AttachEntry(const CBioseq_set_EditHandle& seqset,
  229.                                         CRef<CSeq_entry_Info> entry,
  230.                                         int index);
  231.     CSeq_annot_EditHandle x_AttachAnnot(const CSeq_entry_EditHandle& entry,
  232.                                         CRef<CSeq_annot_Info> annot);
  233.     CBioseq_EditHandle x_SelectSeq(const CSeq_entry_EditHandle& entry,
  234.                                    CRef<CBioseq_Info> bioseq);
  235.     CBioseq_set_EditHandle x_SelectSet(const CSeq_entry_EditHandle& entry,
  236.                                        CRef<CBioseq_set_Info> seqset);
  237.     // Find the best possible resolution for the Seq-id
  238.     void x_ResolveSeq_id(TSeq_idMapValue& id, int get_flag);
  239.     // Iterate over priorities, find all possible data sources
  240.     CDataSource_ScopeInfo* x_FindBioseqInfo(const CPriorityTree& tree,
  241.                                             const CSeq_id_Handle& idh,
  242.                                             const TSeq_id_HandleSet* hset,
  243.                                             CSeqMatch_Info& match_info,
  244.                                             int get_flag);
  245.     CDataSource_ScopeInfo* x_FindBioseqInfo(const CPriorityNode& node,
  246.                                             const CSeq_id_Handle& idh,
  247.                                             const TSeq_id_HandleSet* hset,
  248.                                             CSeqMatch_Info& match_info,
  249.                                             int get_flag);
  250.     CDataSource_ScopeInfo* x_FindBioseqInfo(CDataSource_ScopeInfo& ds_info,
  251.                                             const CSeq_id_Handle& idh,
  252.                                             const TSeq_id_HandleSet* hset,
  253.                                             CSeqMatch_Info& match_info,
  254.                                             int get_flag);
  255.     CBioseq_Handle x_GetBioseqHandleFromTSE(const CSeq_id_Handle& id,
  256.                                             const CTSE_Info& tse);
  257.     CBioseq_Handle GetBioseqHandle(const CBioseq_Info& seq);
  258.     CBioseq_Handle x_GetBioseqHandle(const CBioseq_Info& seq);
  259. public:
  260.     CConstRef<CTSE_Info> x_GetTSE_Info(const CSeq_entry& tse);
  261.     CConstRef<CSeq_entry_Info> x_GetSeq_entry_Info(const CSeq_entry& entry);
  262.     CConstRef<CSeq_annot_Info> x_GetSeq_annot_Info(const CSeq_annot& annot);
  263.     CConstRef<CBioseq_Info> x_GetBioseq_Info(const CBioseq& bioseq);
  264. private:
  265.     // Get bioseq handles for sequences from the given TSE using the filter
  266.     typedef vector<CBioseq_Handle> TBioseq_HandleSet;
  267.     typedef int TBioseqLevelFlag;
  268.     void x_PopulateBioseq_HandleSet(const CSeq_entry_Handle& tse,
  269.                                     TBioseq_HandleSet& handles,
  270.                                     CSeq_inst::EMol filter,
  271.                                     TBioseqLevelFlag level);
  272.     CConstRef<CSynonymsSet> x_GetSynonyms(CBioseq_ScopeInfo& info);
  273.     void x_AddSynonym(const CSeq_id_Handle& idh,
  274.                       CSynonymsSet& syn_set, CBioseq_ScopeInfo& info);
  275.     // Conflict reporting function
  276.     enum EConflict {
  277.         eConflict_History,
  278.         eConflict_Live
  279.     };
  280.     void x_ThrowConflict(EConflict conflict_type,
  281.                          const CSeqMatch_Info& info1,
  282.                          const CSeqMatch_Info& info2) const;
  283.     TSeq_idMapValue& x_GetSeq_id_Info(const CSeq_id_Handle& id);
  284.     TSeq_idMapValue& x_GetSeq_id_Info(const CBioseq_Handle& bh);
  285.     TSeq_idMapValue* x_FindSeq_id_Info(const CSeq_id_Handle& id);
  286.     CRef<CBioseq_ScopeInfo> x_InitBioseq_Info(TSeq_idMapValue& info,
  287.                                               int get_flag);
  288.     bool x_InitBioseq_Info(TSeq_idMapValue& info,
  289.                            CBioseq_ScopeInfo& bioseq_info);
  290.     CRef<CBioseq_ScopeInfo> x_GetBioseq_Info(const CSeq_id_Handle& id,
  291.                                              int get_flag);
  292.     CRef<CBioseq_ScopeInfo> x_FindBioseq_Info(const CSeq_id_Handle& id,
  293.                                               int get_flag);
  294.     CScope*         m_HeapScope;
  295.     CObjectManager* m_pObjMgr;
  296.     CPriorityTree   m_setDataSrc; // Data sources ordered by priority
  297.     CInitMutexPool  m_MutexPool;
  298.     typedef CRWLock                  TRWLock;
  299.     typedef TRWLock::TReadLockGuard  TReadLockGuard;
  300.     typedef TRWLock::TWriteLockGuard TWriteLockGuard;
  301.     mutable TRWLock m_Scope_Conf_RWLock;
  302.     TSeq_idMap      m_Seq_idMap;
  303.     mutable TRWLock m_Seq_idMapLock;
  304.     TBioseqMap      m_BioseqMap;
  305.     mutable TRWLock m_BioseqMapLock;
  306.     friend class CScope;
  307.     friend class CHeapScope;
  308.     friend class CObjectManager;
  309.     friend class CSeqVector;
  310.     friend class CDataSource;
  311.     friend class CBioseq_CI;
  312.     friend class CAnnot_Collector;
  313.     friend class CBioseq_Handle;
  314.     friend class CBioseq_set_Handle;
  315.     friend class CSeq_entry_Handle;
  316.     friend class CBioseq_EditHandle;
  317.     friend class CBioseq_set_EditHandle;
  318.     friend class CSeq_entry_EditHandle;
  319.     friend class CTSE_CI;
  320.     friend class CSeq_annot_CI;
  321.     friend class CSeqMap_CI;
  322.     friend class CPrefetchToken_Impl;
  323. };
  324. END_SCOPE(objects)
  325. END_NCBI_SCOPE
  326. /*
  327. * ---------------------------------------------------------------------------
  328. * $Log: scope_impl.hpp,v $
  329. * Revision 1000.2  2004/04/16 17:00:16  gouriano
  330. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.8
  331. *
  332. * Revision 1.8  2004/04/16 13:31:46  grichenk
  333. * Added data pre-fetching functions.
  334. *
  335. * Revision 1.7  2004/04/13 15:59:35  grichenk
  336. * Added CScope::GetBioseqHandle() with id resolving flag.
  337. *
  338. * Revision 1.6  2004/04/12 18:40:24  grichenk
  339. * Added GetAllTSEs()
  340. *
  341. * Revision 1.5  2004/04/05 15:56:13  grichenk
  342. * Redesigned CAnnotTypes_CI: moved all data and data collecting
  343. * functions to CAnnotDataCollector. CAnnotTypes_CI is no more
  344. * inherited from SAnnotSelector.
  345. *
  346. * Revision 1.4  2004/03/31 17:08:06  vasilche
  347. * Implemented ConvertSeqToSet and ConvertSetToSeq.
  348. *
  349. * Revision 1.3  2004/03/29 20:13:06  vasilche
  350. * Implemented whole set of methods to modify Seq-entry object tree.
  351. * Added CBioseq_Handle::GetExactComplexityLevel().
  352. *
  353. * Revision 1.2  2004/03/24 18:30:29  vasilche
  354. * Fixed edit API.
  355. * Every *_Info object has its own shallow copy of original object.
  356. *
  357. * Revision 1.1  2004/03/16 15:47:27  vasilche
  358. * Added CBioseq_set_Handle and set of EditHandles
  359. *
  360. * Revision 1.71  2004/02/19 17:23:00  vasilche
  361. * Changed order of deletion of heap scope and scope impl objects.
  362. * Reduce number of calls to x_ResetHistory().
  363. *
  364. * Revision 1.70  2004/02/02 14:46:42  vasilche
  365. * Several performance fixed - do not iterate whole tse set in CDataSource.
  366. *
  367. * Revision 1.69  2004/01/29 20:33:27  vasilche
  368. * Do not resolve any Seq-ids in CScope::GetSynonyms() -
  369. * assume all not resolved Seq-id as synonym.
  370. * Seq-id conflict messages made clearer.
  371. *
  372. * Revision 1.68  2004/01/27 17:11:13  ucko
  373. * Remove redundant forward declaration of CTSE_Info
  374. *
  375. * Revision 1.67  2003/12/29 20:04:52  grichenk
  376. * CHeapScope can be initialized with null pointer.
  377. *
  378. * Revision 1.66  2003/12/18 16:38:05  grichenk
  379. * Added CScope::RemoveEntry()
  380. *
  381. * Revision 1.65  2003/11/28 15:13:24  grichenk
  382. * Added CSeq_entry_Handle
  383. *
  384. * Revision 1.64  2003/11/21 20:33:03  grichenk
  385. * Added GetBioseqHandleFromTSE(CSeq_id, CSeq_entry)
  386. *
  387. * Revision 1.63  2003/11/12 15:49:48  vasilche
  388. * Added loading annotations on non gi Seq-id.
  389. *
  390. * Revision 1.62  2003/10/07 13:43:22  vasilche
  391. * Added proper handling of named Seq-annots.
  392. * Added feature search from named Seq-annots.
  393. * Added configurable adaptive annotation search (default: gene, cds, mrna).
  394. * Fixed selection of blobs for loading from GenBank.
  395. * Added debug checks to CSeq_id_Mapper for easier finding lost CSeq_id_Handles.
  396. * Fixed leaked split chunks annotation stubs.
  397. * Moved some classes definitions in separate *.cpp files.
  398. *
  399. * Revision 1.61  2003/09/30 16:21:59  vasilche
  400. * Updated internal object manager classes to be able to load ID2 data.
  401. * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  402. * Scope caches results of requests for data to data loaders.
  403. * Optimized CSeq_id_Handle for gis.
  404. * Optimized bioseq lookup in scope.
  405. * Reduced object allocations in annotation iterators.
  406. * CScope is allowed to be destroyed before other objects using this scope are
  407. * deleted (feature iterators, bioseq handles etc).
  408. * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  409. * Added 'adaptive' option to objmgr_demo application.
  410. *
  411. * Revision 1.60  2003/09/05 20:50:24  grichenk
  412. * +AddBioseq(CBioseq&)
  413. *
  414. * Revision 1.59  2003/09/03 19:59:59  grichenk
  415. * Added sequence filtering by level (mains/parts/all)
  416. *
  417. * Revision 1.58  2003/08/12 18:25:39  grichenk
  418. * Fixed default priorities
  419. *
  420. * Revision 1.57  2003/08/06 20:51:14  grichenk
  421. * Removed declarations of non-existent methods
  422. *
  423. * Revision 1.56  2003/08/04 17:02:57  grichenk
  424. * Added constructors to iterate all annotations from a
  425. * seq-entry or seq-annot.
  426. *
  427. * Revision 1.55  2003/07/25 15:25:22  grichenk
  428. * Added CSeq_annot_CI class
  429. *
  430. * Revision 1.54  2003/07/17 20:07:55  vasilche
  431. * Reduced memory usage by feature indexes.
  432. * SNP data is loaded separately through PUBSEQ_OS.
  433. * String compression for SNP data.
  434. *
  435. * Revision 1.53  2003/06/30 18:42:09  vasilche
  436. * CPriority_I made to use less memory allocations/deallocations.
  437. *
  438. * Revision 1.52  2003/06/19 18:34:07  vasilche
  439. * Fixed compilation on Windows.
  440. *
  441. * Revision 1.51  2003/06/19 18:23:44  vasilche
  442. * Added several CXxx_ScopeInfo classes for CScope related information.
  443. * CBioseq_Handle now uses reference to CBioseq_ScopeInfo.
  444. * Some fine tuning of locking in CScope.
  445. *
  446. * Revision 1.49  2003/05/27 19:44:04  grichenk
  447. * Added CSeqVector_CI class
  448. *
  449. * Revision 1.48  2003/05/20 15:44:37  vasilche
  450. * Fixed interaction of CDataSource and CDataLoader in multithreaded app.
  451. * Fixed some warnings on WorkShop.
  452. * Added workaround for memory leak on WorkShop.
  453. *
  454. * Revision 1.47  2003/05/14 18:39:25  grichenk
  455. * Simplified TSE caching and filtering in CScope, removed
  456. * some obsolete members and functions.
  457. *
  458. * Revision 1.46  2003/05/12 19:18:28  vasilche
  459. * Fixed locking of object manager classes in multi-threaded application.
  460. *
  461. * Revision 1.45  2003/05/06 18:54:06  grichenk
  462. * Moved TSE filtering from CDataSource to CScope, changed
  463. * some filtering rules (e.g. priority is now more important
  464. * than scope history). Added more caches to CScope.
  465. *
  466. * Revision 1.44  2003/04/29 19:51:12  vasilche
  467. * Fixed interaction of Data Loader garbage collector and TSE locking mechanism.
  468. * Made some typedefs more consistent.
  469. *
  470. * Revision 1.43  2003/04/24 17:24:57  vasilche
  471. * SAnnotSelector is struct.
  472. * Added include required by MS VC.
  473. *
  474. * Revision 1.42  2003/04/24 16:12:37  vasilche
  475. * Object manager internal structures are splitted more straightforward.
  476. * Removed excessive header dependencies.
  477. *
  478. * Revision 1.41  2003/04/09 16:04:29  grichenk
  479. * SDataSourceRec replaced with CPriorityNode
  480. * Added CScope::AddScope(scope, priority) to allow scope nesting
  481. *
  482. * Revision 1.40  2003/04/03 14:18:08  vasilche
  483. * Added public GetSynonyms() method.
  484. *
  485. * Revision 1.39  2003/03/26 21:00:07  grichenk
  486. * Added seq-id -> tse with annotation cache to CScope
  487. *
  488. * Revision 1.38  2003/03/24 21:26:42  grichenk
  489. * Added support for CTSE_CI
  490. *
  491. * Revision 1.37  2003/03/21 19:22:48  grichenk
  492. * Redesigned TSE locking, replaced CTSE_Lock with CRef<CTSE_Info>.
  493. *
  494. * Revision 1.36  2003/03/18 14:46:36  grichenk
  495. * Set limit object type to "none" if the object is null.
  496. *
  497. * Revision 1.35  2003/03/12 20:09:30  grichenk
  498. * Redistributed members between CBioseq_Handle, CBioseq_Info and CTSE_Info
  499. *
  500. * Revision 1.34  2003/03/11 14:15:49  grichenk
  501. * +Data-source priority
  502. *
  503. * Revision 1.33  2003/03/10 16:55:16  vasilche
  504. * Cleaned SAnnotSelector structure.
  505. * Added shortcut when features are limited to one TSE.
  506. *
  507. * Revision 1.32  2003/03/03 20:32:47  vasilche
  508. * Removed obsolete method GetSynonyms().
  509. *
  510. * Revision 1.31  2003/02/28 20:02:35  grichenk
  511. * Added synonyms cache and x_GetSynonyms()
  512. *
  513. * Revision 1.30  2003/02/27 14:35:32  vasilche
  514. * Splitted PopulateTSESet() by logically independent parts.
  515. *
  516. * Revision 1.29  2003/02/24 18:57:21  vasilche
  517. * Make feature gathering in one linear pass using CSeqMap iterator.
  518. * Do not use feture index by sub locations.
  519. * Sort features at the end of gathering in one vector.
  520. * Extracted some internal structures and classes in separate header.
  521. * Delay creation of mapped features.
  522. *
  523. * Revision 1.28  2003/01/22 20:11:53  vasilche
  524. * Merged functionality of CSeqMapResolved_CI to CSeqMap_CI.
  525. * CSeqMap_CI now supports resolution and iteration over sequence range.
  526. * Added several caches to CScope.
  527. * Optimized CSeqVector().
  528. * Added serveral variants of CBioseqHandle::GetSeqVector().
  529. * Tried to optimize annotations iterator (not much success).
  530. * Rewritten CHandleRange and CHandleRangeMap classes to avoid sorting of list.
  531. *
  532. * Revision 1.27  2002/12/26 20:51:36  dicuccio
  533. * Added Win32 export specifier
  534. *
  535. * Revision 1.26  2002/12/26 16:39:21  vasilche
  536. * Object manager class CSeqMap rewritten.
  537. *
  538. * Revision 1.25  2002/11/08 22:15:50  grichenk
  539. * Added methods for removing/replacing annotations
  540. *
  541. * Revision 1.24  2002/11/01 05:34:06  kans
  542. * added GetBioseqHandle taking CBioseq parameter
  543. *
  544. * Revision 1.23  2002/10/31 22:25:09  kans
  545. * added GetBioseqHandle taking CSeq_loc parameter
  546. *
  547. * Revision 1.22  2002/10/18 19:12:39  grichenk
  548. * Removed mutex pools, converted most static mutexes to non-static.
  549. * Protected CSeqMap::x_Resolve() with mutex. Modified code to prevent
  550. * dead-locks.
  551. *
  552. * Revision 1.21  2002/10/02 17:58:21  grichenk
  553. * Added sequence type filter to CBioseq_CI
  554. *
  555. * Revision 1.20  2002/09/30 20:01:17  grichenk
  556. * Added methods to support CBioseq_CI
  557. *
  558. * Revision 1.19  2002/07/08 20:50:56  grichenk
  559. * Moved log to the end of file
  560. * Replaced static mutex (in CScope, CDataSource) with the mutex
  561. * pool. Redesigned CDataSource data locking.
  562. *
  563. * Revision 1.18  2002/06/04 17:18:32  kimelman
  564. * memory cleanup :  new/delete/Cref rearrangements
  565. *
  566. * Revision 1.17  2002/05/28 18:01:11  gouriano
  567. * DebugDump added
  568. *
  569. * Revision 1.16  2002/05/14 20:06:23  grichenk
  570. * Improved CTSE_Info locking by CDataSource and CDataLoader
  571. *
  572. * Revision 1.15  2002/05/06 03:30:36  vakatov
  573. * OM/OM1 renaming
  574. *
  575. * Revision 1.14  2002/05/03 21:28:02  ucko
  576. * Introduce T(Signed)SeqPos.
  577. *
  578. * Revision 1.13  2002/04/17 21:09:38  grichenk
  579. * Fixed annotations loading
  580. *
  581. * Revision 1.12  2002/04/08 19:14:15  gouriano
  582. * corrected comment to AddDefaults()
  583. *
  584. * Revision 1.11  2002/03/27 18:46:26  gouriano
  585. * three functions made public
  586. *
  587. * Revision 1.10  2002/03/20 21:20:38  grichenk
  588. * +CScope::ResetHistory()
  589. *
  590. * Revision 1.9  2002/02/21 19:27:00  grichenk
  591. * Rearranged includes. Added scope history. Added searching for the
  592. * best seq-id match in data sources and scopes. Updated tests.
  593. *
  594. * Revision 1.8  2002/02/07 21:27:33  grichenk
  595. * Redesigned CDataSource indexing: seq-id handle -> TSE -> seq/annot
  596. *
  597. * Revision 1.7  2002/02/06 21:46:43  gouriano
  598. * *** empty log message ***
  599. *
  600. * Revision 1.6  2002/02/05 21:47:21  gouriano
  601. * added FindSeqid function, minor tuneup in CSeq_id_mapper
  602. *
  603. * Revision 1.5  2002/01/28 19:45:33  gouriano
  604. * changed the interface of BioseqHandle: two functions moved from Scope
  605. *
  606. * Revision 1.4  2002/01/23 21:59:29  grichenk
  607. * Redesigned seq-id handles and mapper
  608. *
  609. * Revision 1.3  2002/01/18 17:07:12  gouriano
  610. * renamed GetSequence to GetSeqVector
  611. *
  612. * Revision 1.2  2002/01/16 16:26:35  gouriano
  613. * restructured objmgr
  614. *
  615. * Revision 1.1  2002/01/11 19:04:03  gouriano
  616. * restructured objmgr
  617. *
  618. *
  619. * ===========================================================================
  620. */
  621. #endif//OBJMGR_IMPL_SCOPE_IMPL__HPP