mirror of
				https://github.com/facebook/zstd.git
				synced 2025-11-04 00:02:59 -05: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));
 | 
						|
}
 | 
						|
}
 |