The Battle for Wesnoth
1.19.7+dev
utils
guard_value.hpp
Go to the documentation of this file.
1
/*
2
Copyright (C) 2003 - 2024
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_
;
26
T
old_val_
;
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
}
38
~guard_value
()
39
{
40
*
ref_
=
old_val_
;
41
}
42
};
43
44
}
utils::guard_value
Data-based RAII scope guard.
Definition:
guard_value.hpp:24
utils::guard_value::guard_value
guard_value(T &ref, T new_val)
Definition:
guard_value.hpp:32
utils::guard_value::old_val_
T old_val_
Definition:
guard_value.hpp:26
utils::guard_value::ref_
T * ref_
Definition:
guard_value.hpp:25
utils::guard_value::~guard_value
~guard_value()
Definition:
guard_value.hpp:38
utils
Definition:
config_attribute_value.cpp:423
Generated by
1.9.1