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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: data_source.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/04/16 16:59:58  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.74
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef OBJECTS_OBJMGR_IMPL___DATA_SOURCE__HPP
  10. #define OBJECTS_OBJMGR_IMPL___DATA_SOURCE__HPP
  11. /*  $Id: data_source.hpp,v 1000.2 2004/04/16 16:59:58 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. * Author: Aleksey Grichenko, Michael Kimelman, Eugene Vasilchenko
  37. *
  38. * File Description:
  39. *   Data source for object manager
  40. *
  41. */
  42. #include <objmgr/impl/tse_info.hpp>
  43. #include <objmgr/seq_id_mapper.hpp>
  44. #include <objmgr/scope.hpp>
  45. #include <objmgr/data_loader.hpp>
  46. #include <corelib/ncbimtx.hpp>
  47. #include <set>
  48. #include <map>
  49. #include <list>
  50. #include <vector>
  51. BEGIN_NCBI_SCOPE
  52. BEGIN_SCOPE(objects)
  53. // objects
  54. class CDelta_seq;
  55. class CDelta_ext;
  56. class CSeq_interval;
  57. class CSeq_data;
  58. class CSeq_entry;
  59. class CSeq_annot;
  60. class CBioseq;
  61. class CBioseq_set;
  62. // infos
  63. class CTSE_Info;
  64. class CSeq_entry_Info;
  65. class CSeq_annot_Info;
  66. class CBioseq_Info;
  67. // others
  68. class CBioseq_Handle;
  69. class CPrefetchToken_Impl;
  70. class CPrefetchThread;
  71. class CTSE_LockingSetLock;
  72. class NCBI_XOBJMGR_EXPORT CTSE_LockingSet
  73. {
  74. public:
  75.     CTSE_LockingSet(void);
  76.     CTSE_LockingSet(const CTSE_LockingSet&);
  77.     ~CTSE_LockingSet(void);
  78.     CTSE_LockingSet& operator=(const CTSE_LockingSet&);
  79.     typedef set<CTSE_Info*> TTSESet;
  80.     typedef TTSESet::iterator iterator;
  81.     typedef TTSESet::const_iterator const_iterator;
  82.     bool insert(CTSE_Info* tse);
  83.     bool erase(CTSE_Info* tse);
  84.     const_iterator begin(void) const
  85.         {
  86.             return m_TSE_set.begin();
  87.         }
  88.     const_iterator end(void) const
  89.         {
  90.             return m_TSE_set.end();
  91.         }
  92.     bool empty(void) const
  93.         {
  94.             return m_TSE_set.empty();
  95.         }
  96.     friend class CTSE_LockingSetLock;
  97. private:
  98.     bool x_Locked(void) const
  99.         {
  100.             return m_LockCount != 0;
  101.         }
  102.     void x_Lock(void);
  103.     void x_Unlock(void);
  104.     DECLARE_CLASS_STATIC_FAST_MUTEX(sm_Mutex);
  105.     int        m_LockCount;
  106.     TTSESet    m_TSE_set;
  107. };
  108. class NCBI_XOBJMGR_EXPORT CTSE_LockingSetLock
  109. {
  110. public:
  111.     CTSE_LockingSetLock(void)
  112.         : m_TSE_set(0)
  113.         {
  114.         }
  115.     CTSE_LockingSetLock(CTSE_LockingSet& tse_set)
  116.         : m_TSE_set(&tse_set)
  117.         {
  118.             x_Lock();
  119.         }
  120.     CTSE_LockingSetLock(const CTSE_LockingSetLock& lock)
  121.         : m_TSE_set(lock.m_TSE_set)
  122.         {
  123.             x_Lock();
  124.         }
  125.     ~CTSE_LockingSetLock(void)
  126.         {
  127.             x_Unlock();
  128.         }
  129.     CTSE_LockingSetLock& operator=(const CTSE_LockingSetLock& lock)
  130.         {
  131.             x_Lock(lock.m_TSE_set);
  132.             return *this;
  133.         }
  134.     void Lock(CTSE_LockingSet& lock)
  135.         {
  136.             x_Lock(&lock);
  137.         }
  138.     void Unlock(void)
  139.         {
  140.             x_Lock(0);
  141.         }
  142. private:
  143.     void x_Lock(void)
  144.         {
  145.             if ( m_TSE_set ) {
  146.                 m_TSE_set->x_Lock();
  147.             }
  148.         }
  149.     void x_Unlock(void)
  150.         {
  151.             if ( m_TSE_set ) {
  152.                 m_TSE_set->x_Unlock();
  153.             }
  154.         }
  155.     void x_Lock(CTSE_LockingSet* lock)
  156.         {
  157.             if ( m_TSE_set != lock ) {
  158.                 x_Unlock();
  159.                 m_TSE_set = lock;
  160.                 x_Lock();
  161.             }
  162.         }
  163.     CTSE_LockingSet* m_TSE_set;
  164. };
  165. class NCBI_XOBJMGR_EXPORT CDataSource : public CObject
  166. {
  167. public:
  168.     /// 'ctors
  169.     CDataSource(CDataLoader& loader, CObjectManager& objmgr);
  170.     CDataSource(CSeq_entry& entry, CObjectManager& objmgr);
  171.     virtual ~CDataSource(void);
  172.     /// Register new TSE (Top Level Seq-entry)
  173.     typedef set<TTSE_Lock>     TTSE_LockSet;
  174.     CRef<CTSE_Info> AddTSE(CSeq_entry& se,
  175.                            bool dead = false,
  176.                            const CObject* blob_id = 0);
  177.     void AddTSE(CRef<CTSE_Info> tse);
  178.     // Modification methods.
  179.     /// Add new sub-entry to "parent".
  180.     CRef<CSeq_entry_Info> AttachEntry(CBioseq_set_Info& parent,
  181.                                       CSeq_entry& entry,
  182.                                       int index = -1);
  183.     void RemoveEntry(CSeq_entry_Info& entry);
  184.     /// Add annotations to a Seq-entry.
  185.     CRef<CSeq_annot_Info> AttachAnnot(CSeq_entry_Info& parent,
  186.                                       const CSeq_annot& annot);
  187.     CRef<CSeq_annot_Info> AttachAnnot(CBioseq_Base_Info& parent,
  188.                                       const CSeq_annot& annot);
  189.     // Remove/replace seq-annot from the given entry
  190.     void RemoveAnnot(CSeq_annot_Info& annot);
  191.     CRef<CSeq_annot_Info> ReplaceAnnot(CSeq_annot_Info& old_annot,
  192.                                        const CSeq_annot& new_annot);
  193.     /// Get TSE info by seq-id handle. This should also get the list of all
  194.     /// seq-ids for all bioseqs and the list of seq-ids used in annotations.
  195.     TTSE_Lock GetBlobById(const CSeq_id_Handle& idh);
  196.     /// Get Bioseq info by Seq-Id.
  197.     /// Return "NULL" handle if the Bioseq cannot be resolved.
  198.     CConstRef<CBioseq_Info> GetBioseq_Info(const CSeqMatch_Info& info);
  199.     // Remove TSE from the datasource, update indexes
  200.     void DropAllTSEs(void);
  201.     bool DropTSE(CTSE_Info& info);
  202.     // Contains (or can load) any entries?
  203.     bool IsEmpty(void) const;
  204.     CDataLoader* GetDataLoader(void) const;
  205.     CConstRef<CSeq_entry> GetTopEntry(void);
  206.     CConstRef<CTSE_Info> GetTopEntry_Info(void);
  207.     // Internal typedefs
  208.     typedef CTSE_Info::TRange                        TRange;
  209.     typedef CTSE_Info::TRangeMap                     TRangeMap;
  210.     typedef map<CSeq_id_Handle, CTSE_LockingSet>     TTSEMap;
  211.     typedef map<CConstRef<CSeq_entry>, CTSE_Info*>       TTSE_InfoMap;
  212.     typedef map<CConstRef<CSeq_entry>, CSeq_entry_Info*> TSeq_entry_InfoMap;
  213.     typedef map<CConstRef<CSeq_annot>, CSeq_annot_Info*> TSeq_annot_InfoMap;
  214.     typedef map<CConstRef<CBioseq>, CBioseq_Info*>       TBioseq_InfoMap;
  215.     //typedef map<const CObject*, CAnnotObject_Info* > TAnnotObject_InfoMap;
  216.     typedef set< CRef<CTSE_Info> >                   TTSE_Set;
  217.     typedef int                                      TPriority;
  218.     typedef set<CTSE_Info*>                          TDirtyAnnot_TSEs;
  219.     void UpdateAnnotIndex(void);
  220.     void UpdateAnnotIndex(const CSeq_entry_Info& entry_info);
  221.     void UpdateAnnotIndex(const CSeq_annot_Info& annot_info);
  222.     void GetSynonyms(const CSeq_id_Handle& id, set<CSeq_id_Handle>& syns);
  223.     void GetTSESetWithAnnots(const CSeq_id_Handle& idh, TTSE_LockSet& tse_set);
  224.     // Fill the set with bioseq handles for all sequences from a given TSE.
  225.     // Return empty tse lock if the entry was not found or is not a TSE.
  226.     // "filter" may be used to select a particular sequence type.
  227.     // "level" may be used to select bioseqs from given levels only.
  228.     // Used to initialize bioseq iterators.
  229.     typedef vector< CConstRef<CBioseq_Info> > TBioseq_InfoSet;
  230.     typedef int TBioseqLevelFlag;
  231.     void GetBioseqs(const CSeq_entry_Info& entry,
  232.                     TBioseq_InfoSet& bioseqs,
  233.                     CSeq_inst::EMol filter,
  234.                     TBioseqLevelFlag level);
  235.     CSeqMatch_Info BestResolve(CSeq_id_Handle idh);
  236.     CSeqMatch_Info HistoryResolve(CSeq_id_Handle idh,
  237.                                   const TTSE_LockSet& tse_set);
  238.     // Select the best of the two bioseqs if possible (e.g. dead vs live).
  239.     CSeqMatch_Info* ResolveConflict(const CSeq_id_Handle& id,
  240.                                     CSeqMatch_Info& info1,
  241.                                     CSeqMatch_Info& info2);
  242.     bool IsLive(const CTSE_Info& tse);
  243.     //bool IsSynonym(const CSeq_id_Handle& h1, const CSeq_id_Handle& h2) const;
  244.     string GetName(void) const;
  245.     TPriority GetDefaultPriority(void) const;
  246.     void SetDefaultPriority(TPriority priority);
  247.     virtual void DebugDump(CDebugDumpContext ddc, unsigned int depth) const;
  248.     CConstRef<CTSE_Info> FindTSEInfo(const CSeq_entry& entry);
  249.     CConstRef<CSeq_entry_Info> FindSeq_entry_Info(const CSeq_entry& entry);
  250.     CConstRef<CSeq_annot_Info> FindSeq_annot_Info(const CSeq_annot& annot);
  251.     CConstRef<CBioseq_Info> FindBioseq_Info(const CBioseq& bioseq);
  252.     virtual void Prefetch(CPrefetchToken_Impl& token);
  253. private:
  254.     friend class CAnnotTypes_CI; // using mutex etc.
  255.     friend class CBioseq_Handle; // using mutex
  256.     friend class CGBDataLoader;  //
  257.     friend class CTSE_Info;
  258.     friend class CSeq_entry_Info;
  259.     friend class CSeq_annot_Info;
  260.     friend class CBioseq_Info;
  261.     friend class CPrefetchToken_Impl;
  262.     // attach, detach, index & unindex methods
  263.     // TSE
  264.     void x_DropTSE(CTSE_Info& info);
  265.     void x_Map(CConstRef<CSeq_entry> obj, CTSE_Info* info);
  266.     void x_Unmap(CConstRef<CSeq_entry> obj, CTSE_Info* info);
  267.     void x_Map(CConstRef<CSeq_entry> obj, CSeq_entry_Info* info);
  268.     void x_Unmap(CConstRef<CSeq_entry> obj, CSeq_entry_Info* info);
  269.     void x_Map(CConstRef<CSeq_annot> obj, CSeq_annot_Info* info);
  270.     void x_Unmap(CConstRef<CSeq_annot> obj, CSeq_annot_Info* info);
  271.     void x_Map(CConstRef<CBioseq> obj, CBioseq_Info* info);
  272.     void x_Unmap(CConstRef<CBioseq> obj, CBioseq_Info* info);
  273.     //void x_AttachMap(CSeq_entry_Info& bioseq, CSeqMap& seqmap);
  274.     // lookup Xxx_Info objects
  275.     // TSE
  276.     CConstRef<CTSE_Info> x_FindTSE_Info(const CSeq_entry& tse);
  277.     // Seq-entry
  278.     CConstRef<CSeq_entry_Info> x_FindSeq_entry_Info(const CSeq_entry& entry);
  279.     // Bioseq
  280.     CConstRef<CBioseq_Info> x_FindBioseq_Info(const CBioseq& seq);
  281.     // Seq-annot
  282.     CConstRef<CSeq_annot_Info> x_FindSeq_annot_Info(const CSeq_annot& annot);
  283.     // Find the seq-entry with best bioseq for the seq-id handle.
  284.     // The best bioseq is the bioseq from the live TSE or from the
  285.     // only one TSE containing the ID (no matter live or dead).
  286.     // If no matches were found, return 0.
  287.     TTSE_Lock x_FindBestTSE(const CSeq_id_Handle& handle) const;
  288.     void x_SetDirtyAnnotIndex(CTSE_Info& tse);
  289.     void x_ResetDirtyAnnotIndex(CTSE_Info& tse);
  290.     void x_IndexTSE(TTSEMap& tse_map,
  291.                     const CSeq_id_Handle& id, CTSE_Info* tse_info);
  292.     void x_UnindexTSE(TTSEMap& tse_map,
  293.                       const CSeq_id_Handle& id, CTSE_Info* tse_info);
  294.     void x_IndexSeqTSE(const CSeq_id_Handle& idh, CTSE_Info* tse_info);
  295.     void x_UnindexSeqTSE(const CSeq_id_Handle& idh, CTSE_Info* tse_info);
  296.     void x_IndexAnnotTSE(const CSeq_id_Handle& idh, CTSE_Info* tse_info);
  297.     void x_UnindexAnnotTSE(const CSeq_id_Handle& idh, CTSE_Info* tse_info);
  298.     void x_IndexAnnotTSEs(CTSE_Info* tse_info);
  299.     void x_UnindexAnnotTSEs(CTSE_Info* tse_info);
  300.     // Global cleanup -- search for unlocked TSEs and drop them.
  301.     void x_CleanupUnusedEntries(void);
  302.     // Change live/dead status of a TSE
  303.     void x_UpdateTSEStatus(CTSE_Info& tse, bool dead);
  304.     void x_CollectBioseqs(const CSeq_entry_Info& info,
  305.                           TBioseq_InfoSet& bioseqs,
  306.                           CSeq_inst::EMol filter,
  307.                           TBioseqLevelFlag level);
  308. #if 0
  309.     typedef CRWLock TMainLock;
  310. #else
  311.     typedef CMutex TMainLock;
  312. #endif
  313. #if 0
  314.     typedef CRWLock TAnnotLock;
  315. #else
  316.     typedef CFastMutex TAnnotLock;
  317. #endif
  318.     typedef TMainLock::TReadLockGuard   TMainReadLockGuard;
  319.     typedef TMainLock::TWriteLockGuard  TMainWriteLockGuard;
  320.     typedef TAnnotLock::TReadLockGuard  TAnnotReadLockGuard;
  321.     typedef TAnnotLock::TWriteLockGuard TAnnotWriteLockGuard;
  322.     // Used to lock: m_*_InfoMap, m_TSE_seq
  323.     // Is locked before locks in CTSE_Info
  324.     mutable TMainLock     m_DSMainLock;
  325.     // Used to lock: m_TSE_annot, m_TSE_annot_is_dirty
  326.     // Is locked after locks in CTSE_Info
  327.     mutable TAnnotLock    m_DSAnnotLock;
  328.     CRef<CDataLoader>     m_Loader;
  329.     CConstRef<CSeq_entry> m_pTopEntry;
  330.     CObjectManager*       m_ObjMgr;
  331.     TTSE_Set              m_TSE_Set;
  332.     TTSE_InfoMap          m_TSE_InfoMap;       // All known TSEs, (locked once)
  333.     TSeq_entry_InfoMap    m_Seq_entry_InfoMap; // All known Seq-entries
  334.     TSeq_annot_InfoMap    m_Seq_annot_InfoMap; // All known Seq-annots
  335.     TBioseq_InfoMap       m_Bioseq_InfoMap;    // All known Bioseqs
  336.     TTSEMap               m_TSE_seq;           // id -> TSE with bioseq
  337.     TTSEMap               m_TSE_annot;         // id -> TSE with annots
  338.     // TSE with annotations need to be indexed.
  339.     TDirtyAnnot_TSEs      m_DirtyAnnot_TSEs;
  340.     // Default priority for the datasource
  341.     TPriority             m_DefaultPriority;
  342.     // Prefetching thread and lock, used when initializing the thread
  343.     CRef<CPrefetchThread> m_PrefetchThread;
  344.     CFastMutex            m_PrefetchLock;
  345.     // hide copy constructor
  346.     CDataSource(const CDataSource&);
  347.     CDataSource& operator=(const CDataSource&);
  348. };
  349. inline
  350. CDataLoader* CDataSource::GetDataLoader(void) const
  351. {
  352.     return const_cast<CDataLoader*>(m_Loader.GetPointerOrNull());
  353. }
  354. inline
  355. CConstRef<CSeq_entry> CDataSource::GetTopEntry(void)
  356. {
  357.     return m_pTopEntry;
  358. }
  359. inline
  360. bool CDataSource::IsEmpty(void) const
  361. {
  362.     return m_Loader == 0  &&  m_TSE_Set.empty();
  363. }
  364. inline
  365. bool CDataSource::IsLive(const CTSE_Info& tse)
  366. {
  367.     return !tse.IsDead();
  368. }
  369. inline
  370. CDataSource::TPriority CDataSource::GetDefaultPriority(void) const
  371. {
  372.     return m_DefaultPriority;
  373. }
  374. inline
  375. void CDataSource::SetDefaultPriority(TPriority priority)
  376. {
  377.     m_DefaultPriority = priority;
  378. }
  379. END_SCOPE(objects)
  380. END_NCBI_SCOPE
  381. /*
  382. * ---------------------------------------------------------------------------
  383. * $Log: data_source.hpp,v $
  384. * Revision 1000.2  2004/04/16 16:59:58  gouriano
  385. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.74
  386. *
  387. * Revision 1.74  2004/04/16 13:31:46  grichenk
  388. * Added data pre-fetching functions.
  389. *
  390. * Revision 1.73  2004/03/31 17:08:06  vasilche
  391. * Implemented ConvertSeqToSet and ConvertSetToSeq.
  392. *
  393. * Revision 1.72  2004/03/24 18:30:28  vasilche
  394. * Fixed edit API.
  395. * Every *_Info object has its own shallow copy of original object.
  396. *
  397. * Revision 1.71  2004/03/16 15:47:26  vasilche
  398. * Added CBioseq_set_Handle and set of EditHandles
  399. *
  400. * Revision 1.70  2004/02/03 19:02:16  vasilche
  401. * Fixed broken 'dirty annot index' state after RemoveEntry().
  402. *
  403. * Revision 1.69  2004/02/02 14:46:42  vasilche
  404. * Several performance fixed - do not iterate whole tse set in CDataSource.
  405. *
  406. * Revision 1.68  2003/12/18 16:38:05  grichenk
  407. * Added CScope::RemoveEntry()
  408. *
  409. * Revision 1.67  2003/10/07 13:43:22  vasilche
  410. * Added proper handling of named Seq-annots.
  411. * Added feature search from named Seq-annots.
  412. * Added configurable adaptive annotation search (default: gene, cds, mrna).
  413. * Fixed selection of blobs for loading from GenBank.
  414. * Added debug checks to CSeq_id_Mapper for easier finding lost CSeq_id_Handles.
  415. * Fixed leaked split chunks annotation stubs.
  416. * Moved some classes definitions in separate *.cpp files.
  417. *
  418. * Revision 1.66  2003/09/30 16:22:01  vasilche
  419. * Updated internal object manager classes to be able to load ID2 data.
  420. * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  421. * Scope caches results of requests for data to data loaders.
  422. * Optimized CSeq_id_Handle for gis.
  423. * Optimized bioseq lookup in scope.
  424. * Reduced object allocations in annotation iterators.
  425. * CScope is allowed to be destroyed before other objects using this scope are
  426. * deleted (feature iterators, bioseq handles etc).
  427. * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  428. * Added 'adaptive' option to objmgr_demo application.
  429. *
  430. * Revision 1.65  2003/09/03 20:00:00  grichenk
  431. * Added sequence filtering by level (mains/parts/all)
  432. *
  433. * Revision 1.64  2003/08/15 19:19:15  vasilche
  434. * Fixed memory leak in string packing hooks.
  435. * Fixed processing of 'partial' flag of features.
  436. * Allow table packing of non-point SNP.
  437. * Allow table packing of SNP with long alleles.
  438. *
  439. * Revision 1.63  2003/08/14 20:05:18  vasilche
  440. * Simple SNP features are stored as table internally.
  441. * They are recreated when needed using CFeat_CI.
  442. *
  443. * Revision 1.62  2003/08/06 20:51:16  grichenk
  444. * Removed declarations of non-existent methods
  445. *
  446. * Revision 1.61  2003/08/04 17:04:29  grichenk
  447. * Added default data-source priority assignment.
  448. * Added support for iterating all annotations from a
  449. * seq-entry or seq-annot.
  450. *
  451. * Revision 1.60  2003/07/17 20:07:55  vasilche
  452. * Reduced memory usage by feature indexes.
  453. * SNP data is loaded separately through PUBSEQ_OS.
  454. * String compression for SNP data.
  455. *
  456. * Revision 1.59  2003/06/24 14:25:18  vasilche
  457. * Removed obsolete CTSE_Guard class.
  458. * Used separate mutexes for bioseq and annot maps.
  459. *
  460. * Revision 1.58  2003/06/19 18:23:44  vasilche
  461. * Added several CXxx_ScopeInfo classes for CScope related information.
  462. * CBioseq_Handle now uses reference to CBioseq_ScopeInfo.
  463. * Some fine tuning of locking in CScope.
  464. *
  465. * Revision 1.55  2003/05/20 15:44:37  vasilche
  466. * Fixed interaction of CDataSource and CDataLoader in multithreaded app.
  467. * Fixed some warnings on WorkShop.
  468. * Added workaround for memory leak on WorkShop.
  469. *
  470. * Revision 1.54  2003/05/14 18:39:26  grichenk
  471. * Simplified TSE caching and filtering in CScope, removed
  472. * some obsolete members and functions.
  473. *
  474. * Revision 1.53  2003/05/06 18:54:08  grichenk
  475. * Moved TSE filtering from CDataSource to CScope, changed
  476. * some filtering rules (e.g. priority is now more important
  477. * than scope history). Added more caches to CScope.
  478. *
  479. * Revision 1.52  2003/05/05 20:59:48  vasilche
  480. * Use one static mutex for all instances of CTSE_LockingSet.
  481. *
  482. * Revision 1.51  2003/04/29 19:51:12  vasilche
  483. * Fixed interaction of Data Loader garbage collector and TSE locking mechanism.
  484. * Made some typedefs more consistent.
  485. *
  486. * Revision 1.50  2003/04/24 16:12:37  vasilche
  487. * Object manager internal structures are splitted more straightforward.
  488. * Removed excessive header dependencies.
  489. *
  490. * Revision 1.49  2003/04/14 21:32:16  grichenk
  491. * Avoid passing CScope as an argument to CDataSource methods
  492. *
  493. * Revision 1.48  2003/03/24 21:26:43  grichenk
  494. * Added support for CTSE_CI
  495. *
  496. * Revision 1.47  2003/03/21 19:22:50  grichenk
  497. * Redesigned TSE locking, replaced CTSE_Lock with CRef<CTSE_Info>.
  498. *
  499. * Revision 1.46  2003/03/18 21:48:28  grichenk
  500. * Removed obsolete class CAnnot_CI
  501. *
  502. * Revision 1.45  2003/03/18 14:52:57  grichenk
  503. * Removed obsolete methods, replaced seq-id with seq-id handle
  504. * where possible. Added argument to limit annotations update to
  505. * a single seq-entry.
  506. *
  507. * Revision 1.44  2003/03/11 14:15:50  grichenk
  508. * +Data-source priority
  509. *
  510. * Revision 1.43  2003/03/10 16:55:16  vasilche
  511. * Cleaned SAnnotSelector structure.
  512. * Added shortcut when features are limited to one TSE.
  513. *
  514. * Revision 1.42  2003/03/03 20:31:09  vasilche
  515. * Removed obsolete method PopulateTSESet().
  516. *
  517. * Revision 1.41  2003/02/27 14:35:32  vasilche
  518. * Splitted PopulateTSESet() by logically independent parts.
  519. *
  520. * Revision 1.40  2003/02/25 14:48:07  vasilche
  521. * Added Win32 export modifier to object manager classes.
  522. *
  523. * Revision 1.39  2003/02/24 18:57:21  vasilche
  524. * Make feature gathering in one linear pass using CSeqMap iterator.
  525. * Do not use feture index by sub locations.
  526. * Sort features at the end of gathering in one vector.
  527. * Extracted some internal structures and classes in separate header.
  528. * Delay creation of mapped features.
  529. *
  530. * Revision 1.38  2003/02/24 14:51:10  grichenk
  531. * Minor improvements in annot indexing
  532. *
  533. * Revision 1.37  2003/02/13 14:34:32  grichenk
  534. * Renamed CAnnotObject -> CAnnotObject_Info
  535. * + CSeq_annot_Info and CAnnotObject_Ref
  536. * Moved some members of CAnnotObject to CSeq_annot_Info
  537. * and CAnnotObject_Ref.
  538. * Added feat/align/graph to CAnnotObject_Info map
  539. * to CDataSource.
  540. *
  541. * Revision 1.36  2003/02/05 17:57:41  dicuccio
  542. * Moved into include/objects/objmgr/impl to permit data loaders to be defined
  543. * outside of xobjmgr.
  544. *
  545. * Revision 1.35  2003/01/29 22:03:46  grichenk
  546. * Use single static CSeq_id_Mapper instead of per-OM model.
  547. *
  548. * Revision 1.34  2003/01/22 20:11:54  vasilche
  549. * Merged functionality of CSeqMapResolved_CI to CSeqMap_CI.
  550. * CSeqMap_CI now supports resolution and iteration over sequence range.
  551. * Added several caches to CScope.
  552. * Optimized CSeqVector().
  553. * Added serveral variants of CBioseqHandle::GetSeqVector().
  554. * Tried to optimize annotations iterator (not much success).
  555. * Rewritten CHandleRange and CHandleRangeMap classes to avoid sorting of list.
  556. *
  557. * Revision 1.33  2002/12/26 20:55:17  dicuccio
  558. * Moved seq_id_mapper.hpp, tse_info.hpp, and bioseq_info.hpp -> include/ tree
  559. *
  560. * Revision 1.32  2002/12/26 16:39:24  vasilche
  561. * Object manager class CSeqMap rewritten.
  562. *
  563. * Revision 1.31  2002/12/06 15:36:00  grichenk
  564. * Added overlap type for annot-iterators
  565. *
  566. * Revision 1.30  2002/11/08 22:15:51  grichenk
  567. * Added methods for removing/replacing annotations
  568. *
  569. * Revision 1.29  2002/10/18 19:12:40  grichenk
  570. * Removed mutex pools, converted most static mutexes to non-static.
  571. * Protected CSeqMap::x_Resolve() with mutex. Modified code to prevent
  572. * dead-locks.
  573. *
  574. * Revision 1.28  2002/10/02 17:58:23  grichenk
  575. * Added sequence type filter to CBioseq_CI
  576. *
  577. * Revision 1.27  2002/09/30 20:01:19  grichenk
  578. * Added methods to support CBioseq_CI
  579. *
  580. * Revision 1.26  2002/07/08 20:51:01  grichenk
  581. * Moved log to the end of file
  582. * Replaced static mutex (in CScope, CDataSource) with the mutex
  583. * pool. Redesigned CDataSource data locking.
  584. *
  585. * Revision 1.25  2002/06/04 17:18:33  kimelman
  586. * memory cleanup :  new/delete/Cref rearrangements
  587. *
  588. * Revision 1.24  2002/05/31 17:53:00  grichenk
  589. * Optimized for better performance (CTSE_Info uses atomic counter,
  590. * delayed annotations indexing, no location convertions in
  591. * CAnnot_Types_CI if no references resolution is required etc.)
  592. *
  593. * Revision 1.23  2002/05/28 18:00:43  gouriano
  594. * DebugDump added
  595. *
  596. * Revision 1.22  2002/05/14 20:06:26  grichenk
  597. * Improved CTSE_Info locking by CDataSource and CDataLoader
  598. *
  599. * Revision 1.21  2002/05/06 03:28:47  vakatov
  600. * OM/OM1 renaming
  601. *
  602. * Revision 1.20  2002/05/03 21:28:09  ucko
  603. * Introduce T(Signed)SeqPos.
  604. *
  605. * Revision 1.19  2002/04/17 21:09:14  grichenk
  606. * Fixed annotations loading
  607. * +IsSynonym()
  608. *
  609. * Revision 1.18  2002/04/11 12:08:21  grichenk
  610. * Fixed GetResolvedSeqMap() implementation
  611. *
  612. * Revision 1.17  2002/03/28 14:02:31  grichenk
  613. * Added scope history checks to CDataSource::x_FindBestTSE()
  614. *
  615. * Revision 1.16  2002/03/20 04:50:13  kimelman
  616. * GB loader added
  617. *
  618. * Revision 1.15  2002/03/07 21:25:34  grichenk
  619. * +GetSeq_annot() in annotation iterators
  620. *
  621. * Revision 1.14  2002/03/05 18:44:55  grichenk
  622. * +x_UpdateTSEStatus()
  623. *
  624. * Revision 1.13  2002/03/05 16:09:10  grichenk
  625. * Added x_CleanupUnusedEntries()
  626. *
  627. * Revision 1.12  2002/03/04 15:09:27  grichenk
  628. * Improved MT-safety. Added live/dead flag to CDataSource methods.
  629. *
  630. * Revision 1.11  2002/03/01 19:41:34  gouriano
  631. * *** empty log message ***
  632. *
  633. * Revision 1.10  2002/02/28 20:53:32  grichenk
  634. * Implemented attaching segmented sequence data. Fixed minor bugs.
  635. *
  636. * Revision 1.9  2002/02/21 19:27:05  grichenk
  637. * Rearranged includes. Added scope history. Added searching for the
  638. * best seq-id match in data sources and scopes. Updated tests.
  639. *
  640. * Revision 1.8  2002/02/07 21:27:35  grichenk
  641. * Redesigned CDataSource indexing: seq-id handle -> TSE -> seq/annot
  642. *
  643. * Revision 1.7  2002/02/06 21:46:11  gouriano
  644. * *** empty log message ***
  645. *
  646. * Revision 1.6  2002/02/05 21:46:28  gouriano
  647. * added FindSeqid function, minor tuneup in CSeq_id_mapper
  648. *
  649. * Revision 1.5  2002/01/29 17:45:00  grichenk
  650. * Added seq-id handles locking
  651. *
  652. * Revision 1.4  2002/01/28 19:44:49  gouriano
  653. * changed the interface of BioseqHandle: two functions moved from Scope
  654. *
  655. * Revision 1.3  2002/01/23 21:59:31  grichenk
  656. * Redesigned seq-id handles and mapper
  657. *
  658. * Revision 1.2  2002/01/18 15:56:24  gouriano
  659. * changed TSeqMaps definition
  660. *
  661. * Revision 1.1  2002/01/16 16:25:55  gouriano
  662. * restructured objmgr
  663. *
  664. * Revision 1.1  2002/01/11 19:04:01  gouriano
  665. * restructured objmgr
  666. *
  667. *
  668. * ===========================================================================
  669. */
  670. #endif  // OBJECTS_OBJMGR_IMPL___DATA_SOURCE__HPP