⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ncbi_connector.h

📁 ncbi源码
💻 H
字号:
/* * =========================================================================== * PRODUCTION $Log: ncbi_connector.h,v $ * PRODUCTION Revision 1000.0  2003/10/29 16:29:56  gouriano * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R6.16 * PRODUCTION * =========================================================================== */#ifndef CONNECT___NCBI_CONNECTOR__H#define CONNECT___NCBI_CONNECTOR__H/*  $Id: ncbi_connector.h,v 1000.0 2003/10/29 16:29:56 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software/database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's official duties as a United States Government employee and *  thus cannot be copyrighted.  This software/database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * * Author:  Denis Vakatov * * File Description: *   Specifications to implement a connector("CONNECTOR") to be used to open *   and handle connection("CONN", see also in "ncbi_connection.[ch]") to an *   abstract I/O service. This is generally not for the public use. *   It is to be used in the modules that implement a particular connector. * */#include <connect/ncbi_core.h>/** @addtogroup Connectors * * @{ */#ifdef __cplusplusextern "C" {#endifstruct SConnectorTag;typedef struct SConnectorTag* CONNECTOR;  /* connector handle *//* Function type definitions for the connector method table. * The arguments & the behavior of "FConnector***" functions are mostly just * the same as those for their counterparts "CONN_***" in ncbi_connection.h. * First argument of these functions accepts a real connector handle * rather than a connection handle("CONN"). * In every call, which has STimeout as an argument, this argument * can be either NULL, CONN_DEFAULT_TIMEOUT, or other non-NULL pointer, * pointing to finite timeout structure. NULL is treated as an infinite * timeout, while CONN_DEFAULT_TIMEOUT means to use any timeout, which * is somehow pre-defined by the connector itself. *//* Get the name of the connector (may be NULL on error) */typedef const char* (*FConnectorGetType)(CONNECTOR       connector );/* Get the human readable connector's description (may be NULL on error) */typedef char* (*FConnectorDescr)(CONNECTOR       connector );/* Open connection. Used to setup all related data structures, * but not necessarily has to actually open the data channel. */typedef EIO_Status (*FConnectorOpen)(CONNECTOR       connector, const STimeout* timeout );/* Wait until either read or write (dep. on the "direction" value) becomes * available, or until "timeout" expires, or until error occurs. * NOTE 1:  FConnectorWait is guaranteed to be called after FConnectorOpen, *          and only if FConnectorOpen returned "eIO_Success". * NOTE 2:  "event" is guaranteed to be either "eIO_Read" or "eIO_Write". */typedef EIO_Status (*FConnectorWait)(CONNECTOR       connector, EIO_Event       event, const STimeout* timeout );/* The passed "n_written" is always non-NULL, and "*n_written" is always zero. * It returns "eIO_Success" if at least some data have been successfully * written; other error code if no data at all have been written. * It returns the # of successfully written data (in bytes) in "*n_written". * NOTE:  FConnectorWrite is guaranteed to be called after FConnectorOpen, *        and only if the latter succeeded (returned "eIO_Success"). */typedef EIO_Status (*FConnectorWrite)(CONNECTOR       connector, const void*     buf, size_t          size, size_t*         n_written, const STimeout* timeout );/* Flush yet unwritten output data, if any. * NOTE:  FConnectorFlush is guaranteed to be called after FConnectorOpen, *        and only if the latter succeeded (returned "eIO_Success"). */typedef EIO_Status (*FConnectorFlush)(CONNECTOR       connector, const STimeout* timeout );/* The passed "n_read" is always non-NULL, and "*n_read" is always zero. * It returns "eIO_Success" if at least some data have been successfully * read; other error code if no data at all have been read. * The number of successfully read bytes returned in "*n_read". * NOTE:  FConnectorRead is guaranteed to be called after FConnectorOpen, *        and only if the latter succeeded (returned "eIO_Success"). */typedef EIO_Status (*FConnectorRead)(CONNECTOR       connector, void*           buf, size_t          size, size_t*         n_read, const STimeout* timeout );/* Obtain last I/O completion code from the transport level (connector). * NOTE 1:  FConnectorStatus is guaranteed to be called after FConnectorOpen, *          and only if the latter succeeded (returned "eIO_Success"). * NOTE 2:  "direction" is guaranteed to be either "eIO_Read" or "eIO_Write". * NOTE 3:  Should return "eIO_Success" in case of inexistent (incomplete) *          low level transport, if any. */typedef EIO_Status (*FConnectorStatus)(CONNECTOR       connector, EIO_Event       direction );          /* Close data link (if any) and cleanup related data structures. * NOTE 1:  FConnectorClose is guaranteed to be called after FConnectorOpen, *          and only if the latter succeeded (returned "eIO_Success"). * NOTE 2:  FConnectorFlush gets called before FConnectorClose automatically. */typedef EIO_Status (*FConnectorClose)(CONNECTOR       connector, const STimeout* timeout );/* Standard set of connector methods to handle a connection (corresponding * connectors are also here), part of connection handle("CONN"). */typedef struct {    FConnectorGetType   get_type;    CONNECTOR c_get_type;    FConnectorDescr     descr;       CONNECTOR c_descr;    FConnectorOpen      open;        CONNECTOR c_open;    FConnectorWait      wait;        CONNECTOR c_wait;#ifdef IMPLEMENTED__CONN_WaitAsync    FConnectorWaitAsync wait_async;  CONNECTOR c_wait_async;#endif    FConnectorWrite     write;       CONNECTOR c_write;    FConnectorFlush     flush;       CONNECTOR c_flush;    FConnectorRead      read;        CONNECTOR c_read;    FConnectorStatus    status;      CONNECTOR c_status;    FConnectorClose     close;       CONNECTOR c_close;    const STimeout*     default_timeout; /* default timeout pointer     */    STimeout            default_tmo;     /* storage for default_timeout  */    CONNECTOR           list;} SMetaConnector;#define CONN_TWO2ONE(a, b)   a##b#define CONN_SET_METHOD(meta, method, function, connector) \    do {                                                   \        meta->method = function;                           \        meta->CONN_TWO2ONE(c_,method) = connector;         \    } while (0);#define CONN_SET_DEFAULT_TIMEOUT(meta, timeout)            \    do {                                                   \        if (timeout) {                                     \            meta->default_timeout = &meta->default_tmo;    \            meta->default_tmo     = *timeout;              \        } else                                             \            meta->default_timeout = 0;                     \    } while (0);/* Insert a connector in the beginning of the connection's list of connectors. */extern NCBI_XCONNECT_EXPORT EIO_Status METACONN_Add(SMetaConnector* meta, CONNECTOR       connector );/* Delete given "connector" all its descendants (all connectors if "connector" * is 0) from the connections's list of connectors. FConnectorDestroy is * called for each removed connector. */extern NCBI_XCONNECT_EXPORT EIO_Status METACONN_Remove(SMetaConnector* meta, CONNECTOR       connector );/* Upcall on request to setup virtual function table (called from connection). */typedef void (*FSetupVTable)(SMetaConnector* meta, CONNECTOR       connector );/* Destroy connector and its data handle. This is NOT a close request! * Should not to be used on open connectors (that is, for those * FConnectorClose has to be called first prior to this call). */typedef void (*FDestroy)(CONNECTOR       connector );/* Connector specification. */typedef struct SConnectorTag {    void*                handle;    /* data handle of the connector */    CONNECTOR            next;      /* linked list                  */    SMetaConnector*      meta;      /* back link to CONNECTION      */    FSetupVTable         setup;     /* used in CONNECTION init      */    FDestroy             destroy;   /* destroys handle, can be NULL */} SConnector;#ifdef IMPLEMENTED__CONN_WaitAsynctypedef struct {  CONN                   conn;  EIO_Event              event;  FConnAsyncHandler      handler;  void*                  data;  FConnAsyncCleanup      cleanup;} SConnectorAsyncHandler;typedef void (*FConnectorAsyncHandler)(SConnectorAsyncHandler* data, EIO_Event               event, EIO_Status              status );typedef EIO_Status (*FConnectorWaitAsync)(CONNECTOR               connector, FConnectorAsyncHandler  func, SConnectorAsyncHandler* data );#endif /* IMPLEMENTED__CONN_WaitAsync */#ifdef __cplusplus}  /* extern "C" */#endif/* @} *//* * -------------------------------------------------------------------------- * $Log: ncbi_connector.h,v $ * Revision 1000.0  2003/10/29 16:29:56  gouriano * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R6.16 * * Revision 6.16  2003/08/25 14:47:59  lavr * Get rid of old ...TIMEOUT constants [now replaced with k...Timeout] * * Revision 6.15  2003/05/21 17:52:37  lavr * Pre- and post-conditions clarified for read and write virtual methods * * Revision 6.14  2003/05/14 03:47:53  lavr * +(*FConnectorDescr)() * * Revision 6.13  2003/04/09 17:58:45  siyan * Added doxygen support * * Revision 6.12  2003/01/08 01:59:32  lavr * DLL-ize CONNECT library for MSVC (add NCBI_XCONNECT_EXPORT) * * Revision 6.11  2002/09/19 18:00:11  lavr * Header file guard macro changed * * Revision 6.10  2002/09/06 15:40:54  lavr * More comments and notes to the API; log moved to end * * Revision 6.9  2002/04/26 16:29:32  lavr * Add default_timeout member to meta-connector * * Revision 6.8  2002/03/22 22:18:48  lavr * Cosmetic update * * Revision 6.7  2001/04/24 21:20:01  lavr * Introduced CONN_DEFAULT_TIMEOUT and CONN_INFINITE_TIMEOUT * * Revision 6.6  2001/03/02 20:07:18  lavr * Typos fixed * * Revision 6.5  2001/01/11 16:39:33  lavr * FDestroy function is now clearly documented not to destroy * the connector itself, only its handle (private internal data). * * Revision 6.4  2001/01/03 22:29:22  lavr * Changed IOStatus -> Status * * Revision 6.3  2000/12/29 17:45:07  lavr * Heavily modified to have a stack of connectors * VTable format changed; all virtual function now accept CONNECTOR as a * first argument (not void* as in previous versions) * * Revision 6.2  2000/04/07 19:59:49  vakatov * Moved forward-declaration of CONNECTOR from "ncbi_connection.h" * to "ncbi_connector.h" * * Revision 6.1  2000/03/24 22:52:48  vakatov * Initial revision * * ========================================================================== */#endif /* CONNECT___NCBI_CONNECTOR__H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -