Blender
V4.3
source
blender
blenlib
intern
lazy_threading.cc
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2023 Blender Authors
2
*
3
* SPDX-License-Identifier: GPL-2.0-or-later */
4
5
#include "
BLI_lazy_threading.hh
"
6
#include "
BLI_stack.hh
"
7
#include "
BLI_vector.hh
"
8
9
namespace
blender::lazy_threading
{
10
16
using
HintReceivers
=
RawStack
<
RawVector
<
FunctionRef
<void()>, 0>, 0>;
17
static
thread_local
HintReceivers
hint_receivers
= []() {
18
HintReceivers
receivers;
19
/* Make sure there is always at least one vector. */
20
receivers.
push_as
();
21
return
receivers;
22
}();
23
24
void
send_hint
()
25
{
26
for
(
const
FunctionRef
<
void
()> &fn :
hint_receivers
.
peek
()) {
27
fn();
28
}
29
}
30
31
HintReceiver::HintReceiver
(
const
FunctionRef
<
void
()> fn)
32
{
33
hint_receivers
.
peek
().append(fn);
34
}
35
36
HintReceiver::~HintReceiver
()
37
{
38
hint_receivers
.
peek
().pop_last();
39
}
40
41
ReceiverIsolation::ReceiverIsolation
()
42
{
43
hint_receivers
.
push_as
();
44
}
45
46
ReceiverIsolation::~ReceiverIsolation
()
47
{
48
BLI_assert
(
hint_receivers
.
peek
().is_empty());
49
hint_receivers
.
pop
();
50
}
51
52
}
// namespace blender::lazy_threading
BLI_assert
#define BLI_assert(a)
Definition
BLI_assert.h:50
BLI_lazy_threading.hh
BLI_stack.hh
BLI_vector.hh
blender::FunctionRef
Definition
BLI_function_ref.hh:74
blender::Stack
Definition
BLI_stack.hh:70
blender::Stack::peek
T & peek()
Definition
BLI_stack.hh:263
blender::Stack::push_as
void push_as(ForwardT &&...value)
Definition
BLI_stack.hh:222
blender::Stack::pop
T pop()
Definition
BLI_stack.hh:242
blender::Vector
Definition
BLI_vector.hh:65
blender::lazy_threading::HintReceiver::~HintReceiver
~HintReceiver()
Definition
lazy_threading.cc:36
blender::lazy_threading::HintReceiver::HintReceiver
HintReceiver(FunctionRef< void()> fn)
Definition
lazy_threading.cc:31
blender::lazy_threading::ReceiverIsolation::ReceiverIsolation
ReceiverIsolation()
Definition
lazy_threading.cc:41
blender::lazy_threading::ReceiverIsolation::~ReceiverIsolation
~ReceiverIsolation()
Definition
lazy_threading.cc:46
blender::lazy_threading
Definition
BLI_lazy_threading.hh:62
blender::lazy_threading::send_hint
void send_hint()
Definition
lazy_threading.cc:24
blender::lazy_threading::hint_receivers
static thread_local HintReceivers hint_receivers
Definition
lazy_threading.cc:17
Generated on Thu Feb 6 2025 07:36:39 for Blender by
doxygen
1.11.0