Files
allwpilib/wpiutil/src/main/native/include/wpi/scope
Tyler Veness 773198537c [wpiutil] Add wpi::scope_exit (#4432)
This is based on std::scope_exit in the C++ library fundamentals TS v3.
2022-09-23 14:48:59 -07:00

38 lines
765 B
Plaintext

// 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