cxx_int.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1997-2002
  5.  * Sleepycat Software.  All rights reserved.
  6.  *
  7.  * $Id: cxx_int.h,v 11.20 2002/01/11 15:52:23 bostic Exp $
  8.  */
  9. #ifndef _CXX_INT_H_
  10. #define _CXX_INT_H_
  11. // private data structures known to the implementation only
  12. //
  13. // Using FooImp classes will allow the implementation to change in the
  14. // future without any modification to user code or even to header files
  15. // that the user includes. FooImp * is just like void * except that it
  16. // provides a little extra protection, since you cannot randomly assign
  17. // any old pointer to a FooImp* as you can with void *.  Currently, a
  18. // pointer to such an opaque class is always just a pointer to the
  19. // appropriate underlying implementation struct.  These are converted
  20. // back and forth using the various overloaded wrap()/unwrap() methods.
  21. // This is essentially a use of the "Bridge" Design Pattern.
  22. //
  23. // WRAPPED_CLASS implements the appropriate wrap() and unwrap() methods
  24. // for a wrapper class that has an underlying pointer representation.
  25. //
  26. #define WRAPPED_CLASS(_WRAPPER_CLASS, _IMP_CLASS, _WRAPPED_TYPE)           
  27.    
  28. class _IMP_CLASS {};                                               
  29.    
  30. inline _WRAPPED_TYPE unwrap(_WRAPPER_CLASS *val)                   
  31. {                                                                  
  32. if (!val) return (0);                                      
  33. return ((_WRAPPED_TYPE)((void *)(val->imp())));            
  34. }                                                                  
  35.    
  36. inline const _WRAPPED_TYPE unwrapConst(const _WRAPPER_CLASS *val)  
  37. {                                                                  
  38. if (!val) return (0);                                      
  39. return ((const _WRAPPED_TYPE)((void *)(val->constimp()))); 
  40. }                                                                  
  41.    
  42. inline _IMP_CLASS *wrap(_WRAPPED_TYPE val)                         
  43. {                                                                  
  44. return ((_IMP_CLASS*)((void *)val));                       
  45. }
  46. WRAPPED_CLASS(DbMpoolFile, DbMpoolFileImp, DB_MPOOLFILE*)
  47. WRAPPED_CLASS(Db, DbImp, DB*)
  48. WRAPPED_CLASS(DbEnv, DbEnvImp, DB_ENV*)
  49. WRAPPED_CLASS(DbTxn, DbTxnImp, DB_TXN*)
  50. // A tristate integer value used by the DB_ERROR macro below.
  51. // We chose not to make this an enumerated type so it can
  52. // be kept private, even though methods that return the
  53. // tristate int can be declared in db_cxx.h .
  54. //
  55. #define ON_ERROR_THROW     1
  56. #define ON_ERROR_RETURN    0
  57. #define ON_ERROR_UNKNOWN   (-1)
  58. // Macros that handle detected errors, in case we want to
  59. // change the default behavior.  The 'policy' is one of
  60. // the tristate values given above.  If UNKNOWN is specified,
  61. // the behavior is taken from the last initialized DbEnv.
  62. //
  63. #define DB_ERROR(caller, ecode, policy) 
  64.     DbEnv::runtime_error(caller, ecode, policy)
  65. #define DB_ERROR_DBT(caller, dbt, policy) 
  66.     DbEnv::runtime_error_dbt(caller, dbt, policy)
  67. #define DB_OVERFLOWED_DBT(dbt) 
  68. (F_ISSET(dbt, DB_DBT_USERMEM) && dbt->size > dbt->ulen)
  69. /* values for Db::flags_ */
  70. #define DB_CXX_PRIVATE_ENV      0x00000001
  71. #endif /* !_CXX_INT_H_ */