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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: bdb_expt.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 17:13:23  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.12
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef BDB_EXPT_HPP__
  10. #define BDB_EXPT_HPP__
  11. /* $Id: bdb_expt.hpp,v 1000.1 2004/04/12 17:13:23 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:  Anatoliy Kuznetsov
  37.  *   
  38.  * File Description: Berkeley DB support library. 
  39.  *                   Exception specifications and routines.
  40.  *
  41.  */
  42. /// @file bdb_expt.hpp
  43. /// Exception specifications for BDB library.
  44. #include <corelib/ncbiexpt.hpp>
  45. BEGIN_NCBI_SCOPE
  46. /** @addtogroup BDB
  47.  *
  48.  * @{
  49.  */
  50. /// Base BDB exception class
  51. class NCBI_BDB_EXPORT CBDB_Exception : EXCEPTION_VIRTUAL_BASE public CException
  52. {
  53.     NCBI_EXCEPTION_DEFAULT(CBDB_Exception, CException);
  54. };
  55. /// Auxiliary exception class to wrap up Berkeley DB strerror function
  56. /// 
  57. class NCBI_BDB_EXPORT CBDB_StrErrAdapt
  58. {
  59. public:
  60.     static const char* strerror(int errnum);
  61. };
  62. /// BDB errno exception class. 
  63. ///
  64. /// Berkley DB can return two types of error codes:
  65. ///   0  - operation successfull
  66. ///  >0  - positive error code (errno) (file locked, no space on device, etc)
  67. ///  <0  - negative error code indicates Berkeley DB related problem.
  68. ///  db_strerror function provided by BerkeleyDB works as a superset of 
  69. /// ::strerror function returning valid error messages for both errno and 
  70. /// BDB error codes.
  71. class NCBI_BDB_EXPORT CBDB_ErrnoException : 
  72.     public CErrnoTemplExceptionEx<CBDB_Exception, CBDB_StrErrAdapt::strerror>
  73. {
  74. public:
  75.     typedef CErrnoTemplExceptionEx<CBDB_Exception, CBDB_StrErrAdapt::strerror>
  76.             CParent;
  77.     /// Exception types
  78.     enum EErrCode {
  79.         eSystem,      //!< GetErrno() to return system lib specific error code
  80.         eBerkeleyDB   //!< GetErrno() to return BerkeleyDB specific error code
  81.     };
  82.     virtual const char* GetErrCodeString(void) const
  83.     {
  84.         switch ( GetErrCode() ) {
  85.         case eSystem:       return "eSystem";
  86.         case eBerkeleyDB:   return "eBerkeleyDB";
  87.         default:            return  CException::GetErrCodeString();
  88.         }
  89.     }
  90.     /// Return Berkley DB related error code.
  91.     int BDB_GetErrno() const
  92.     {
  93.         return GetErrno();
  94.     }
  95.     NCBI_EXCEPTION_DEFAULT2(CBDB_ErrnoException, CParent, int);
  96. };
  97. /// BDB library exception. 
  98. /// Thrown if error is specific to the NCBI BDB C++ library.
  99. class NCBI_BDB_EXPORT CBDB_LibException : public CBDB_Exception
  100. {
  101. public:
  102.     enum EErrCode {
  103.         eOverflow,
  104.         eType,
  105.         eIdxSearch,
  106.         eInvalidValue,
  107.         eInvalidOperation,
  108.         eTransInProgress,
  109.         eNull,
  110.         eQueryError,
  111.         eQuerySyntaxError
  112.     };
  113.     virtual const char* GetErrCodeString(void) const
  114.     {
  115.         switch (GetErrCode())
  116.         {
  117.         case eOverflow:          return "eOverflow";
  118.         case eType:              return "eType";
  119.         case eIdxSearch:         return "eIdxSearch";
  120.         case eInvalidValue:      return "eInvalidValue";
  121.         case eInvalidOperation:  return "eInvalidOperation";
  122.         case eNull:              return "eNull";
  123.         case eTransInProgress:   return "eTransInProgress";
  124.         case eQueryError:        return "eQueryError";
  125.         case eQuerySyntaxError:  return "eQuerySyntaxError";
  126.         default:                 return  CException::GetErrCodeString();
  127.         }
  128.     }
  129.     NCBI_EXCEPTION_DEFAULT(CBDB_LibException, CBDB_Exception);
  130. };
  131. #define BDB_THROW(errcode, message) 
  132.     throw CBDB_LibException(__FILE__, __LINE__, 0, CBDB_LibException::errcode, 
  133.                             (message))
  134. #define BDB_ERRNO_THROW(errnum, message) 
  135.     throw CBDB_ErrnoException(__FILE__, __LINE__, 0, 
  136.          ((errnum > 0) ? CBDB_ErrnoException::eSystem : 
  137.                          CBDB_ErrnoException::eBerkeleyDB), 
  138.           (message), errnum)
  139. #define BDB_CHECK(errnum, dbfile) 
  140.     do { 
  141.         if ( errnum ) { 
  142.             std::string message = "BerkeleyDB error:"; 
  143.             message.append(CBDB_StrErrAdapt::strerror(errnum)); 
  144.             if (dbfile) { 
  145.                 message.append(" File:'"); 
  146.                 message.append(dbfile); 
  147.                 message.append("'"); 
  148.             } 
  149.             BDB_ERRNO_THROW(errnum, message); 
  150.         } 
  151.     } while (0)
  152. /* @} */
  153. END_NCBI_SCOPE
  154. /*
  155.  * ===========================================================================
  156.  * $Log: bdb_expt.hpp,v $
  157.  * Revision 1000.1  2004/04/12 17:13:23  gouriano
  158.  * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.12
  159.  *
  160.  * Revision 1.12  2004/02/24 19:24:48  kuznets
  161.  * Syntax error fix
  162.  *
  163.  * Revision 1.11  2004/02/24 16:29:59  kuznets
  164.  * Add error codes associated with queries (syntax, execution, etc.)
  165.  *
  166.  * Revision 1.10  2004/02/13 14:58:28  kuznets
  167.  * + eQuery error code
  168.  *
  169.  * Revision 1.9  2003/12/10 19:13:18  kuznets
  170.  * Added support of berkeley db transactions
  171.  *
  172.  * Revision 1.8  2003/09/29 14:30:22  kuznets
  173.  * Comments doxygenification
  174.  *
  175.  * Revision 1.7  2003/09/26 19:51:00  kuznets
  176.  * Comments clean up
  177.  *
  178.  * Revision 1.6  2003/07/22 19:20:29  kuznets
  179.  * Added new error code: InvalidOperation.
  180.  *
  181.  * Revision 1.5  2003/06/27 18:57:16  dicuccio
  182.  * Uninlined strerror() adaptor.  Changed to use #include<> instead of #include ""
  183.  *
  184.  * Revision 1.4  2003/06/03 18:50:09  kuznets
  185.  * Added dll export/import specifications
  186.  *
  187.  * Revision 1.3  2003/04/30 19:04:06  kuznets
  188.  * Error diagnostics improved
  189.  *
  190.  * Revision 1.2  2003/04/29 16:48:31  kuznets
  191.  * Fixed minor warnings in Sun Workshop compiler
  192.  *
  193.  * Revision 1.1  2003/04/24 16:31:16  kuznets
  194.  * Initial revision
  195.  *
  196.  *
  197.  * ===========================================================================
  198.  */
  199. #endif