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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: ncbi_buffer.h,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 16:29:18  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R6.9
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef CONNECT___NCBI_BUFFER__H
  10. #define CONNECT___NCBI_BUFFER__H
  11. /*  $Id: ncbi_buffer.h,v 1000.0 2003/10/29 16:29:18 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.  * Author:  Denis Vakatov
  37.  *
  38.  * File Description:
  39.  *   Memory-resident FIFO storage area (to be used e.g. in I/O buffering)
  40.  *
  41.  * Handle:  BUF
  42.  *
  43.  * Functions:
  44.  *   BUF_SetChunkSize
  45.  *   BUF_Size
  46.  *   BUF_Write
  47.  *   BUF_PushBack
  48.  *   BUF_Peek
  49.  *   BUF_PeekAt
  50.  *   BUF_Read
  51.  *   BUF_Destroy
  52.  *
  53.  */
  54. #if defined(NCBIBUF__H)
  55. #  error "<ncbibuf.h> and <ncbi_buffer.h> must never be #include'd together"
  56. #endif
  57. #include <connect/connect_export.h>
  58. #include <stddef.h>     /* ...to define "size_t"... */
  59. /** @addtogroup BuffServices
  60.  *
  61.  * @{
  62.  */
  63. #ifdef __cplusplus
  64. extern "C" {
  65. #endif
  66. struct BUF_tag;
  67. typedef struct BUF_tag* BUF;  /* handle of a buffer */
  68. /* Set minimal size of a buffer memory chunk.
  69.  * Return the actually set chunk size on success;  zero on error
  70.  * NOTE:  if "*pBuf" == NULL then create it
  71.  *        if "chunk_size" is passed 0 then set it to BUF_DEF_CHUNK_SIZE
  72.  */
  73. #define BUF_DEF_CHUNK_SIZE 1024
  74. extern NCBI_XCONNECT_EXPORT size_t BUF_SetChunkSize
  75. (BUF*        pBuf,
  76.  size_t      chunk_size
  77.  );
  78. /* Return the number of bytes stored in "buf".
  79.  * NOTE: return 0 if "buf" == NULL
  80.  */
  81. extern NCBI_XCONNECT_EXPORT size_t BUF_Size(BUF buf);
  82. /* Add new data to the end of "*pBuf" (to be read last).
  83.  * On error (failed memory allocation), return zero value.
  84.  * NOTE:  if "*pBuf" == NULL then create it.
  85.  */
  86. extern NCBI_XCONNECT_EXPORT /*bool*/int BUF_Write
  87. (BUF*        pBuf,
  88.  const void* data,
  89.  size_t      size
  90.  );
  91. /* Write the data to the very beginning of "*pBuf" (to be read first).
  92.  * On error (failed memory allocation), return zero value.
  93.  * NOTE:  if "*pBuf" == NULL then create it.
  94.  */
  95. extern NCBI_XCONNECT_EXPORT /*bool*/int BUF_PushBack
  96. (BUF*        pBuf,
  97.  const void* data,
  98.  size_t      size
  99.  );
  100. /* Equivalent to "BUF_PeekAt(buf, 0, data, size)", see description below.
  101.  */
  102. extern NCBI_XCONNECT_EXPORT size_t BUF_Peek
  103. (BUF         buf,
  104.  void*       data,
  105.  size_t      size
  106.  );
  107. /* Copy up to "size" bytes stored in "buf" (starting at position "pos")
  108.  * to "data".
  109.  * Return the # of copied bytes (can be less than "size").
  110.  * Return zero and do nothing if "buf" is NULL or "pos" >= BUF_Size(buf).
  111.  * Do nothing and return min(BUF_Size(buf)-pos, size) if "data" is NULL.
  112.  */
  113. extern NCBI_XCONNECT_EXPORT size_t BUF_PeekAt
  114. (BUF         buf,
  115.  size_t      pos,
  116.  void*       data,
  117.  size_t      size
  118.  );
  119. /* Copy up to "size" bytes stored in "buf" to "data" and remove
  120.  * copied data from the "buf".
  121.  * Return the # of copied-and/or-removed bytes(can be less than "size")
  122.  * NOTE: if "buf"  == NULL then do nothing and return 0
  123.  *       if "data" == NULL then do not copy data anywhere(still, remove it)
  124.  */
  125. extern NCBI_XCONNECT_EXPORT size_t BUF_Read
  126. (BUF         buf,
  127.  void*       data,
  128.  size_t      size
  129.  );
  130. /* Destroy all internal data.
  131.  * NOTE: do nothing if "buf" == NULL
  132.  */
  133. extern NCBI_XCONNECT_EXPORT void BUF_Destroy(BUF buf);
  134. #ifdef __cplusplus
  135. }
  136. #endif
  137. /* @} */
  138. /*
  139.  * ---------------------------------------------------------------------------
  140.  * $Log: ncbi_buffer.h,v $
  141.  * Revision 1000.0  2003/10/29 16:29:18  gouriano
  142.  * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R6.9
  143.  *
  144.  * Revision 6.9  2003/04/10 12:52:15  siyan
  145.  * Changed group name for doxygen
  146.  *
  147.  * Revision 6.8  2003/04/09 17:58:40  siyan
  148.  * Added doxygen support
  149.  *
  150.  * Revision 6.7  2003/01/08 01:59:32  lavr
  151.  * DLL-ize CONNECT library for MSVC (add NCBI_XCONNECT_EXPORT)
  152.  *
  153.  * Revision 6.6  2002/09/19 17:59:53  lavr
  154.  * Header file guard macro changed; log moved to the end
  155.  *
  156.  * Revision 6.5  2001/04/23 22:20:26  vakatov
  157.  * BUF_PeekAt() -- special case for "data" == NULL
  158.  *
  159.  * Revision 6.4  2001/04/23 18:07:19  vakatov
  160.  * + BUF_PeekAt()
  161.  *
  162.  * Revision 6.3  2000/02/23 22:33:37  vakatov
  163.  * Can work both "standalone" and as a part of NCBI C++ or C toolkits
  164.  *
  165.  * Revision 6.2  1999/10/12 16:30:10  vakatov
  166.  * include <string.h> to define "size_t"
  167.  *
  168.  * Revision 6.1  1999/08/17 19:45:22  vakatov
  169.  * Moved all real code from NCBIBUF to NCBI_BUFFER;  the code has been cleaned
  170.  * from the NCBI C toolkit specific types and API calls.
  171.  * NCBIBUF module still exists for the backward compatibility -- it
  172.  * provides old NCBI-wise interface.
  173.  *
  174.  * ===========================================================================
  175.  */
  176. #endif /* CONNECT___NCBI_BUFFER__H */