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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: reader_writer.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:38:37  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef UTIL___READER_WRITER__HPP
  10. #define UTIL___READER_WRITER__HPP
  11. /*  $Id: reader_writer.hpp,v 1000.2 2004/06/01 19:38:37 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:  Anton Lavrentiev
  37.  *
  38.  * File Description:
  39.  *   Abstract reader-writer interface classes
  40.  *
  41.  */
  42. /// @file reader_writer.hpp
  43. /// Abstract reader-writer interface classes
  44. /// Slightly adapted, however, to build std::streambuf on top of it.
  45. #include <corelib/ncbistl.hpp>
  46. #include <stddef.h>
  47. BEGIN_NCBI_SCOPE
  48. /// Result codes for I/O operations
  49. /// @sa IReader, IWriter, IReaderWriter
  50. enum ERW_Result {
  51.     eRW_NotImplemented = -1,
  52.     eRW_Success = 0,
  53.     eRW_Timeout,
  54.     eRW_Error,
  55.     eRW_Eof
  56. };
  57. /// A very basic data-read interface.
  58. class IReader
  59. {
  60. public:
  61.     /// Read as many as count bytes into a buffer pointed
  62.     /// to by buf argument.  Store the number of bytes actually read,
  63.     /// or 0 on EOF or error, via the pointer "bytes_read", if provided.
  64.     /// Special case:  if count passed as 0, then the value of
  65.     /// buf is ignored, and the return value is always eRW_Success, but
  66.     /// no change is actually done to the state of input device.
  67.     virtual ERW_Result Read(void*   buf,
  68.                             size_t  count,
  69.                             size_t* bytes_read = 0) = 0;
  70.     /// Via parameter "count" (which is guaranteed to be supplied non-NULL)
  71.     /// return the number of bytes that are ready to be read from input
  72.     /// device without blocking.  Return eRW_Success if the number
  73.     /// of pending bytes was stored at the location pointed to by "count".
  74.     /// Return eRW_NotImplemented if the number cannot be determined.
  75.     /// Otherwise, return other eRW_... condition to reflect the problem.
  76.     /// Note that if reporting 0 bytes ready, the method can either return
  77.     /// eRW_Success and zero *count, or return eRW_NotImplemented alone.
  78.     virtual ERW_Result PendingCount(size_t* count) = 0;
  79.     virtual ~IReader() {}
  80. };
  81. /// A very basic data-write interface.
  82. class IWriter
  83. {
  84. public:
  85.     /// Write up to count bytes from the buffer pointed to by
  86.     /// buf argument onto output device.  Store the number
  87.     /// of bytes actually written, or 0 if either count was
  88.     /// passed as 0 (buf is ignored in this case) or an error occurred,
  89.     /// via the "bytes_written" pointer, if provided.
  90.     virtual ERW_Result Write(const void* buf,
  91.                              size_t      count,
  92.                              size_t*     bytes_written = 0) = 0;
  93.     /// Flush pending data (if any) down to output device.
  94.     virtual ERW_Result Flush(void) = 0;
  95.     virtual ~IWriter() {}
  96. };
  97. /// A very basic data-read/write interface.
  98. class IReaderWriter : public IReader, public IWriter
  99. {
  100. public:
  101.     virtual ~IReaderWriter() {}
  102. };
  103. END_NCBI_SCOPE
  104. /*
  105.  * ===========================================================================
  106.  * $Log: reader_writer.hpp,v $
  107.  * Revision 1000.2  2004/06/01 19:38:37  gouriano
  108.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
  109.  *
  110.  * Revision 1.12  2004/05/17 15:48:24  lavr
  111.  * Comments slightly rearranged
  112.  *
  113.  * Revision 1.11  2004/04/01 14:14:01  lavr
  114.  * Spell "occurred", "occurrence", and "occurring"
  115.  *
  116.  * Revision 1.10  2004/03/23 19:49:46  lavr
  117.  * Fix IReader::PendingCount() description
  118.  *
  119.  * Revision 1.9  2003/11/03 20:01:52  lavr
  120.  * Add ERW_Result::eRW_Timeout
  121.  *
  122.  * Revision 1.8  2003/10/22 18:14:47  lavr
  123.  * IWriter::Flush() added
  124.  *
  125.  * Revision 1.7  2003/09/29 16:06:59  lavr
  126.  * Change ERW_Result enumeration and members names
  127.  *
  128.  * Revision 1.6  2003/09/25 13:35:50  kuznets
  129.  * Minor syntax issue corrected.
  130.  *
  131.  * Revision 1.5  2003/09/24 21:12:39  lavr
  132.  * Doxygenification
  133.  *
  134.  * Revision 1.4  2003/09/24 15:56:24  kuznets
  135.  * Minor syntax error fixed in ERW_Result declaration
  136.  *
  137.  * Revision 1.3  2003/09/24 15:45:36  lavr
  138.  * Changed to use ERW_Result in return codes; pointers to store I/O counts
  139.  *
  140.  * Revision 1.2  2003/09/22 22:38:21  vakatov
  141.  * Minor (mostly style) fixes;  renaming
  142.  *
  143.  * Revision 1.1  2003/09/22 20:26:23  lavr
  144.  * Initial revision
  145.  * ===========================================================================
  146.  */
  147. #endif  /* UTIL___READER_WRITER__HPP */