| OLD | NEW |
| 1 /** | 1 /** |
| 2 * \file handle.h The "install session" is the context for all custom installati
on behavior. | 2 * \file handle.h The "install session" is the context for all custom installati
on behavior. |
| 3 */ | 3 */ |
| 4 | 4 |
| 5 #ifndef HANDLE_H | 5 #ifndef HANDLE_H |
| 6 #define HANDLE_H | 6 #define HANDLE_H |
| 7 | 7 |
| 8 #include "windows.h" | 8 #include "windows.h" |
| 9 #include "msi.h" | 9 #include "msi.h" |
| 10 | 10 |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 | 134 |
| 135 public: | 135 public: |
| 136 /** | 136 /** |
| 137 * Conversion operator to underlying handle type. | 137 * Conversion operator to underlying handle type. |
| 138 */ | 138 */ |
| 139 operator T() | 139 operator T() |
| 140 { | 140 { |
| 141 return _handle ; | 141 return _handle ; |
| 142 } | 142 } |
| 143 | 143 |
| 144 /** |
| 145 * Error thrown when initialize or assigning a null handle against policy. |
| 146 * |
| 147 * Note that this error is a logic_error, not a runtime error. |
| 148 * If it's against policy for a handle to be null, it's an error for the calle
r to try to make it null. |
| 149 * Policy enforcment here is not a substitute for good error handling by the c
aller. |
| 150 * In many cases, the caller ought to be throwing windows_api_error. |
| 151 */ |
| 144 struct null_handle_error | 152 struct null_handle_error |
| 145 : public std::runtime_error | 153 : public std::logic_error |
| 146 { | 154 { |
| 147 null_handle_error() | 155 null_handle_error() |
| 148 : std::runtime_error( "May not initialize with null handle" ) | 156 : std::logic_error( "May not initialize with null handle" ) |
| 149 {} | 157 {} |
| 150 } ; | 158 } ; |
| 151 } ; | 159 } ; |
| 152 | 160 |
| 153 /* | 161 /* |
| 154 * Handle class | 162 * Handle class |
| 155 */ | 163 */ |
| 156 template< | 164 template< |
| 157 class T, | 165 class T, |
| 158 template <class> class Null_Policy, | 166 template <class> class Null_Policy, |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 * The check for a non-zero handle compiles out conditionally based on Null_Po
licy. | 255 * The check for a non-zero handle compiles out conditionally based on Null_Po
licy. |
| 248 * The specific function used to close the handle is given by the Destruction_
Policy. | 256 * The specific function used to close the handle is given by the Destruction_
Policy. |
| 249 */ | 257 */ |
| 250 ~handle() | 258 ~handle() |
| 251 { | 259 { |
| 252 if ( Null_Policy< T >::prohibited_always() || ( _handle != 0 ) ) { | 260 if ( Null_Policy< T >::prohibited_always() || ( _handle != 0 ) ) { |
| 253 Destruction_Policy< T >::close( _handle ) ; | 261 Destruction_Policy< T >::close( _handle ) ; |
| 254 } | 262 } |
| 255 } | 263 } |
| 256 | 264 |
| 265 /** |
| 266 * Expose the underlying handle type. |
| 267 */ |
| 268 typedef T handle_type ; |
| 257 } ; | 269 } ; |
| 258 | 270 |
| 259 //------------------------------------------------------- | 271 //------------------------------------------------------- |
| 260 // Common instantiations of handle | 272 // Common instantiations of handle |
| 261 //------------------------------------------------------- | 273 //------------------------------------------------------- |
| 262 typedef handle< HANDLE, Disallow_Null, Windows_Generic_Destruction > Windows_Han
dle ; | 274 typedef handle< HANDLE, Disallow_Null, Windows_Generic_Destruction > Windows_Han
dle ; |
| 263 | 275 |
| 264 #endif | 276 #endif |
| OLD | NEW |