mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	Add SCOPE_EXIT macro to conveniently execute cleanup actions
This commit is contained in:
		
							parent
							
								
									ed0221552a
								
							
						
					
					
						commit
						04b1f2936c
					
				
					 2 changed files with 38 additions and 0 deletions
				
			
		|  | @ -51,6 +51,7 @@ set(HEADERS | |||
|             msg_handler.h | ||||
|             platform.h | ||||
|             scm_rev.h | ||||
|             scope_exit.h | ||||
|             string_util.h | ||||
|             swap.h | ||||
|             symbols.h | ||||
|  |  | |||
							
								
								
									
										37
									
								
								src/common/scope_exit.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/common/scope_exit.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | |||
| // Copyright 2014 Citra Emulator Project
 | ||||
| // Licensed under GPLv2+
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| namespace detail { | ||||
|     template <typename Func> | ||||
|     struct ScopeExitHelper { | ||||
|         explicit ScopeExitHelper(Func&& func) : func(std::move(func)) {} | ||||
|         ~ScopeExitHelper() { func(); } | ||||
| 
 | ||||
|         Func func; | ||||
|     }; | ||||
| 
 | ||||
|     template <typename Func> | ||||
|     ScopeExitHelper<Func> ScopeExit(Func&& func) { return ScopeExitHelper<Func>(std::move(func)); } | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * This macro allows you to conveniently specify a block of code that will run on scope exit. Handy | ||||
|  * for doing ad-hoc clean-up tasks in a function with multiple returns. | ||||
|  * | ||||
|  * Example usage: | ||||
|  * \code | ||||
|  * const int saved_val = g_foo; | ||||
|  * g_foo = 55; | ||||
|  * SCOPE_EXIT({ g_foo = saved_val; }); | ||||
|  * | ||||
|  * if (Bar()) { | ||||
|  *     return 0; | ||||
|  * } else { | ||||
|  *     return 20; | ||||
|  * } | ||||
|  * \endcode | ||||
|  */ | ||||
| #define SCOPE_EXIT(body) auto scope_exit_helper_##__LINE__ = detail::ScopeExit([&]() body) | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue