FTXUI/include/ftxui/util/autoreset.hpp

33 lines
907 B
C++
Raw Permalink Normal View History

2023-08-19 19:56:36 +08:00
// Copyright 2020 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in
// the LICENSE file.
2019-01-20 05:06:05 +08:00
#ifndef FTXUI_UTIL_AUTORESET_HPP
#define FTXUI_UTIL_AUTORESET_HPP
#include <utility>
2019-01-20 05:06:05 +08:00
namespace ftxui {
2020-08-16 08:24:50 +08:00
/// Assign a value to a variable, reset its old value when going out of scope.
template <typename T>
2019-01-20 05:06:05 +08:00
class AutoReset {
public:
AutoReset(T* variable, T new_value)
: variable_(variable), previous_value_(std::move(*variable)) {
2019-01-20 05:06:05 +08:00
*variable_ = std::move(new_value);
}
AutoReset(const AutoReset&) = delete;
AutoReset(AutoReset&&) = delete;
AutoReset& operator=(const AutoReset&) = delete;
AutoReset& operator=(AutoReset&&) = delete;
2019-01-20 05:06:05 +08:00
~AutoReset() { *variable_ = std::move(previous_value_); }
2019-01-20 05:06:05 +08:00
private:
T* variable_;
T previous_value_;
};
} // namespace ftxui
2019-01-20 05:06:05 +08:00
#endif /* end of include guard: FTXUI_UTIL_AUTORESET_HPP */