The Battle for Wesnoth  1.17.0-dev
guard_value.hpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2003 - 2021
3  Part of the Battle for Wesnoth Project https://www.wesnoth.org/
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or
8  (at your option) any later version.
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY.
11 
12  See the COPYING file for more details.
13 */
14 
15 #pragma once
16 
17 namespace utils {
18 
19 /**
20  * Data-based RAII scope guard.
21  * Assigns a value to a specific location, then restores the old value once it goes out of scope.
22  */
23 template<typename T>
24 class guard_value {
25  T* ref_;
27 public:
28  /**
29  * @param ref The memory location being guarded
30  * @param new_val The new value to temporarily assign to that location
31  */
32  guard_value(T& ref, T new_val)
33  : ref_(&ref)
34  , old_val_(ref)
35  {
36  ref = new_val;
37  }
39  {
40  *ref_ = old_val_;
41  }
42 };
43 
44 }
Data-based RAII scope guard.
Definition: guard_value.hpp:24
guard_value(T &ref, T new_val)
Definition: guard_value.hpp:32