Blender
V4.3
source
blender
functions
tests
FN_multi_function_test_common.hh
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2023 Blender Authors
2
*
3
* SPDX-License-Identifier: Apache-2.0 */
4
5
#include "
FN_multi_function.hh
"
6
7
namespace
blender::fn::multi_function::tests
{
8
9
class
AddPrefixFunction
:
public
MultiFunction
{
10
public
:
11
AddPrefixFunction
()
12
{
13
static
const
Signature
signature
= []() {
14
Signature
signature
;
15
SignatureBuilder
builder{
"Add Prefix"
,
signature
};
16
builder.single_input<std::string>(
"Prefix"
);
17
builder.single_mutable<std::string>(
"Strings"
);
18
return
signature
;
19
}();
20
this->
set_signature
(&signature);
21
}
22
23
void
call
(
const
IndexMask
&mask,
Params
params
,
Context
/*context*/
)
const override
24
{
25
const
VArray<std::string>
&prefixes =
params
.readonly_single_input<std::string>(0,
"Prefix"
);
26
MutableSpan<std::string>
strings =
params
.single_mutable<std::string>(1,
"Strings"
);
27
28
mask.foreach_index([&](
const
int64_t
i) { strings[i] = prefixes[i] + strings[i]; });
29
}
30
};
31
32
class
CreateRangeFunction
:
public
MultiFunction
{
33
public
:
34
CreateRangeFunction
()
35
{
36
static
const
Signature
signature
= []() {
37
Signature
signature
;
38
SignatureBuilder
builder{
"Create Range"
,
signature
};
39
builder.single_input<
int
>(
"Size"
);
40
builder.vector_output<
int
>(
"Range"
);
41
return
signature
;
42
}();
43
this->
set_signature
(&signature);
44
}
45
46
void
call
(
const
IndexMask
&mask,
Params
params
,
Context
/*context*/
)
const override
47
{
48
const
VArray<int>
&sizes =
params
.readonly_single_input<
int
>(0,
"Size"
);
49
GVectorArray
&ranges =
params
.vector_output(1,
"Range"
);
50
51
mask.foreach_index([&](
const
int64_t
i) {
52
int
size = sizes[i];
53
for
(
int
j :
IndexRange
(size)) {
54
ranges.append(i, &j);
55
}
56
});
57
}
58
};
59
60
class
GenericAppendFunction
:
public
MultiFunction
{
61
private
:
62
Signature
signature_;
63
64
public
:
65
GenericAppendFunction
(
const
CPPType
&type)
66
{
67
SignatureBuilder
builder{
"Append"
, signature_};
68
builder.vector_mutable(
"Vector"
, type);
69
builder.single_input(
"Value"
, type);
70
this->
set_signature
(&signature_);
71
}
72
73
void
call
(
const
IndexMask
&mask,
Params
params
,
Context
/*context*/
)
const override
74
{
75
GVectorArray
&vectors =
params
.vector_mutable(0,
"Vector"
);
76
const
GVArray
&values =
params
.readonly_single_input(1,
"Value"
);
77
78
mask.foreach_index([&](
const
int64_t
i) {
79
BUFFER_FOR_CPP_TYPE_VALUE
(values.type(), buffer);
80
values.get(i, buffer);
81
vectors.
append
(i, buffer);
82
values.type().destruct(buffer);
83
});
84
}
85
};
86
87
class
ConcatVectorsFunction
:
public
MultiFunction
{
88
public
:
89
ConcatVectorsFunction
()
90
{
91
static
const
Signature
signature
= []() {
92
Signature
signature
;
93
SignatureBuilder
builder{
"Concat Vectors"
,
signature
};
94
builder.vector_mutable<
int
>(
"A"
);
95
builder.vector_input<
int
>(
"B"
);
96
return
signature
;
97
}();
98
this->
set_signature
(&signature);
99
}
100
101
void
call
(
const
IndexMask
&mask,
Params
params
,
Context
/*context*/
)
const override
102
{
103
GVectorArray
&a =
params
.vector_mutable(0);
104
const
GVVectorArray
&
b
=
params
.readonly_vector_input(1);
105
a.extend(mask,
b
);
106
}
107
};
108
109
class
AppendFunction
:
public
MultiFunction
{
110
public
:
111
AppendFunction
()
112
{
113
static
const
Signature
signature
= []() {
114
Signature
signature
;
115
SignatureBuilder
builder{
"Append"
,
signature
};
116
builder.vector_mutable<
int
>(
"Vector"
);
117
builder.single_input<
int
>(
"Value"
);
118
return
signature
;
119
}();
120
this->
set_signature
(&signature);
121
}
122
123
void
call
(
const
IndexMask
&mask,
Params
params
,
Context
/*context*/
)
const override
124
{
125
GVectorArray_TypedMutableRef<int>
vectors =
params
.vector_mutable<
int
>(0);
126
const
VArray<int>
&values =
params
.readonly_single_input<
int
>(1);
127
128
mask.foreach_index([&](
const
int64_t
i) { vectors.
append
(i, values[i]); });
129
}
130
};
131
132
class
SumVectorFunction
:
public
MultiFunction
{
133
public
:
134
SumVectorFunction
()
135
{
136
static
const
Signature
signature
= []() {
137
Signature
signature
;
138
SignatureBuilder
builder{
"Sum Vectors"
,
signature
};
139
builder.vector_input<
int
>(
"Vector"
);
140
builder.single_output<
int
>(
"Sum"
);
141
return
signature
;
142
}();
143
this->
set_signature
(&signature);
144
}
145
146
void
call
(
const
IndexMask
&mask,
Params
params
,
Context
/*context*/
)
const override
147
{
148
const
VVectorArray<int>
&vectors =
params
.readonly_vector_input<
int
>(0);
149
MutableSpan<int>
sums =
params
.uninitialized_single_output<
int
>(1);
150
151
mask.foreach_index([&](
const
int64_t
i) {
152
int
sum
= 0;
153
for
(
int
j :
IndexRange
(vectors.
get_vector_size
(i))) {
154
sum
+= vectors.
get_vector_element
(i, j);
155
}
156
sums[i] =
sum
;
157
});
158
}
159
};
160
161
class
OptionalOutputsFunction
:
public
MultiFunction
{
162
public
:
163
OptionalOutputsFunction
()
164
{
165
static
const
Signature
signature
= []() {
166
Signature
signature
;
167
SignatureBuilder
builder{
"Optional Outputs"
,
signature
};
168
builder.single_output<
int
>(
"Out 1"
);
169
builder.single_output<std::string>(
"Out 2"
);
170
return
signature
;
171
}();
172
this->
set_signature
(&signature);
173
}
174
175
void
call
(
const
IndexMask
&mask,
Params
params
,
Context
/*context*/
)
const override
176
{
177
if
(
params
.single_output_is_required(0,
"Out 1"
)) {
178
MutableSpan<int>
values =
params
.uninitialized_single_output<
int
>(0,
"Out 1"
);
179
index_mask::masked_fill
(values, 5, mask);
180
}
181
MutableSpan<std::string>
values =
params
.uninitialized_single_output<std::string>(1,
"Out 2"
);
182
mask.foreach_index(
183
[&](
const
int
i) {
new
(&values[i]) std::string(
"hello, this is a long string"
); });
184
}
185
};
186
187
}
// namespace blender::fn::multi_function::tests
BUFFER_FOR_CPP_TYPE_VALUE
#define BUFFER_FOR_CPP_TYPE_VALUE(type, variable_name)
Definition
BLI_cpp_type.hh:779
FN_multi_function.hh
sum
static T sum(const btAlignedObjectArray< T > &items)
Definition
btSoftBodyHelpers.cpp:94
blender::CPPType
Definition
BLI_cpp_type.hh:101
blender::GVArray
Definition
BLI_generic_virtual_array.hh:176
blender::GVVectorArray
Definition
BLI_generic_virtual_vector_array.hh:20
blender::GVectorArray_TypedMutableRef
Definition
BLI_generic_vector_array.hh:83
blender::GVectorArray_TypedMutableRef::append
void append(const int64_t index, const T &value)
Definition
BLI_generic_vector_array.hh:103
blender::GVectorArray
Definition
BLI_generic_vector_array.hh:22
blender::GVectorArray::append
void append(int64_t index, const void *value)
Definition
generic_vector_array.cc:24
blender::IndexRange
Definition
BLI_index_range.hh:50
blender::MutableSpan
Definition
BLI_span.hh:444
blender::VArray
Definition
BLI_virtual_array_fwd.hh:9
blender::VVectorArray
Definition
BLI_virtual_vector_array.hh:21
blender::VVectorArray::get_vector_size
int64_t get_vector_size(const int64_t index) const
Definition
BLI_virtual_vector_array.hh:46
blender::VVectorArray::get_vector_element
T get_vector_element(const int64_t index, const int64_t index_in_vector) const
Definition
BLI_virtual_vector_array.hh:54
blender::fn::multi_function::Context
Definition
FN_multi_function_context.hh:27
blender::fn::multi_function::MultiFunction
Definition
FN_multi_function.hh:42
blender::fn::multi_function::MultiFunction::signature
const Signature & signature() const
Definition
FN_multi_function.hh:95
blender::fn::multi_function::MultiFunction::set_signature
void set_signature(const Signature *signature)
Definition
FN_multi_function.hh:131
blender::fn::multi_function::Params
Definition
FN_multi_function_params.hh:88
blender::fn::multi_function::SignatureBuilder
Definition
FN_multi_function_signature.hh:49
blender::fn::multi_function::tests::AddPrefixFunction
Definition
FN_multi_function_test_common.hh:9
blender::fn::multi_function::tests::AddPrefixFunction::AddPrefixFunction
AddPrefixFunction()
Definition
FN_multi_function_test_common.hh:11
blender::fn::multi_function::tests::AddPrefixFunction::call
void call(const IndexMask &mask, Params params, Context) const override
Definition
FN_multi_function_test_common.hh:23
blender::fn::multi_function::tests::AppendFunction
Definition
FN_multi_function_test_common.hh:109
blender::fn::multi_function::tests::AppendFunction::AppendFunction
AppendFunction()
Definition
FN_multi_function_test_common.hh:111
blender::fn::multi_function::tests::AppendFunction::call
void call(const IndexMask &mask, Params params, Context) const override
Definition
FN_multi_function_test_common.hh:123
blender::fn::multi_function::tests::ConcatVectorsFunction
Definition
FN_multi_function_test_common.hh:87
blender::fn::multi_function::tests::ConcatVectorsFunction::ConcatVectorsFunction
ConcatVectorsFunction()
Definition
FN_multi_function_test_common.hh:89
blender::fn::multi_function::tests::ConcatVectorsFunction::call
void call(const IndexMask &mask, Params params, Context) const override
Definition
FN_multi_function_test_common.hh:101
blender::fn::multi_function::tests::CreateRangeFunction
Definition
FN_multi_function_test_common.hh:32
blender::fn::multi_function::tests::CreateRangeFunction::CreateRangeFunction
CreateRangeFunction()
Definition
FN_multi_function_test_common.hh:34
blender::fn::multi_function::tests::CreateRangeFunction::call
void call(const IndexMask &mask, Params params, Context) const override
Definition
FN_multi_function_test_common.hh:46
blender::fn::multi_function::tests::GenericAppendFunction
Definition
FN_multi_function_test_common.hh:60
blender::fn::multi_function::tests::GenericAppendFunction::GenericAppendFunction
GenericAppendFunction(const CPPType &type)
Definition
FN_multi_function_test_common.hh:65
blender::fn::multi_function::tests::GenericAppendFunction::call
void call(const IndexMask &mask, Params params, Context) const override
Definition
FN_multi_function_test_common.hh:73
blender::fn::multi_function::tests::OptionalOutputsFunction
Definition
FN_multi_function_test_common.hh:161
blender::fn::multi_function::tests::OptionalOutputsFunction::OptionalOutputsFunction
OptionalOutputsFunction()
Definition
FN_multi_function_test_common.hh:163
blender::fn::multi_function::tests::OptionalOutputsFunction::call
void call(const IndexMask &mask, Params params, Context) const override
Definition
FN_multi_function_test_common.hh:175
blender::fn::multi_function::tests::SumVectorFunction
Definition
FN_multi_function_test_common.hh:132
blender::fn::multi_function::tests::SumVectorFunction::call
void call(const IndexMask &mask, Params params, Context) const override
Definition
FN_multi_function_test_common.hh:146
blender::fn::multi_function::tests::SumVectorFunction::SumVectorFunction
SumVectorFunction()
Definition
FN_multi_function_test_common.hh:134
blender::index_mask::IndexMask
Definition
BLI_index_mask.hh:184
b
local_group_size(16, 16) .push_constant(Type b
Definition
compositor_morphological_distance_info.hh:16
params
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
Definition
interface_widgets.cc:1055
blender::fn::multi_function::tests
Definition
FN_multi_function_procedure_test.cc:12
blender::index_mask::masked_fill
void masked_fill(MutableSpan< T > data, const T &value, const IndexMask &mask)
Definition
BLI_index_mask.hh:561
int64_t
__int64 int64_t
Definition
stdint.h:89
blender::fn::multi_function::Signature
Definition
FN_multi_function_signature.hh:31
Generated on Thu Feb 6 2025 07:36:39 for Blender by
doxygen
1.11.0