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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: shi_loader.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/04/12 18:27:00  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_WIDGETS_GRAPH_3D___SHI_LOADER__HPP
  10. #define GUI_WIDGETS_GRAPH_3D___SHI_LOADER__HPP
  11. /*  $Id: shi_loader.hpp,v 1000.0 2004/04/12 18:27:00 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:  Vladimir Tereshkov
  37.  *
  38.  * File Description:  
  39.  *   Shi file format loader header. Code ported from shi/shipr.c CGI.
  40.  */
  41. #include <corelib/ncbistd.hpp>
  42. #include <corelib/ncbi_bswap.hpp>
  43. #include <gui/widgets/taxplot3d/taxplot3d_ds.hpp>
  44. #include <gui/widgets/taxplot3d/shi_loader_events.hpp>
  45. #include <memory>
  46. BEGIN_NCBI_SCOPE
  47. // one record in Taxplot file format
  48. struct SShiRecord {
  49.   public:
  50.     int m_Nqugi, m_Dagi, m_Taxid, m_Score, m_Orgclass, m_Symmet, m_Chromosome, m_Pdb;  
  51.     SShiRecord(){};
  52.     ~SShiRecord(){};
  53. };
  54. // complete shi file
  55. class CShiFile {
  56.   private:
  57.     string                  m_FileName;
  58.     CT_POS_TYPE             m_FileSize;
  59.     CT_OFF_TYPE             m_FileCursor;
  60.     CNcbiIfstream           m_FileStream;
  61.     SShiRecord              m_Record;
  62.     auto_ptr<unsigned char> m_Buff;
  63.   int length,jbuf,value,no_more,last_gi,nshi;
  64.     int getNextInt(void);
  65.   public:  
  66.     CShiFile(){}
  67.    ~CShiFile(){}
  68.     // get access
  69.     string                  & getFileName(void)    { return m_FileName;    }
  70.     CT_POS_TYPE             & getFileSize(void)    { return m_FileSize;    }
  71.     CT_OFF_TYPE             & getFileCursor(void)  { return m_FileCursor;  }
  72.     CNcbiIfstream           & getFileStream(void)  { return m_FileStream;  }
  73.     
  74.     // checks
  75.     int        isEof(void)    const;             
  76.     int        isLastGi(void) const;
  77.     // actions
  78.     void  openFile(const string name);    
  79.     int   getNextRecord(SShiRecord & rec);
  80. };
  81. inline int CShiFile::isEof(void) const
  82. {
  83.     return (m_FileCursor*4) >= m_FileSize - CT_POS_TYPE(0);
  84. }
  85. inline int CShiFile::isLastGi(void)   const {return last_gi;                       }
  86. inline int CShiFile::getNextInt(void)
  87. {
  88.     unsigned char * ptr =  m_Buff.get() + m_FileCursor*4;    
  89.     Int4 ret = (Int4(ptr[3]) << 24) | 
  90.                (Int4(ptr[2]) << 16) | 
  91.                (Int4(ptr[1]) << 8)  | 
  92.                (Int4(ptr[0]));
  93.   
  94.     m_FileCursor += 1;
  95.     return ret;
  96. }
  97. // loader wrapper
  98. class ShiLoader {
  99. private:
  100.     // simplified cache    
  101.     typedef map    <int, int> TSMAP; // tax&score vect for 1 gi
  102.     typedef vector <TSMAP>    GIVECTOR; // all cachable gi's
  103.     GIVECTOR                  m_Cache;
  104.     // datasource
  105.     CTaxplot3dDataSource * m_DS;   
  106.     // callbacks
  107.     IShiLoaderEvents * m_Handle;
  108.     
  109. public:
  110.     ShiLoader() 
  111.     {
  112.         m_DS = new CTaxplot3dDataSource();
  113.         m_Cache.clear();
  114.         m_Handle = NULL;
  115.     }
  116.     ~ShiLoader()  
  117.     {
  118.         if (m_DS) delete m_DS;
  119.         m_Cache.clear();      
  120.     }
  121.       
  122.     int   loadFileNew(const char * file);
  123.     CTaxplot3dDataSource * getData(int gi1, int gi2, int gi3);      
  124.     void setConnectionPoint(IShiLoaderEvents * handle) {m_Handle = handle;};      
  125. };
  126. END_NCBI_SCOPE
  127. /*
  128.  * ===========================================================================
  129.  * $Log: shi_loader.hpp,v $
  130.  * Revision 1000.0  2004/04/12 18:27:00  gouriano
  131.  * PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.4
  132.  *
  133.  * Revision 1.4  2004/02/20 20:03:27  ucko
  134.  * Fix to compile with stricter implementations of CT_POS_TYPE
  135.  *
  136.  * Revision 1.3  2004/01/15 13:09:09  ucko
  137.  * Use CT_POS_TYPE macro rather than pos_type typedef, which GCC 2.95 lacks.
  138.  *
  139.  * Revision 1.2  2004/01/15 01:15:20  ucko
  140.  * +<memory> for auto_ptr<>
  141.  *
  142.  * Revision 1.1  2004/01/05 16:22:03  tereshko
  143.  * Initial revision
  144.  *
  145.  * ===========================================================================
  146.  */
  147. #endif