mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	SynchronizedWrapper: Add Lock convenience method
This commit is contained in:
		
							parent
							
								
									1b28b26682
								
							
						
					
					
						commit
						21f4f49c7a
					
				
					 1 changed files with 25 additions and 18 deletions
				
			
		|  | @ -9,25 +9,8 @@ | |||
| 
 | ||||
| namespace Common { | ||||
| 
 | ||||
| /**
 | ||||
|  * Wraps an object, only allowing access to it via a locking reference wrapper. Good to ensure no | ||||
|  * one forgets to lock a mutex before acessing an object. To access the wrapped object construct a | ||||
|  * SyncronizedRef on this wrapper. Inspired by Rust's Mutex type | ||||
|  * (http://doc.rust-lang.org/std/sync/struct.Mutex.html).
 | ||||
|  */ | ||||
| template <typename T> | ||||
| class SynchronizedWrapper { | ||||
| public: | ||||
|     template <typename... Args> | ||||
|     SynchronizedWrapper(Args&&... args) : data(std::forward<Args>(args)...) {} | ||||
| 
 | ||||
| private: | ||||
|     template <typename U> | ||||
|     friend class SynchronizedRef; | ||||
| 
 | ||||
|     std::mutex mutex; | ||||
|     T data; | ||||
| }; | ||||
| class SynchronizedWrapper; | ||||
| 
 | ||||
| /**
 | ||||
|  * Synchronized reference, that keeps a SynchronizedWrapper's mutex locked during its lifetime. This | ||||
|  | @ -75,4 +58,28 @@ private: | |||
|     SynchronizedWrapper<T>* wrapper; | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  * Wraps an object, only allowing access to it via a locking reference wrapper. Good to ensure no | ||||
|  * one forgets to lock a mutex before acessing an object. To access the wrapped object construct a | ||||
|  * SyncronizedRef on this wrapper. Inspired by Rust's Mutex type | ||||
|  * (http://doc.rust-lang.org/std/sync/struct.Mutex.html).
 | ||||
|  */ | ||||
| template <typename T> | ||||
| class SynchronizedWrapper { | ||||
| public: | ||||
|     template <typename... Args> | ||||
|     SynchronizedWrapper(Args&&... args) : data(std::forward<Args>(args)...) {} | ||||
| 
 | ||||
|     SynchronizedRef<T> Lock() { | ||||
|         return {*this}; | ||||
|     } | ||||
| 
 | ||||
| private: | ||||
|     template <typename U> | ||||
|     friend class SynchronizedRef; | ||||
| 
 | ||||
|     std::mutex mutex; | ||||
|     T data; | ||||
| }; | ||||
| 
 | ||||
| } // namespace Common
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue