Pigweed
Loading...
Searching...
No Matches
enqueue_heap_func.h
1
// Copyright 2023 The Pigweed Authors
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
4
// use this file except in compliance with the License. You may obtain a copy of
5
// the License at
6
//
7
// https://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12
// License for the specific language governing permissions and limitations under
13
// the License.
14
#pragma once
15
16
#include "pw_async2/dispatcher.h"
17
18
namespace
pw::async2 {
19
namespace
internal {
20
21
template
<
typename
Func>
22
class
RunHeapFuncTask
:
public
Task
{
23
public
:
24
static
Task
& New(Func&& func) {
25
return
*(
new
RunHeapFuncTask
(std::forward<Func>(func)));
26
}
27
28
private
:
29
RunHeapFuncTask
(Func&& func) : func_(std::forward<Func>(func)) {}
30
Poll<>
DoPend
(
Context
&)
final
{
31
func_();
32
return
Ready();
33
}
34
void
DoDestroy
() final {
delete
this
; }
35
Func func_;
36
};
37
38
}
// namespace internal
39
45
template
<
typename
Func>
46
void
EnqueueHeapFunc(Dispatcher& dispatcher, Func&& func) {
47
return
dispatcher.Post(
48
internal::RunHeapFuncTask<Func>::New(std::forward<Func>(func)));
49
}
50
51
}
// namespace pw::async2
pw::async2::Context
Definition:
dispatcher_base.h:52
pw::async2::Poll
Definition:
poll.h:54
pw::async2::Task
Definition:
dispatcher_base.h:158
pw::async2::internal::RunHeapFuncTask
Definition:
enqueue_heap_func.h:22
pw::async2::internal::RunHeapFuncTask::DoPend
Poll DoPend(Context &) final
Definition:
enqueue_heap_func.h:30
pw::async2::internal::RunHeapFuncTask::DoDestroy
void DoDestroy() final
Definition:
enqueue_heap_func.h:34
pw_async2
public
pw_async2
enqueue_heap_func.h
Generated by
1.9.6