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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: reader.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/04/12 17:37:47  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.39
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef READER__HPP_INCLUDED
  10. #define READER__HPP_INCLUDED
  11. /* */
  12. /*  $Id: reader.hpp,v 1000.0 2004/04/12 17:37:47 gouriano Exp $
  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. *  Author:  Anton Butanaev, Eugene Vasilchenko
  36. *
  37. *  File Description: Base data reader interface
  38. *
  39. */
  40. #include <corelib/ncbiobj.hpp>
  41. #include <corelib/plugin_manager.hpp>
  42. #include <objtools/data_loaders/genbank/seqref.hpp>
  43. #include <vector>
  44. BEGIN_NCBI_SCOPE
  45. class CObjectIStream;
  46. BEGIN_SCOPE(objects)
  47. class CSeqref;
  48. class CSeq_id;
  49. class CTSE_Info;
  50. class CSeq_annot_SNP_Info;
  51. class CTSE_Chunk_Info;
  52. class NCBI_XREADER_EXPORT CReader : public CObject
  53. {
  54. public:
  55.     CReader(void);
  56.     virtual ~CReader(void);
  57.     typedef TSeqPos TPos;
  58.     typedef unsigned TConn;
  59.     typedef vector< CRef<CSeqref> > TSeqrefs;
  60.     virtual int ResolveSeq_id_to_gi(const CSeq_id& id, TConn conn) = 0;
  61.     virtual void RetrieveSeqrefs(TSeqrefs& srs, int gi, TConn conn) = 0;
  62.     virtual void ResolveSeq_id(TSeqrefs& srs, const CSeq_id& id, TConn conn);
  63.     virtual void PurgeSeq_id_to_gi(const CSeq_id& id);
  64.     virtual void PurgeSeqrefs(const TSeqrefs& srs, const CSeq_id& id);
  65.     virtual CRef<CTSE_Info> GetBlob(const CSeqref& seqref,
  66.                                     TConn conn,
  67.                                     CTSE_Chunk_Info* chunk_info = 0);
  68.     virtual CRef<CTSE_Info> GetTSEBlob(const CSeqref& seqref, TConn conn) = 0;
  69.     virtual CRef<CTSE_Info> GetSNPBlob(const CSeqref& seqref, TConn conn);
  70.     virtual void GetTSEChunk(const CSeqref& seqref,
  71.                              CTSE_Chunk_Info& chunk_info,
  72.                              TConn conn);
  73.     virtual void GetSNPChunk(const CSeqref& seqref,
  74.                              CTSE_Chunk_Info& chunk_info,
  75.                              TConn conn);
  76.     virtual CRef<CSeq_annot_SNP_Info> GetSNPAnnot(const CSeqref& seqref,
  77.                                                   TConn conn) = 0;
  78.     // return the level of reasonable parallelism
  79.     // 1 - non MTsafe; 0 - no synchronization required,
  80.     // n - at most n connection is advised/supported
  81.     virtual TConn GetParallelLevel(void) const = 0;
  82.     virtual void SetParallelLevel(TConn conn) = 0;
  83.     virtual void Reconnect(TConn conn) = 0;
  84.     // returns the time in secons when already retrived data
  85.     // could become obsolete by fresher version 
  86.     // -1 - never
  87.     virtual int GetConst(const string& const_name) const;
  88.     enum ESatellite {
  89.         eSatellite_SNP = 15,
  90.         eSatellite_TRACE = 28,
  91.         eSatellite_TRACE_ASSM = 29,
  92.         eSatellite_TR_ASSM_CH = 30,
  93.         eSatellite_TRACE_CHGR = 31
  94.     };
  95.     enum {
  96.         kSNP_EntryId = 0,
  97.         kSNP_ChunkId = 0
  98.     };
  99.     static bool IsSNPSeqref(const CSeqref& seqref);
  100.     static void AddSNPSeqref(TSeqrefs& srs, int gi, int flags = 0);
  101.     static bool s_GetEnvFlag(const char* env, bool def_val);
  102.     static bool TrySNPSplit(void);
  103.     static bool TrySNPTable(void);
  104.     static bool TryStringPack(void);
  105.     static void SetSNPReadHooks(CObjectIStream& in);
  106.     static void SetSeqEntryReadHooks(CObjectIStream& in);
  107. };
  108. END_SCOPE(objects)
  109. NCBI_DECLARE_INTERFACE_VERSION(objects::CReader,  "omreader", 1, 1, 0);
  110. END_NCBI_SCOPE
  111. /*
  112. * $Log: reader.hpp,v $
  113. * Revision 1000.0  2004/04/12 17:37:47  gouriano
  114. * PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.39
  115. *
  116. * Revision 1.39  2004/03/16 17:49:18  vasilche
  117. * Use enum constant for TRACE_CHGR entries
  118. *
  119. * Revision 1.38  2004/02/18 13:59:57  dicuccio
  120. * Added additional satellites
  121. *
  122. * Revision 1.37  2004/01/22 20:10:33  vasilche
  123. * 1. Splitted ID2 specs to two parts.
  124. * ID2 now specifies only protocol.
  125. * Specification of ID2 split data is moved to seqsplit ASN module.
  126. * For now they are still reside in one resulting library as before - libid2.
  127. * As the result split specific headers are now in objects/seqsplit.
  128. * 2. Moved ID2 and ID1 specific code out of object manager.
  129. * Protocol is processed by corresponding readers.
  130. * ID2 split parsing is processed by ncbi_xreader library - used by all readers.
  131. * 3. Updated OBJMGR_LIBS correspondingly.
  132. *
  133. * Revision 1.36  2004/01/13 16:55:52  vasilche
  134. * CReader, CSeqref and some more classes moved from xobjmgr to separate lib.
  135. * Headers moved from include/objmgr to include/objtools/data_loaders/genbank.
  136. *
  137. * Revision 1.35  2003/12/19 19:47:43  vasilche
  138. * Added support for TRACE data, Seq-id ::= general { db "ti", tag id NNN }.
  139. *
  140. * Revision 1.34  2003/12/02 16:17:42  kuznets
  141. * Added plugin manager support for CReader interface and implementaions
  142. * (id1 reader, pubseq reader)
  143. *
  144. * Revision 1.33  2003/11/26 17:55:53  vasilche
  145. * Implemented ID2 split in ID1 cache.
  146. * Fixed loading of splitted annotations.
  147. *
  148. * Revision 1.32  2003/10/27 18:50:48  vasilche
  149. * Detect 'private' blobs in ID1 reader.
  150. * Avoid reconnecting after ID1 server replied with error packet.
  151. *
  152. * Revision 1.31  2003/10/27 15:05:41  vasilche
  153. * Added correct recovery of cached ID1 loader if gi->sat/satkey cache is invalid.
  154. * Added recognition of ID1 error codes: private, etc.
  155. * Some formatting of old code.
  156. *
  157. * Revision 1.30  2003/10/08 14:16:12  vasilche
  158. * Added version of blobs loaded from ID1.
  159. *
  160. * Revision 1.29  2003/10/07 13:43:22  vasilche
  161. * Added proper handling of named Seq-annots.
  162. * Added feature search from named Seq-annots.
  163. * Added configurable adaptive annotation search (default: gene, cds, mrna).
  164. * Fixed selection of blobs for loading from GenBank.
  165. * Added debug checks to CSeq_id_Mapper for easier finding lost CSeq_id_Handles.
  166. * Fixed leaked split chunks annotation stubs.
  167. * Moved some classes definitions in separate *.cpp files.
  168. *
  169. * Revision 1.28  2003/09/30 16:21:59  vasilche
  170. * Updated internal object manager classes to be able to load ID2 data.
  171. * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  172. * Scope caches results of requests for data to data loaders.
  173. * Optimized CSeq_id_Handle for gis.
  174. * Optimized bioseq lookup in scope.
  175. * Reduced object allocations in annotation iterators.
  176. * CScope is allowed to be destroyed before other objects using this scope are
  177. * deleted (feature iterators, bioseq handles etc).
  178. * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  179. * Added 'adaptive' option to objmgr_demo application.
  180. *
  181. * Revision 1.27  2003/08/27 14:24:43  vasilche
  182. * Simplified CCmpTSE class.
  183. *
  184. * Revision 1.26  2003/08/14 21:34:42  kans
  185. * fixed inconsistent line endings that stopped Mac compilation
  186. *
  187. * Revision 1.25  2003/08/14 20:05:18  vasilche
  188. * Simple SNP features are stored as table internally.
  189. * They are recreated when needed using CFeat_CI.
  190. *
  191. * Revision 1.24  2003/07/24 19:28:08  vasilche
  192. * Implemented SNP split for ID1 loader.
  193. *
  194. * Revision 1.23  2003/07/17 20:07:55  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.22  2003/04/24 16:12:37  vasilche
  200. * Object manager internal structures are splitted more straightforward.
  201. * Removed excessive header dependencies.
  202. *
  203. * Revision 1.21  2003/04/15 15:30:14  vasilche
  204. * Added include <memory> when needed.
  205. * Removed buggy buffer in printing methods.
  206. * Removed unnecessary include of stream_util.hpp.
  207. *
  208. * Revision 1.20  2003/04/15 14:24:07  vasilche
  209. * Changed CReader interface to not to use fake streams.
  210. *
  211. * Revision 1.19  2003/03/26 16:11:06  vasilche
  212. * Removed redundant const modifier from integral return types.
  213. *
  214. * Revision 1.18  2003/02/25 22:03:31  vasilche
  215. * Fixed identation.
  216. *
  217. * Revision 1.17  2002/12/26 20:51:35  dicuccio
  218. * Added Win32 export specifier
  219. *
  220. * Revision 1.16  2002/07/08 20:50:56  grichenk
  221. * Moved log to the end of file
  222. * Replaced static mutex (in CScope, CDataSource) with the mutex
  223. * pool. Redesigned CDataSource data locking.
  224. *
  225. * Revision 1.15  2002/05/06 20:37:08  ucko
  226. * Drop redundant CIStream:: which generated warnings under some compilers.
  227. *
  228. * Revision 1.14  2002/05/03 21:28:01  ucko
  229. * Introduce T(Signed)SeqPos.
  230. *
  231. * Revision 1.13  2002/04/08 18:37:56  ucko
  232. * Use IOS_BASE instead of ios_base for compatibility with old compilers.
  233. *
  234. * Revision 1.12  2002/03/27 20:22:32  butanaev
  235. * Added connection pool.
  236. *
  237. * Revision 1.11  2002/03/26 20:23:21  coremake
  238. * fake change
  239. *
  240. * Revision 1.10  2002/03/26 20:19:23  coremake
  241. * fake change
  242. *
  243. * Revision 1.9  2002/03/26 20:07:05  coremake
  244. * fake change
  245. *
  246. * Revision 1.8  2002/03/26 19:43:01  butanaev
  247. * Fixed compilation for g++.
  248. *
  249. * Revision 1.7  2002/03/26 18:48:30  butanaev
  250. * Fixed bug not deleting streambuf.
  251. *
  252. * Revision 1.6  2002/03/26 17:16:59  kimelman
  253. * reader stream fixes
  254. *
  255. * Revision 1.5  2002/03/22 18:49:23  kimelman
  256. * stream fix: WS skipping in binary stream
  257. *
  258. * Revision 1.4  2002/03/21 19:14:52  kimelman
  259. * GB related bugfixes
  260. *
  261. * Revision 1.3  2002/03/21 01:34:50  kimelman
  262. * gbloader related bugfixes
  263. *
  264. * Revision 1.2  2002/03/20 04:50:35  kimelman
  265. * GB loader added
  266. *
  267. * Revision 1.1  2002/01/11 19:04:03  gouriano
  268. * restructured objmgr
  269. *
  270. * Revision 1.5  2001/12/13 00:20:55  kimelman
  271. * bugfixes:
  272. *
  273. * Revision 1.4  2001/12/12 21:42:27  kimelman
  274. * a) int -> unsigned long
  275. * b) bool Compare -> int Compare
  276. *
  277. * Revision 1.3  2001/12/10 20:07:24  butanaev
  278. * Code cleanup.
  279. *
  280. * Revision 1.2  2001/12/07 21:25:19  butanaev
  281. * Interface development, code beautyfication.
  282. *
  283. * Revision 1.1  2001/12/07 16:11:44  butanaev
  284. * Switching to new reader interfaces.
  285. *
  286. * Revision 1.2  2001/12/06 18:06:22  butanaev
  287. * Ported to linux.
  288. *
  289. * Revision 1.1  2001/12/06 14:35:23  butanaev
  290. * New streamable interfaces designed, ID1 reimplemented.
  291. *
  292. */
  293. #endif // READER__HPP_INCLUDED