mp-coro main
Coroutine support tools
coro_ptr.h
Go to the documentation of this file.
1// The MIT License (MIT)
2//
3// Copyright (c) 2021 Mateusz Pusz
4//
5// Permission is hereby granted, free of charge, to any person obtaining a copy
6// of this software and associated documentation files (the "Software"), to deal
7// in the Software without restriction, including without limitation the rights
8// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9// copies of the Software, and to permit persons to whom the Software is
10// furnished to do so, subject to the following conditions:
11//
12// The above copyright notice and this permission notice shall be included in all
13// copies or substantial portions of the Software.
14//
15// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21// SOFTWARE.
22
23#pragma once
24
25#include <mp-coro/trace.h>
26#include <coroutine>
27#include <memory>
28
29namespace mp_coro {
30
31/// If the given promise object has an associated coroutine, destroy it.
33 template <typename Promise>
34 void operator()(Promise *promise) const noexcept {
35 TRACE_FUNC();
36 auto handle = std::coroutine_handle<Promise>::from_promise(*promise);
37 if (handle)
38 handle.destroy();
39 }
40};
41
42/// RAII wrapper that destroys promise object's associated coroutine.
43template <typename T>
44using promise_ptr = std::unique_ptr<T, coro_deleter>;
45
46} // namespace mp_coro
Definition: async.h:31
std::unique_ptr< T, coro_deleter > promise_ptr
RAII wrapper that destroys promise object's associated coroutine.
Definition: coro_ptr.h:44
If the given promise object has an associated coroutine, destroy it.
Definition: coro_ptr.h:32
void operator()(Promise *promise) const noexcept
Definition: coro_ptr.h:34
#define TRACE_FUNC()
Definition: trace.h:27