Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
third_party
accessibility
base
auto_reset.h
Go to the documentation of this file.
1
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
#ifndef ACCESSIBILITY_BASE_AUTO_RESET_H_
6
#define ACCESSIBILITY_BASE_AUTO_RESET_H_
7
8
#include <utility>
9
10
// base::AutoReset<> is useful for setting a variable to a new value only within
11
// a particular scope. An base::AutoReset<> object resets a variable to its
12
// original value upon destruction, making it an alternative to writing
13
// "var = false;" or "var = old_val;" at all of a block's exit points.
14
//
15
// This should be obvious, but note that an base::AutoReset<> instance should
16
// have a shorter lifetime than its scoped_variable, to prevent invalid memory
17
// writes when the base::AutoReset<> object is destroyed.
18
19
namespace
base
{
20
21
template
<
typename
T>
22
class
AutoReset
{
23
public
:
24
template
<
typename
U>
25
AutoReset
(
T
* scoped_variable, U&& new_value)
26
: scoped_variable_(scoped_variable),
27
original_value_(
28
std
::exchange(*scoped_variable_,
std
::forward<U>(new_value))) {}
29
30
AutoReset
(
AutoReset
&& other)
31
: scoped_variable_(
std
::exchange(other.scoped_variable_, nullptr)),
32
original_value_(
std
::move(other.original_value_)) {}
33
34
AutoReset
&
operator=
(
AutoReset
&& rhs) {
35
scoped_variable_ = std::exchange(rhs.scoped_variable_,
nullptr
);
36
original_value_ = std::move(rhs.original_value_);
37
return
*
this
;
38
}
39
40
~AutoReset
() {
41
if
(scoped_variable_)
42
*scoped_variable_ = std::move(original_value_);
43
}
44
45
private
:
46
T
* scoped_variable_;
47
T
original_value_;
48
};
49
50
}
// namespace base
51
52
#endif
// ACCESSIBILITY_BASE_AUTO_RESET_H_
base::AutoReset
Definition
auto_reset.h:22
base::AutoReset::AutoReset
AutoReset(T *scoped_variable, U &&new_value)
Definition
auto_reset.h:25
base::AutoReset::~AutoReset
~AutoReset()
Definition
auto_reset.h:40
base::AutoReset::operator=
AutoReset & operator=(AutoReset &&rhs)
Definition
auto_reset.h:34
base::AutoReset::AutoReset
AutoReset(AutoReset &&other)
Definition
auto_reset.h:30
base
Definition
ax_tree_id_registry.h:17
std
Definition
ref_ptr.h:256
T
#define T
Definition
precompiler.cc:65
Generated on Fri Apr 26 2024 06:14:38 for Flutter Engine by
1.9.8