/
githubmirror
/
zstd
Обзор
Документация
Войти
/
githubmirror
/
zstd
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
contrib/pzstd/utils/ScopeGuard.h
50 строк
1 KB
W. Felix Handte
Coalesce Almost All Copyright Notices to Standard Phrasing
20 дек 2022, 20:52
20 дек 2022, 20:52
5d693cc
Код
Авторство
О чём код?
/* * Copyright (c) Meta Platforms, Inc. and affiliates. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the * LICENSE file in the root directory of this source tree) and the GPLv2 (found * in the COPYING file in the root directory of this source tree). */ #pragma once #include <utility> namespace pzstd { /** * Dismissable scope guard. * `Function` must be callable and take no parameters. * Unless `dismiss()` is called, the callable is executed upon destruction of * `ScopeGuard`. * * Example: * * auto guard = makeScopeGuard([&] { cleanup(); }); */ template <typename Function> class ScopeGuard { Function function; bool dismissed; public: explicit ScopeGuard(Function&& function) : function(std::move(function)), dismissed(false) {} void dismiss() { dismissed = true; } ~ScopeGuard() noexcept { if (!dismissed) { function(); } } }; /// Creates a scope guard from `function`. template <typename Function> ScopeGuard<Function> makeScopeGuard(Function&& function) { return ScopeGuard<Function>(std::forward<Function>(function)); } }