| 
									
										
										
										
											2023-08-19 13:56:36 +02:00
										 |  |  | // Copyright 2020 Arthur Sonzogni. All rights reserved.
 | 
					
						
							|  |  |  | // Use of this source code is governed by the MIT license that can be found in
 | 
					
						
							|  |  |  | // the LICENSE file.
 | 
					
						
							| 
									
										
										
										
											2019-01-19 22:06:05 +01:00
										 |  |  | #ifndef FTXUI_UTIL_AUTORESET_HPP
 | 
					
						
							|  |  |  | #define FTXUI_UTIL_AUTORESET_HPP
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-07 01:48:02 -04:00
										 |  |  | #include <utility>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-19 22:06:05 +01:00
										 |  |  | namespace ftxui { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-16 02:24:50 +02:00
										 |  |  | /// Assign a value to a variable, reset its old value when going out of scope.
 | 
					
						
							| 
									
										
										
										
											2020-03-23 21:26:00 +01:00
										 |  |  | template <typename T> | 
					
						
							| 
									
										
										
										
											2019-01-19 22:06:05 +01:00
										 |  |  | class AutoReset { | 
					
						
							|  |  |  |  public: | 
					
						
							|  |  |  |   AutoReset(T* variable, T new_value) | 
					
						
							| 
									
										
										
										
											2020-03-23 21:26:00 +01:00
										 |  |  |       : variable_(variable), previous_value_(std::move(*variable)) { | 
					
						
							| 
									
										
										
										
											2019-01-19 22:06:05 +01:00
										 |  |  |     *variable_ = std::move(new_value); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2024-05-01 11:40:49 +02:00
										 |  |  |   AutoReset(const AutoReset&) = delete; | 
					
						
							|  |  |  |   AutoReset(AutoReset&&) = delete; | 
					
						
							|  |  |  |   AutoReset& operator=(const AutoReset&) = delete; | 
					
						
							|  |  |  |   AutoReset& operator=(AutoReset&&) = delete; | 
					
						
							| 
									
										
										
										
											2019-01-19 22:06:05 +01:00
										 |  |  |   ~AutoReset() { *variable_ = std::move(previous_value_); } | 
					
						
							| 
									
										
										
										
											2020-03-23 21:26:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-19 22:06:05 +01:00
										 |  |  |  private: | 
					
						
							|  |  |  |   T* variable_; | 
					
						
							|  |  |  |   T previous_value_; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-23 21:26:00 +01:00
										 |  |  | }  // namespace ftxui
 | 
					
						
							| 
									
										
										
										
											2019-01-19 22:06:05 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif /* end of include guard: FTXUI_UTIL_AUTORESET_HPP */
 |