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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: ncbi_conn_streambuf.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/02/12 21:52:32  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CORE_001] Dev-tree R6.31
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef CONNECT___NCBI_CONN_STREAMBUF__HPP
  10. #define CONNECT___NCBI_CONN_STREAMBUF__HPP
  11. /*  $Id: ncbi_conn_streambuf.hpp,v 1000.2 2004/02/12 21:52:32 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:  Denis Vakatov, Anton Lavrentiev
  37.  *
  38.  * File Description:
  39.  *   CONN-based C++ stream buffer
  40.  *
  41.  */
  42. #include <corelib/ncbistre.hpp>
  43. #include <connect/ncbi_connection.h>
  44. #ifdef NCBI_COMPILER_MIPSPRO
  45. #  include <util/stream_utils.hpp>
  46. #  define CConn_StreambufBase CMIPSPRO_ReadsomeTolerantStreambuf
  47. #else
  48. #  define CConn_StreambufBase CNcbiStreambuf
  49. #endif/*NCBI_COMPILER_MIPSPRO*/
  50. BEGIN_NCBI_SCOPE
  51. class CConn_Streambuf : public CConn_StreambufBase
  52. {
  53. public:
  54.     CConn_Streambuf(CONNECTOR connector, const STimeout* timeout,
  55.                     streamsize buf_size, bool tie);
  56.     virtual ~CConn_Streambuf();
  57.     CONN    GetCONN(void) const { return m_Conn; };
  58. protected:
  59.     virtual CT_INT_TYPE overflow(CT_INT_TYPE c);
  60.     virtual CT_INT_TYPE underflow(void);
  61.     virtual streamsize  xsgetn(CT_CHAR_TYPE* buf, streamsize n);
  62.     virtual streamsize  showmanyc(void);
  63.     virtual int         sync(void);
  64.     // this method is declared here to be disabled (exception) at run-time
  65.     virtual CNcbiStreambuf* setbuf(CT_CHAR_TYPE* buf, streamsize buf_size);
  66.     // only seekoff(0, IOS_BASE::cur, IOS_BASE::out) is permitted
  67.     virtual CT_POS_TYPE seekoff(CT_OFF_TYPE off, IOS_BASE::seekdir whence,
  68.                                 IOS_BASE::openmode which =
  69.                                 IOS_BASE::in | IOS_BASE::out);
  70. private:
  71.     CONN                m_Conn;      // underlying connection handle
  72.     CT_CHAR_TYPE*       m_ReadBuf;   // I/O arena or &x_Buf (if unbuffered)
  73.     CT_CHAR_TYPE*       m_WriteBuf;  // m_ReadBuf + m_BufSize (0 if unbuffered)
  74.     streamsize          m_BufSize;   // of m_ReadBuf, m_WriteBuf(if buffered)
  75.     bool                m_Tie;       // always flush before reading
  76.     CT_CHAR_TYPE        x_Buf;       // default m_ReadBuf for unbuffered stream
  77.     CT_POS_TYPE         x_Pos;       // put position [for istream.tellp()]
  78.     EIO_Status          x_LogIfError(const char* file, int line,
  79.                                      EIO_Status status, const string& msg);
  80. };
  81. END_NCBI_SCOPE
  82. /*
  83.  * ---------------------------------------------------------------------------
  84.  * $Log: ncbi_conn_streambuf.hpp,v $
  85.  * Revision 1000.2  2004/02/12 21:52:32  gouriano
  86.  * PRODUCTION: UPGRADED [CORE_001] Dev-tree R6.31
  87.  *
  88.  * Revision 6.31  2004/01/20 20:36:24  lavr
  89.  * Cease defining and using HAVE_BUGGY_IOS_CALLBACKS in this file
  90.  *
  91.  * Revision 6.30  2004/01/14 20:24:29  lavr
  92.  * CConnStreambuf::seekoff(0, cur, out) added and implemented
  93.  *
  94.  * Revision 6.29  2004/01/09 17:39:15  lavr
  95.  * Define and use internal 1-byte buffer for unbuffered streams' get ops
  96.  *
  97.  * Revision 6.28  2003/12/29 15:17:41  lavr
  98.  * Rollback to R6.26
  99.  *
  100.  * Revision 6.27  2003/12/18 13:25:19  ucko
  101.  * Renamed CGCC_ShowmanycStreambuf to CShowmanycStreambuf.
  102.  *
  103.  * Revision 6.26  2003/12/18 03:45:06  ucko
  104.  * Add CGCC_ShowmanycStreambuf as a layer between streambuf and
  105.  * CConn_Streambuf for the benefit of Readsome.
  106.  *
  107.  * Revision 6.25  2003/11/12 17:45:38  lavr
  108.  * Minor rearrangement
  109.  *
  110.  * Revision 6.24  2003/10/22 18:15:34  lavr
  111.  * CConn_Streambuf base class changed into CNcbiStreambuf
  112.  *
  113.  * Revision 6.23  2003/09/23 21:06:07  lavr
  114.  * Rearranged included headers
  115.  *
  116.  * Revision 6.22  2003/09/23 01:43:03  ucko
  117.  * Make sure to #include <corelib/ncbistre.hpp> unconditionally.
  118.  * (The indirect include is now conditional on MIPSpro...)
  119.  * Move BEGIN_NCBI_SCOPE to after all #includes.
  120.  *
  121.  * Revision 6.21  2003/09/22 20:45:27  lavr
  122.  * Define HAVE_BUGGY_IOS_CALLBACKS locally (not to depend on xutil, excl IRIX)
  123.  *
  124.  * Revision 6.20  2003/05/20 18:05:53  lavr
  125.  * x_LogIfError() to accept and print approproate file location
  126.  *
  127.  * Revision 6.19  2003/05/20 16:45:49  lavr
  128.  * IsOkay() removed (GetCONN() should be enough)
  129.  *
  130.  * Revision 6.18  2003/05/12 18:32:27  lavr
  131.  * Modified not to throw exceptions from stream buffer; few more improvements
  132.  *
  133.  * Revision 6.17  2003/04/22 18:29:38  lavr
  134.  * Conditionally define CConn_Streambuf's base class (to help Doc++ SB)
  135.  *
  136.  * Revision 6.16  2003/04/11 17:57:11  lavr
  137.  * Define xsgetn() unconditionally
  138.  *
  139.  * Revision 6.15  2003/03/30 07:00:09  lavr
  140.  * MIPS-specific workaround for lamely-designed stream read ops
  141.  *
  142.  * Revision 6.14  2003/03/28 03:30:36  lavr
  143.  * Define CConn_Streambuf::xsgetn() unconditionally of compiler
  144.  *
  145.  * Revision 6.13  2002/06/12 19:20:50  lavr
  146.  * Guard macro name standardized
  147.  *
  148.  * Revision 6.12  2002/06/06 19:02:01  lavr
  149.  * Take advantage of CConn_Exception class
  150.  * Some housekeeping: guard macro name changed, log moved to the end
  151.  *
  152.  * Revision 6.11  2002/02/05 16:05:26  lavr
  153.  * List of included header files revised
  154.  *
  155.  * Revision 6.10  2002/02/04 20:19:10  lavr
  156.  * +xsgetn() for MIPSPro compiler (buggy version supplied with std.library)
  157.  *
  158.  * Revision 6.9  2002/01/30 20:09:14  lavr
  159.  * Define xsgetn() for WorkShop compiler also
  160.  *
  161.  * Revision 6.8  2002/01/28 20:21:11  lavr
  162.  * Do not use auto_ptr in class body; auto_ptr moved to constructor
  163.  *
  164.  * Revision 6.7  2001/12/07 22:58:44  lavr
  165.  * More comments added
  166.  *
  167.  * Revision 6.6  2001/05/29 19:35:21  grichenk
  168.  * Fixed non-blocking stream reading for GCC
  169.  *
  170.  * Revision 6.5  2001/05/14 16:47:46  lavr
  171.  * streambuf::xsgetn commented out as it badly interferes
  172.  * with truly-blocking stream reading via istream::read.
  173.  *
  174.  * Revision 6.4  2001/05/11 14:04:08  grichenk
  175.  * + CConn_Streambuf::xsgetn(), CConn_Streambuf::showmanyc()
  176.  *
  177.  * Revision 6.3  2001/01/12 23:49:20  lavr
  178.  * Timeout and GetCONN method added
  179.  *
  180.  * Revision 6.2  2001/01/11 23:04:07  lavr
  181.  * Bugfixes; tie is now done at streambuf level, not in iostream
  182.  *
  183.  * Revision 6.1  2001/01/09 23:34:51  vakatov
  184.  * Initial revision (draft, not tested in run-time)
  185.  *
  186.  * ===========================================================================
  187.  */
  188. #endif  /* CONNECT___NCBI_CONN_STREAMBUF__HPP */