cxx_int.h
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1997, 1998, 1999, 2000
  5.  * Sleepycat Software.  All rights reserved.
  6.  *
  7.  * $Id: cxx_int.h,v 11.13 2000/11/21 22:56:36 dda 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. // These defines are for tedious field set/get access methods.
  66. //
  67. #define DB_RO_ACCESS(_class, _type, _cxx_name, _field)         
  68.        
  69. _type _class::get_##_cxx_name() const                          
  70. {                                                              
  71. return (_field);                                       
  72. }
  73. #define DB_WO_ACCESS(_class, _type, _cxx_name, _field)         
  74.        
  75. void _class::set_##_cxx_name(_type value)                      
  76. {                                                              
  77. _field = value;                                        
  78. }                                                              
  79. #define DB_RW_ACCESS(_class, _type, _cxx_name, _field)         
  80. DB_RO_ACCESS(_class, _type, _cxx_name, _field)         
  81. DB_WO_ACCESS(_class, _type, _cxx_name, _field)
  82. /* values for Db::flags_ */
  83. #define DB_CXX_PRIVATE_ENV      0x00000001
  84. #endif /* !_CXX_INT_H_ */