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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: ncbi_priv.h,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 17:06:22  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R6.10
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef CONNECT___NCBI_PRIV__H
  10. #define CONNECT___NCBI_PRIV__H
  11. /*  $Id: ncbi_priv.h,v 1000.1 2004/04/12 17:06:22 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.  *    Private aux. code for the "ncbi_*.[ch]"
  40.  *
  41.  *********************************
  42.  * Critical section (basic multi-thread synchronization):
  43.  *    private global:  g_CORE_MT_Lock
  44.  *    macros:          CORE_LOCK_WRITE, CORE_LOCK_READ, CORE_UNLOCK
  45.  * Tracing and logging:
  46.  *    private global:  g_CORE_Log
  47.  *    macros:          CORE_LOG[F](), CORE_DATA[F](), CORE_LOG[F]_ERRNO()
  48.  *
  49.  */
  50. #include <connect/ncbi_util.h>
  51. #ifdef __cplusplus
  52. extern "C" {
  53. #endif
  54. /******************************************************************************
  55.  *  Multi-Thread SAFETY
  56.  */
  57. /* Always use the following macros and functions to access "g_CORE_MT_Lock",
  58.  * dont access/change it directly!
  59.  */
  60. extern NCBI_XCONNECT_EXPORT MT_LOCK g_CORE_MT_Lock;
  61. #define CORE_LOCK_WRITE  verify( MT_LOCK_Do(g_CORE_MT_Lock, eMT_Lock    ) )
  62. #define CORE_LOCK_READ   verify( MT_LOCK_Do(g_CORE_MT_Lock, eMT_LockRead) )
  63. #define CORE_UNLOCK      verify( MT_LOCK_Do(g_CORE_MT_Lock, eMT_Unlock  ) )
  64. /******************************************************************************
  65.  *  ERROR HANDLING and LOGGING
  66.  */
  67. /* Always use the following macros and functions to access "g_CORE_Log",
  68.  * dont access/change it directly!
  69.  */
  70. extern NCBI_XCONNECT_EXPORT LOG g_CORE_Log;
  71. extern NCBI_XCONNECT_EXPORT const char* g_CORE_Sprintf(const char* fmt, ...)
  72. #ifdef __GNUC__
  73.          __attribute__((format(printf, 1, 2)))
  74. #endif
  75. ;
  76. #define CORE_LOG(level, message)  do { 
  77.     if (g_CORE_Log  ||  level == eLOG_Fatal) { 
  78.         CORE_LOCK_READ; 
  79.         LOG_WRITE(g_CORE_Log, level, message); 
  80.         CORE_UNLOCK; 
  81.     } 
  82. } while (0)
  83. #define CORE_LOGF(level, fmt_args)  do { 
  84.     if (g_CORE_Log  ||  level == eLOG_Fatal) { 
  85.         CORE_LOCK_READ; 
  86.         LOG_WRITE(g_CORE_Log, level, g_CORE_Sprintf fmt_args); 
  87.         CORE_UNLOCK; 
  88.     } 
  89. } while (0)
  90. #define CORE_DATA(data, size, message)  do { 
  91.     if ( g_CORE_Log ) { 
  92.         CORE_LOCK_READ; 
  93.         LOG_DATA(g_CORE_Log, data, size, message); 
  94.         CORE_UNLOCK; 
  95.     } 
  96. } while (0)
  97. #define CORE_DATAF(data, size, fmt_args)  do { 
  98.     if ( g_CORE_Log ) { 
  99.         CORE_LOCK_READ; 
  100.         LOG_DATA(g_CORE_Log, data, size, g_CORE_Sprintf fmt_args); 
  101.         CORE_UNLOCK; 
  102.     } 
  103. } while (0)
  104. #define CORE_LOG_ERRNO(level, x_errno, message)  do { 
  105.     if (g_CORE_Log  ||  level == eLOG_Fatal) { 
  106.         CORE_LOCK_READ; 
  107.         LOG_WRITE_ERRNO_EX(g_CORE_Log, level, message, x_errno, 0); 
  108.         CORE_UNLOCK; 
  109.     } 
  110. } while (0)
  111. #define CORE_LOGF_ERRNO(level, x_errno, fmt_args)  do { 
  112.     if (g_CORE_Log  ||  level == eLOG_Fatal) { 
  113.         CORE_LOCK_READ; 
  114.         LOG_WRITE_ERRNO_EX(g_CORE_Log, level, g_CORE_Sprintf fmt_args, 
  115.                            x_errno, 0); 
  116.         CORE_UNLOCK; 
  117.     } 
  118. } while (0)
  119. #define CORE_LOG_ERRNO_EX(level, x_errno, x_descr, message)  do { 
  120.     if (g_CORE_Log  ||  level == eLOG_Fatal) { 
  121.         CORE_LOCK_READ; 
  122.         LOG_WRITE_ERRNO_EX(g_CORE_Log, level, message, x_errno, x_descr); 
  123.         CORE_UNLOCK; 
  124.     } 
  125. } while (0)
  126. #define CORE_LOGF_ERRNO_EX(level, x_errno, x_descr, fmt_args)  do { 
  127.     if (g_CORE_Log  ||  level == eLOG_Fatal) { 
  128.         CORE_LOCK_READ; 
  129.         LOG_WRITE_ERRNO_EX(g_CORE_Log, level, g_CORE_Sprintf fmt_args, 
  130.                            x_errno, x_descr); 
  131.         CORE_UNLOCK; 
  132.     } 
  133. } while (0)
  134. /******************************************************************************
  135.  *  REGISTRY
  136.  */
  137. /* Always use the following macros and functions to access "g_CORE_Registry",
  138.  * dont access/change it directly!
  139.  */
  140. extern NCBI_XCONNECT_EXPORT REG g_CORE_Registry;
  141. #define CORE_REG_GET(section, name, value, value_size, def_value) 
  142.     g_CORE_RegistryGET(section, name, value, value_size, def_value)
  143. #define CORE_REG_SET(section, name, value, storage)  do { 
  144.     CORE_LOCK_WRITE; 
  145.     REG_Set(g_CORE_Registry, section, name, value, storage); 
  146.     CORE_UNLOCK; 
  147. } while (0)
  148. /* (private, to be used exclusively by the above macro CORE_REG_GET) */
  149. extern NCBI_XCONNECT_EXPORT char* g_CORE_RegistryGET
  150. (const char* section,
  151.  const char* name,
  152.  char*       value,
  153.  size_t      value_size,
  154.  const char* def_value);
  155. #ifdef __cplusplus
  156. }  /* extern "C" */
  157. #endif
  158. /*
  159.  * ---------------------------------------------------------------------------
  160.  * $Log: ncbi_priv.h,v $
  161.  * Revision 1000.1  2004/04/12 17:06:22  gouriano
  162.  * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R6.10
  163.  *
  164.  * Revision 6.10  2004/03/12 23:25:37  gorelenk
  165.  * Added export prefixes.
  166.  *
  167.  * Revision 6.9  2002/12/05 21:43:00  lavr
  168.  * Swap level and errno in CORE_LOG[F]_ERRNO(); add CORE_LOG[F]_ERRNO_EX()
  169.  *
  170.  * Revision 6.8  2002/12/04 21:00:43  lavr
  171.  * -CORE_LOG[F]_SYS_ERRNO()
  172.  *
  173.  * Revision 6.7  2002/12/04 19:51:40  lavr
  174.  * Enable MessageWithErrno() to print error description
  175.  *
  176.  * Revision 6.6  2002/09/19 18:08:31  lavr
  177.  * Header file guard macro changed; log moved to end
  178.  *
  179.  * Revision 6.5  2002/04/13 06:38:45  lavr
  180.  * More *_LOGF_* macros added
  181.  *
  182.  * Revision 6.4  2001/05/17 18:07:15  vakatov
  183.  * Logging::  always call the logger if severity is eLOG_Fatal
  184.  *
  185.  * Revision 6.3  2001/01/08 22:37:36  lavr
  186.  * Added GNU attribute to g_CORE_sprintf for compiler to trace
  187.  * format specifier/parameter correspondence
  188.  *
  189.  * Revision 6.2  2000/06/23 19:34:44  vakatov
  190.  * Added means to log binary data
  191.  *
  192.  * Revision 6.1  2000/03/24 22:53:35  vakatov
  193.  * Initial revision
  194.  *
  195.  * ===========================================================================
  196.  */
  197. #endif /* CONNECT___NCBI_PRIV__H */