Iros
 
Loading...
Searching...
No Matches
scope_value_change.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/util/exchange.h"
5#include "di/util/move.h"
6
7namespace di::util {
8template<concepts::Copyable T>
9class [[nodiscard]] ScopeValueChange {
10public:
11 constexpr explicit ScopeValueChange(T& value, T new_value) : m_value(value), m_old_value(value) {
12 m_value = util::move(new_value);
13 }
14
16 : m_value(other.m_value)
17 , m_old_value(util::move(other.m_old_value))
18 , m_released(util::exchange(other.m_released, true)) {}
19
20 constexpr ~ScopeValueChange() { m_value = util::move(m_old_value); }
21
23
24 constexpr void release() { m_released = true; }
25
26private:
27 T& m_value;
28 T m_old_value;
29 bool m_released { false };
30};
31
32template<typename T>
34}
35
36namespace di {
38}
Definition scope_value_change.h:9
auto operator=(ScopeValueChange &&) -> ScopeValueChange &=delete
constexpr ScopeValueChange(ScopeValueChange &&other)
Definition scope_value_change.h:15
constexpr ~ScopeValueChange()
Definition scope_value_change.h:20
constexpr ScopeValueChange(T &value, T new_value)
Definition scope_value_change.h:11
constexpr void release()
Definition scope_value_change.h:24
Definition vocab.h:96
constexpr auto exchange(T &object, U &&new_value) -> T
Definition exchange.h:8
ScopeValueChange(T &, T) -> ScopeValueChange< T >
Definition zstring_parser.h:9