forked from dolphin-emu/dolphin
		
	g_compressAndDumpStateSyncEvent was Set() before destruction of file object (i.e. before flushing changes and closing file). Also, adds Common::ScopeGuard wrapper for RAII.
		
			
				
	
	
		
			51 lines
		
	
	
		
			778 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			778 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
 |