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

生物技术

开发平台:

C/C++

  1. #ifndef NCBI_OBJMGR_SPLIT_CACHE__HPP
  2. #define NCBI_OBJMGR_SPLIT_CACHE__HPP
  3. /*  $Id: split_cache.hpp,v 1000.1 2004/05/04 19:58:41 gorelenk Exp $
  4. * ===========================================================================
  5. *
  6. *                            PUBLIC DOMAIN NOTICE
  7. *               National Center for Biotechnology Information
  8. *
  9. *  This software/database is a "United States Government Work" under the
  10. *  terms of the United States Copyright Act.  It was written as part of
  11. *  the author's official duties as a United States Government employee and
  12. *  thus cannot be copyrighted.  This software/database is freely available
  13. *  to the public for use. The National Library of Medicine and the U.S.
  14. *  Government have not placed any restriction on its use or reproduction.
  15. *
  16. *  Although all reasonable efforts have been taken to ensure the accuracy
  17. *  and reliability of the software and data, the NLM and the U.S.
  18. *  Government do not and cannot warrant the performance or results that
  19. *  may be obtained by using this software or data. The NLM and the U.S.
  20. *  Government disclaim all warranties, express or implied, including
  21. *  warranties of performance, merchantability or fitness for any particular
  22. *  purpose.
  23. *
  24. *  Please cite the author in any work or product based on this material.
  25. *
  26. * ===========================================================================
  27. *
  28. * Author:  Eugene Vasilchenko
  29. *
  30. * File Description:
  31. *   Application for splitting blobs withing ID1 cache
  32. *
  33. * ===========================================================================
  34. */
  35. #include <corelib/ncbistd.hpp>
  36. #include <corelib/ncbiapp.hpp>
  37. #include <memory>
  38. #include <set>
  39. #include <serial/serialdef.hpp>
  40. #include <objmgr/seq_id_handle.hpp>
  41. #include <objmgr/split/blob_splitter_params.hpp>
  42. BEGIN_NCBI_SCOPE
  43. class ICache;
  44. BEGIN_SCOPE(objects)
  45. class CObjectManager;
  46. class CSeq_id;
  47. class CScope;
  48. class CBioseq_Handle;
  49. class CDataLoader;
  50. class CCachedId1Reader;
  51. class CGBDataLoader;
  52. class CSeqref;
  53. /////////////////////////////////////////////////////////////////////////////
  54. //
  55. //  Application class
  56. //
  57. class CLevelGuard
  58. {
  59. public:
  60.     typedef size_t TLevel;
  61.     CLevelGuard(TLevel& level)
  62.         : m_Level(level)
  63.         {
  64.             ++m_Level;
  65.         }
  66.     ~CLevelGuard(void)
  67.         {
  68.             --m_Level;
  69.         }
  70.     operator TLevel(void) const
  71.         {
  72.             return m_Level;
  73.         }
  74. private:
  75.     TLevel& m_Level;
  76. };
  77. class CLog;
  78. class CSplitDataMaker;
  79. #define WAIT_LINE4(app) CLog line(app); line
  80. #define WAIT_LINE WAIT_LINE4(this)
  81. #define LINE(Msg) do { WAIT_LINE << Msg; } while(0)
  82. class CSplitCacheApp : public CNcbiApplication
  83. {
  84. public:
  85.     CSplitCacheApp(void);
  86.     ~CSplitCacheApp(void);
  87.     virtual void Init(void);
  88.     virtual int  Run (void);
  89.     void SetupCache(void);
  90.     void Process(void);
  91.     void ProcessSeqId(const CSeq_id& seq_id);
  92.     void ProcessGi(int gi);
  93.     void ProcessBlob(const CSeqref& seqref);
  94.     CNcbiOstream& Info(void) const;
  95.     static string GetFileName(const string& key,
  96.                               const string& suffix,
  97.                               const string& ext);
  98.     const SSplitterParams GetParams(void) const
  99.     {
  100.         return m_SplitterParams;
  101.     }
  102.     const CCachedId1Reader& GetReader(void) const
  103.     {
  104.         return *m_Reader;
  105.     }
  106.     ICache& GetCache(void)
  107.     {
  108.         return *m_Cache;
  109.     }
  110.     ICache& GetIdCache(void)
  111.     {
  112.         return *m_IdCache;
  113.     }
  114. protected:
  115.     CConstRef<CSeqref> GetSeqref(CBioseq_Handle bh);
  116.     typedef set< pair<int, int> > TProcessedBlobs;
  117.     typedef set<CSeq_id_Handle> TProcessedIds;
  118. private:
  119.     // parameters
  120.     bool m_DumpAsnText;
  121.     bool m_DumpAsnBinary;
  122.     bool m_Resplit;
  123.     bool m_Recurse;
  124.     SSplitterParams m_SplitterParams;
  125.     
  126.     // splitter loaders/managers
  127.     auto_ptr<ICache>            m_Cache;
  128.     auto_ptr<ICache>            m_IdCache;
  129.     CCachedId1Reader*           m_Reader;
  130.     CRef<CGBDataLoader>         m_Loader;
  131.     CRef<CObjectManager>        m_ObjMgr;
  132.     CRef<CScope>                m_Scope;
  133.     // splitter process state
  134.     size_t      m_RecursionLevel;
  135.     TProcessedBlobs  m_ProcessedBlobs;
  136.     TProcessedIds  m_ProcessedIds;
  137. };
  138. END_SCOPE(objects)
  139. END_NCBI_SCOPE
  140. /*
  141. * ---------------------------------------------------------------------------
  142. * $Log: split_cache.hpp,v $
  143. * Revision 1000.1  2004/05/04 19:58:41  gorelenk
  144. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.10
  145. *
  146. * Revision 1.10  2004/04/28 16:29:15  vasilche
  147. * Store split results into new ICache.
  148. *
  149. * Revision 1.9  2004/03/16 15:47:29  vasilche
  150. * Added CBioseq_set_Handle and set of EditHandles
  151. *
  152. * Revision 1.8  2004/01/07 17:37:37  vasilche
  153. * Fixed include path to genbank loader.
  154. * Moved split_cache application.
  155. *
  156. * Revision 1.7  2003/12/02 23:24:33  vasilche
  157. * Added "-recurse" option to split all sequences referenced by SeqMap.
  158. *
  159. * Revision 1.6  2003/12/02 19:59:31  vasilche
  160. * Added GetFileName() declaration.
  161. *
  162. * Revision 1.5  2003/12/02 19:49:31  vasilche
  163. * Added missing forward declarations.
  164. *
  165. * Revision 1.4  2003/12/02 19:12:24  vasilche
  166. * Fixed compilation on MSVC.
  167. *
  168. * Revision 1.3  2003/11/26 23:05:00  vasilche
  169. * Removed extra semicolons after BEGIN_SCOPE and END_SCOPE.
  170. *
  171. * Revision 1.2  2003/11/26 17:56:03  vasilche
  172. * Implemented ID2 split in ID1 cache.
  173. * Fixed loading of splitted annotations.
  174. *
  175. * Revision 1.1  2003/11/12 16:18:32  vasilche
  176. * First implementation of ID2 blob splitter withing cache.
  177. *
  178. * ===========================================================================
  179. */
  180. #endif//NCBI_OBJMGR_SPLIT_CACHE__HPP