Blender
V4.5
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
9
#include "
BLI_lazy_threading.hh
"
10
#include "
BLI_stack.hh
"
11
#include "
BLI_vector.hh
"
12
13
namespace
blender::lazy_threading
{
14
20
using
HintReceivers
=
RawStack
<
RawVector
<
FunctionRef
<void()>, 0>, 0>;
21
static
thread_local
HintReceivers
hint_receivers
= []() {
22
HintReceivers
receivers;
23
/* Make sure there is always at least one vector. */
24
receivers.
push_as
();
25
return
receivers;
26
}();
27
28
void
send_hint
()
29
{
30
for
(
const
FunctionRef
<
void
()> &fn :
hint_receivers
.
peek
()) {
31
fn();
32
}
33
}
34
35
HintReceiver::HintReceiver
(
const
FunctionRef
<
void
()> fn)
36
{
37
hint_receivers
.
peek
().append(fn);
38
}
39
40
HintReceiver::~HintReceiver
()
41
{
42
hint_receivers
.
peek
().pop_last();
43
}
44
45
ReceiverIsolation::ReceiverIsolation
()
46
{
47
hint_receivers
.
push_as
();
48
}
49
50
ReceiverIsolation::~ReceiverIsolation
()
51
{
52
BLI_assert
(
hint_receivers
.
peek
().is_empty());
53
hint_receivers
.
pop
();
54
}
55
56
}
// namespace blender::lazy_threading
BLI_assert
#define BLI_assert(a)
Definition
BLI_assert.h:46
BLI_lazy_threading.hh
BLI_stack.hh
BLI_vector.hh
blender::FunctionRef
Definition
BLI_function_ref.hh:72
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:76
blender::lazy_threading::HintReceiver::~HintReceiver
~HintReceiver()
Definition
lazy_threading.cc:40
blender::lazy_threading::HintReceiver::HintReceiver
HintReceiver(FunctionRef< void()> fn)
Definition
lazy_threading.cc:35
blender::lazy_threading::ReceiverIsolation::ReceiverIsolation
ReceiverIsolation()
Definition
lazy_threading.cc:45
blender::lazy_threading::ReceiverIsolation::~ReceiverIsolation
~ReceiverIsolation()
Definition
lazy_threading.cc:50
blender::lazy_threading
Definition
BLI_lazy_threading.hh:62
blender::lazy_threading::send_hint
void send_hint()
Definition
lazy_threading.cc:28
blender::lazy_threading::hint_receivers
static thread_local HintReceivers hint_receivers
Definition
lazy_threading.cc:21
Generated on Fri Apr 3 2026 06:33:18 for Blender by
doxygen
1.11.0