mirror of
				https://github.com/facebook/zstd.git
				synced 2025-10-30 10:25:39 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /**
 | |
|  * Copyright (c) 2016-present, Facebook, Inc.
 | |
|  * All rights reserved.
 | |
|  *
 | |
|  * This source code is licensed under the BSD-style license found in the
 | |
|  * LICENSE file in the root directory of this source tree. An additional grant
 | |
|  * of patent rights can be found in the PATENTS file in the same directory.
 | |
|  */
 | |
| #pragma once
 | |
| 
 | |
| #include <utility>
 | |
| 
 | |
| namespace pzstd {
 | |
| 
 | |
| /**
 | |
|  * Dismissable scope guard.
 | |
|  * `Function` must be callable and take no parameters.
 | |
|  * Unless `dissmiss()` is called, the callable is executed upon destruction of
 | |
|  * `ScopeGuard`.
 | |
|  *
 | |
|  * Example:
 | |
|  *
 | |
|  *   auto guard = makeScopeGuard([&] { cleanup(); });
 | |
|  */
 | |
| template <typename Function>
 | |
| class ScopeGuard {
 | |
|   Function function;
 | |
|   bool dismissed;
 | |
| 
 | |
|  public:
 | |
|   explicit ScopeGuard(Function&& function)
 | |
|       : function(std::move(function)), dismissed(false) {}
 | |
| 
 | |
|   void dismiss() {
 | |
|     dismissed = true;
 | |
|   }
 | |
| 
 | |
|   ~ScopeGuard() noexcept {
 | |
|     if (!dismissed) {
 | |
|       function();
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| /// Creates a scope guard from `function`.
 | |
| template <typename Function>
 | |
| ScopeGuard<Function> makeScopeGuard(Function&& function) {
 | |
|   return ScopeGuard<Function>(std::forward<Function>(function));
 | |
| }
 | |
| }
 |