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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: heap_scope.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:23:24  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: heap_scope.cpp,v 1000.1 2004/06/01 19:23:24 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. * Authors:
  35. *           Andrei Gourianov
  36. *           Aleksey Grichenko
  37. *           Michael Kimelman
  38. *           Denis Vakatov
  39. *           Eugene Vasilchenko
  40. *
  41. * File Description:
  42. *           Scope is top-level object available to a client.
  43. *           Its purpose is to define a scope of visibility and reference
  44. *           resolution and provide access to the bio sequence data
  45. *
  46. */
  47. #include <ncbi_pch.hpp>
  48. #include <objmgr/impl/heap_scope.hpp>
  49. #include <objmgr/impl/scope_impl.hpp>
  50. #include <objmgr/scope.hpp>
  51. BEGIN_NCBI_SCOPE
  52. BEGIN_SCOPE(objects)
  53. /////////////////////////////////////////////////////////////////////////////
  54. //
  55. // CHeapScope
  56. //
  57. /////////////////////////////////////////////////////////////////////////////
  58. void CHeapScope::Set(CScope* scope)
  59. {
  60.     if ( scope ) {
  61.         m_Scope.Reset(scope->m_Impl->m_HeapScope);
  62.         _ASSERT(m_Scope);
  63.     }
  64.     else {
  65.         m_Scope.Reset();
  66.     }
  67. }
  68. CScope& CHeapScope::GetScope(void) const
  69. {
  70.     return static_cast<CScope&>(const_cast<CObject&>(*m_Scope));
  71. }
  72. CScope* CHeapScope::GetScopeOrNull(void) const
  73. {
  74.     return static_cast<CScope*>
  75.         (const_cast<CObject*>(m_Scope.GetPointerOrNull()));
  76. }
  77. CScope_Impl* CHeapScope::GetImpl(void) const
  78. {
  79.     return GetScope().m_Impl.GetPointer();
  80. }
  81. END_SCOPE(objects)
  82. END_NCBI_SCOPE
  83. /*
  84. * ---------------------------------------------------------------------------
  85. * $Log: heap_scope.cpp,v $
  86. * Revision 1000.1  2004/06/01 19:23:24  gouriano
  87. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  88. *
  89. * Revision 1.3  2004/05/21 21:42:12  gorelenk
  90. * Added PCH ncbi_pch.hpp
  91. *
  92. * Revision 1.2  2004/04/12 16:49:16  vasilche
  93. * Allow null scope in CSeqMap_CI and CSeqVector.
  94. *
  95. * Revision 1.1  2004/03/16 15:47:27  vasilche
  96. * Added CBioseq_set_Handle and set of EditHandles
  97. *
  98. * Revision 1.101  2004/02/19 17:23:01  vasilche
  99. * Changed order of deletion of heap scope and scope impl objects.
  100. * Reduce number of calls to x_ResetHistory().
  101. *
  102. * Revision 1.100  2004/02/10 21:15:16  grichenk
  103. * Added reverse ID matching.
  104. *
  105. * Revision 1.99  2004/02/09 14:42:46  vasilche
  106. * Temporary fix in GetSynonyms() to get accession without version.
  107. *
  108. * Revision 1.98  2004/02/02 14:46:43  vasilche
  109. * Several performance fixed - do not iterate whole tse set in CDataSource.
  110. *
  111. * Revision 1.97  2004/01/29 20:33:28  vasilche
  112. * Do not resolve any Seq-ids in CScope::GetSynonyms() -
  113. * assume all not resolved Seq-id as synonym.
  114. * Seq-id conflict messages made clearer.
  115. *
  116. * Revision 1.96  2004/01/28 20:50:49  vasilche
  117. * Fixed NULL pointer exception in GetSynonyms() when matching Seq-id w/o version.
  118. *
  119. * Revision 1.95  2004/01/07 20:42:01  grichenk
  120. * Fixed matching of accession to accession.version
  121. *
  122. * Revision 1.94  2003/12/18 16:38:07  grichenk
  123. * Added CScope::RemoveEntry()
  124. *
  125. * Revision 1.93  2003/12/12 16:59:51  grichenk
  126. * Fixed conflicts resolving (ask data source).
  127. *
  128. * Revision 1.92  2003/12/03 20:55:12  grichenk
  129. * Check value returned by x_GetBioseq_Info()
  130. *
  131. * Revision 1.91  2003/11/21 20:33:03  grichenk
  132. * Added GetBioseqHandleFromTSE(CSeq_id, CSeq_entry)
  133. *
  134. * Revision 1.90  2003/11/19 22:18:03  grichenk
  135. * All exceptions are now CException-derived. Catch "exception" rather
  136. * than "runtime_error".
  137. *
  138. * Revision 1.89  2003/11/12 15:49:39  vasilche
  139. * Added loading annotations on non gi Seq-id.
  140. *
  141. * Revision 1.88  2003/10/23 13:47:27  vasilche
  142. * Check CSeq_id_Handle for null in CScope::GetBioseqHandle().
  143. *
  144. * Revision 1.87  2003/10/22 14:08:15  vasilche
  145. * Detach all CBbioseq_Handle objects from scope in CScope::ResetHistory().
  146. *
  147. * Revision 1.86  2003/10/22 13:54:36  vasilche
  148. * All CScope::GetBioseqHandle() methods return 'null' CBioseq_Handle object
  149. * instead of throwing an exception.
  150. *
  151. * Revision 1.85  2003/10/20 18:23:54  vasilche
  152. * Make CScope::GetSynonyms() to skip conflicting ids.
  153. *
  154. * Revision 1.84  2003/10/09 13:58:21  vasilche
  155. * Fixed conflict when the same datasource appears twice with equal priorities.
  156. *
  157. * Revision 1.83  2003/10/07 13:43:23  vasilche
  158. * Added proper handling of named Seq-annots.
  159. * Added feature search from named Seq-annots.
  160. * Added configurable adaptive annotation search (default: gene, cds, mrna).
  161. * Fixed selection of blobs for loading from GenBank.
  162. * Added debug checks to CSeq_id_Mapper for easier finding lost CSeq_id_Handles.
  163. * Fixed leaked split chunks annotation stubs.
  164. * Moved some classes definitions in separate *.cpp files.
  165. *
  166. * Revision 1.82  2003/09/30 16:22:03  vasilche
  167. * Updated internal object manager classes to be able to load ID2 data.
  168. * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  169. * Scope caches results of requests for data to data loaders.
  170. * Optimized CSeq_id_Handle for gis.
  171. * Optimized bioseq lookup in scope.
  172. * Reduced object allocations in annotation iterators.
  173. * CScope is allowed to be destroyed before other objects using this scope are
  174. * deleted (feature iterators, bioseq handles etc).
  175. * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  176. * Added 'adaptive' option to objmgr_demo application.
  177. *
  178. * Revision 1.81  2003/09/05 20:50:26  grichenk
  179. * +AddBioseq(CBioseq&)
  180. *
  181. * Revision 1.80  2003/09/05 17:29:40  grichenk
  182. * Structurized Object Manager exceptions
  183. *
  184. * Revision 1.79  2003/09/03 20:00:02  grichenk
  185. * Added sequence filtering by level (mains/parts/all)
  186. *
  187. * Revision 1.78  2003/08/04 17:03:01  grichenk
  188. * Added constructors to iterate all annotations from a
  189. * seq-entry or seq-annot.
  190. *
  191. * Revision 1.77  2003/07/25 15:25:25  grichenk
  192. * Added CSeq_annot_CI class
  193. *
  194. * Revision 1.76  2003/07/17 20:07:56  vasilche
  195. * Reduced memory usage by feature indexes.
  196. * SNP data is loaded separately through PUBSEQ_OS.
  197. * String compression for SNP data.
  198. *
  199. * Revision 1.75  2003/07/14 21:13:59  grichenk
  200. * Added seq-loc dump in GetBioseqHandle(CSeqLoc)
  201. *
  202. * Revision 1.74  2003/06/30 18:42:10  vasilche
  203. * CPriority_I made to use less memory allocations/deallocations.
  204. *
  205. * Revision 1.73  2003/06/24 14:25:18  vasilche
  206. * Removed obsolete CTSE_Guard class.
  207. * Used separate mutexes for bioseq and annot maps.
  208. *
  209. * Revision 1.72  2003/06/19 18:23:46  vasilche
  210. * Added several CXxx_ScopeInfo classes for CScope related information.
  211. * CBioseq_Handle now uses reference to CBioseq_ScopeInfo.
  212. * Some fine tuning of locking in CScope.
  213. *
  214. * Revision 1.69  2003/05/27 19:44:06  grichenk
  215. * Added CSeqVector_CI class
  216. *
  217. * Revision 1.68  2003/05/20 15:44:37  vasilche
  218. * Fixed interaction of CDataSource and CDataLoader in multithreaded app.
  219. * Fixed some warnings on WorkShop.
  220. * Added workaround for memory leak on WorkShop.
  221. *
  222. * Revision 1.67  2003/05/14 18:39:28  grichenk
  223. * Simplified TSE caching and filtering in CScope, removed
  224. * some obsolete members and functions.
  225. *
  226. * Revision 1.66  2003/05/13 18:33:01  vasilche
  227. * Fixed CScope::GetTSESetWithAnnots() conflict resolution.
  228. *
  229. * Revision 1.65  2003/05/12 19:18:29  vasilche
  230. * Fixed locking of object manager classes in multi-threaded application.
  231. *
  232. * Revision 1.64  2003/05/09 20:28:03  grichenk
  233. * Changed warnings to info
  234. *
  235. * Revision 1.63  2003/05/06 18:54:09  grichenk
  236. * Moved TSE filtering from CDataSource to CScope, changed
  237. * some filtering rules (e.g. priority is now more important
  238. * than scope history). Added more caches to CScope.
  239. *
  240. * Revision 1.62  2003/04/29 19:51:13  vasilche
  241. * Fixed interaction of Data Loader garbage collector and TSE locking mechanism.
  242. * Made some typedefs more consistent.
  243. *
  244. * Revision 1.61  2003/04/24 16:12:38  vasilche
  245. * Object manager internal structures are splitted more straightforward.
  246. * Removed excessive header dependencies.
  247. *
  248. * Revision 1.60  2003/04/15 14:21:52  vasilche
  249. * Removed unnecessary assignment.
  250. *
  251. * Revision 1.59  2003/04/14 21:32:18  grichenk
  252. * Avoid passing CScope as an argument to CDataSource methods
  253. *
  254. * Revision 1.58  2003/04/09 16:04:32  grichenk
  255. * SDataSourceRec replaced with CPriorityNode
  256. * Added CScope::AddScope(scope, priority) to allow scope nesting
  257. *
  258. * Revision 1.57  2003/04/03 14:18:09  vasilche
  259. * Added public GetSynonyms() method.
  260. *
  261. * Revision 1.56  2003/03/26 21:00:19  grichenk
  262. * Added seq-id -> tse with annotation cache to CScope
  263. *
  264. * Revision 1.55  2003/03/24 21:26:45  grichenk
  265. * Added support for CTSE_CI
  266. *
  267. * Revision 1.54  2003/03/21 19:22:51  grichenk
  268. * Redesigned TSE locking, replaced CTSE_Lock with CRef<CTSE_Info>.
  269. *
  270. * Revision 1.53  2003/03/19 21:55:50  grichenk
  271. * Avoid re-mapping TSEs in x_AddToHistory() if already indexed
  272. *
  273. * Revision 1.52  2003/03/18 14:52:59  grichenk
  274. * Removed obsolete methods, replaced seq-id with seq-id handle
  275. * where possible. Added argument to limit annotations update to
  276. * a single seq-entry.
  277. *
  278. * Revision 1.51  2003/03/12 20:09:34  grichenk
  279. * Redistributed members between CBioseq_Handle, CBioseq_Info and CTSE_Info
  280. *
  281. * Revision 1.50  2003/03/11 15:51:06  kuznets
  282. * iterate -> ITERATE
  283. *
  284. * Revision 1.49  2003/03/11 14:15:52  grichenk
  285. * +Data-source priority
  286. *
  287. * Revision 1.48  2003/03/10 16:55:17  vasilche
  288. * Cleaned SAnnotSelector structure.
  289. * Added shortcut when features are limited to one TSE.
  290. *
  291. * Revision 1.47  2003/03/05 20:55:29  vasilche
  292. * Added cache cleaning in CScope::ResetHistory().
  293. *
  294. * Revision 1.46  2003/03/03 20:32:47  vasilche
  295. * Removed obsolete method GetSynonyms().
  296. *
  297. * Revision 1.45  2003/02/28 21:54:18  grichenk
  298. * +CSynonymsSet::empty(), removed _ASSERT() in CScope::GetSynonyms()
  299. *
  300. * Revision 1.44  2003/02/28 20:02:37  grichenk
  301. * Added synonyms cache and x_GetSynonyms()
  302. *
  303. * Revision 1.43  2003/02/27 14:35:31  vasilche
  304. * Splitted PopulateTSESet() by logically independent parts.
  305. *
  306. * Revision 1.42  2003/02/24 18:57:22  vasilche
  307. * Make feature gathering in one linear pass using CSeqMap iterator.
  308. * Do not use feture index by sub locations.
  309. * Sort features at the end of gathering in one vector.
  310. * Extracted some internal structures and classes in separate header.
  311. * Delay creation of mapped features.
  312. *
  313. * Revision 1.41  2003/02/05 17:59:17  dicuccio
  314. * Moved formerly private headers into include/objects/objmgr/impl
  315. *
  316. * Revision 1.40  2003/01/29 22:03:46  grichenk
  317. * Use single static CSeq_id_Mapper instead of per-OM model.
  318. *
  319. * Revision 1.39  2003/01/22 20:11:54  vasilche
  320. * Merged functionality of CSeqMapResolved_CI to CSeqMap_CI.
  321. * CSeqMap_CI now supports resolution and iteration over sequence range.
  322. * Added several caches to CScope.
  323. * Optimized CSeqVector().
  324. * Added serveral variants of CBioseqHandle::GetSeqVector().
  325. * Tried to optimize annotations iterator (not much success).
  326. * Rewritten CHandleRange and CHandleRangeMap classes to avoid sorting of list.
  327. *
  328. * Revision 1.38  2002/12/26 20:55:18  dicuccio
  329. * Moved seq_id_mapper.hpp, tse_info.hpp, and bioseq_info.hpp -> include/ tree
  330. *
  331. * Revision 1.37  2002/12/26 16:39:24  vasilche
  332. * Object manager class CSeqMap rewritten.
  333. *
  334. * Revision 1.36  2002/11/08 22:15:51  grichenk
  335. * Added methods for removing/replacing annotations
  336. *
  337. * Revision 1.35  2002/11/08 19:43:35  grichenk
  338. * CConstRef<> constructor made explicit
  339. *
  340. * Revision 1.34  2002/11/04 21:29:12  grichenk
  341. * Fixed usage of const CRef<> and CRef<> constructor
  342. *
  343. * Revision 1.33  2002/11/01 05:34:32  kans
  344. * added GetBioseqHandle taking CBioseq parameter
  345. *
  346. * Revision 1.32  2002/10/31 22:25:42  kans
  347. * added GetBioseqHandle taking CSeq_loc parameter
  348. *
  349. * Revision 1.31  2002/10/18 19:12:40  grichenk
  350. * Removed mutex pools, converted most static mutexes to non-static.
  351. * Protected CSeqMap::x_Resolve() with mutex. Modified code to prevent
  352. * dead-locks.
  353. *
  354. * Revision 1.30  2002/10/16 20:44:29  ucko
  355. * *** empty log message ***
  356. *
  357. * Revision 1.29  2002/10/02 17:58:23  grichenk
  358. * Added sequence type filter to CBioseq_CI
  359. *
  360. * Revision 1.28  2002/09/30 20:01:19  grichenk
  361. * Added methods to support CBioseq_CI
  362. *
  363. * Revision 1.27  2002/08/09 14:59:00  ucko
  364. * Restrict template <> to MIPSpro for now, as it also leads to link
  365. * errors with Compaq's compiler.  (Sigh.)
  366. *
  367. * Revision 1.26  2002/08/08 19:51:24  ucko
  368. * Omit EMPTY_TEMPLATE for GCC and KCC, as it evidently leads to link errors(!)
  369. *
  370. * Revision 1.25  2002/08/08 14:28:00  ucko
  371. * Add EMPTY_TEMPLATE to explicit instantiations.
  372. *
  373. * Revision 1.24  2002/08/07 18:21:57  ucko
  374. * Explicitly instantiate CMutexPool_Base<CScope>::sm_Pool
  375. *
  376. * Revision 1.23  2002/07/08 20:51:02  grichenk
  377. * Moved log to the end of file
  378. * Replaced static mutex (in CScope, CDataSource) with the mutex
  379. * pool. Redesigned CDataSource data locking.
  380. *
  381. * Revision 1.22  2002/06/04 17:18:33  kimelman
  382. * memory cleanup :  new/delete/Cref rearrangements
  383. *
  384. * Revision 1.21  2002/05/28 18:00:43  gouriano
  385. * DebugDump added
  386. *
  387. * Revision 1.20  2002/05/14 20:06:26  grichenk
  388. * Improved CTSE_Info locking by CDataSource and CDataLoader
  389. *
  390. * Revision 1.19  2002/05/06 03:28:47  vakatov
  391. * OM/OM1 renaming
  392. *
  393. * Revision 1.18  2002/04/22 20:04:39  grichenk
  394. * Fixed TSE dropping, removed commented code
  395. *
  396. * Revision 1.17  2002/04/17 21:09:40  grichenk
  397. * Fixed annotations loading
  398. *
  399. * Revision 1.16  2002/03/28 14:02:31  grichenk
  400. * Added scope history checks to CDataSource::x_FindBestTSE()
  401. *
  402. * Revision 1.15  2002/03/27 18:45:44  gouriano
  403. * three functions made public
  404. *
  405. * Revision 1.14  2002/03/20 21:20:39  grichenk
  406. * +CScope::ResetHistory()
  407. *
  408. * Revision 1.13  2002/02/28 20:53:32  grichenk
  409. * Implemented attaching segmented sequence data. Fixed minor bugs.
  410. *
  411. * Revision 1.12  2002/02/25 21:05:29  grichenk
  412. * Removed seq-data references caching. Increased MT-safety. Fixed typos.
  413. *
  414. * Revision 1.11  2002/02/21 19:27:06  grichenk
  415. * Rearranged includes. Added scope history. Added searching for the
  416. * best seq-id match in data sources and scopes. Updated tests.
  417. *
  418. * Revision 1.10  2002/02/07 21:27:35  grichenk
  419. * Redesigned CDataSource indexing: seq-id handle -> TSE -> seq/annot
  420. *
  421. * Revision 1.9  2002/02/06 21:46:11  gouriano
  422. * *** empty log message ***
  423. *
  424. * Revision 1.8  2002/02/05 21:46:28  gouriano
  425. * added FindSeqid function, minor tuneup in CSeq_id_mapper
  426. *
  427. * Revision 1.7  2002/01/29 17:45:34  grichenk
  428. * Removed debug output
  429. *
  430. * Revision 1.6  2002/01/28 19:44:49  gouriano
  431. * changed the interface of BioseqHandle: two functions moved from Scope
  432. *
  433. * Revision 1.5  2002/01/23 21:59:31  grichenk
  434. * Redesigned seq-id handles and mapper
  435. *
  436. * Revision 1.4  2002/01/18 17:06:29  gouriano
  437. * renamed CScope::GetSequence to CScope::GetSeqVector
  438. *
  439. * Revision 1.3  2002/01/18 15:54:14  gouriano
  440. * changed DropTopLevelSeqEntry()
  441. *
  442. * Revision 1.2  2002/01/16 16:25:57  gouriano
  443. * restructured objmgr
  444. *
  445. * Revision 1.1  2002/01/11 19:06:22  gouriano
  446. * restructured objmgr
  447. *
  448. *
  449. * ===========================================================================
  450. */