Files
allwpilib/wpiutil/src/main/native/include/wpi/scope

38 lines
765 B
Plaintext
Raw Normal View History

// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <utility>
namespace wpi {
template <typename F>
class scope_exit {
public:
explicit scope_exit(F&& f) noexcept : m_f{std::forward<F>(f)} {}
~scope_exit() {
if (m_active) {
m_f();
}
}
scope_exit(scope_exit&& rhs) noexcept
: m_f{std::move(rhs.m_f)}, m_active{rhs.m_active} {
rhs.release();
}
scope_exit(const scope_exit&) = delete;
scope_exit& operator=(const scope_exit&) = delete;
void release() noexcept { m_active = false; }
private:
F m_f;
bool m_active = true;
};
} // namespace wpi