The Battle for Wesnoth 1.21.0-dev
 
Loading...
Searching...
No Matches
guard_value.hpp
Go to the documentation of this file.
1/*
2 Copyright (C) 2003 - 2025
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
17namespace 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 */
23template<typename T>
25 T* ref_;
27public:
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.
guard_value(T &ref, T new_val)