forked from dolphin-emu/dolphin
		
	
		
			
				
	
	
		
			44 lines
		
	
	
		
			801 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			801 B
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright 2015 Dolphin Emulator Project
 | 
						|
// Licensed under GPLv2+
 | 
						|
// Refer to the license.txt file included.
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include <functional>
 | 
						|
 | 
						|
namespace Common
 | 
						|
{
 | 
						|
class ScopeGuard final
 | 
						|
{
 | 
						|
public:
 | 
						|
  template <class Callable>
 | 
						|
  ScopeGuard(Callable&& finalizer) : m_finalizer(std::forward<Callable>(finalizer))
 | 
						|
  {
 | 
						|
  }
 | 
						|
 | 
						|
  ScopeGuard(ScopeGuard&& other) : m_finalizer(std::move(other.m_finalizer))
 | 
						|
  {
 | 
						|
    other.m_finalizer = nullptr;
 | 
						|
  }
 | 
						|
 | 
						|
  ~ScopeGuard() { Exit(); }
 | 
						|
  void Dismiss() { m_finalizer = nullptr; }
 | 
						|
  void Exit()
 | 
						|
  {
 | 
						|
    if (m_finalizer)
 | 
						|
    {
 | 
						|
      m_finalizer();  // must not throw
 | 
						|
      m_finalizer = nullptr;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  ScopeGuard(const ScopeGuard&) = delete;
 | 
						|
 | 
						|
  void operator=(const ScopeGuard&) = delete;
 | 
						|
 | 
						|
private:
 | 
						|
  std::function<void()> m_finalizer;
 | 
						|
};
 | 
						|
 | 
						|
}  // Namespace Common
 |