Blender  V3.3
FN_multi_function_test_common.hh
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0 */
2 
3 #include "FN_multi_function.hh"
4 
5 namespace blender::fn::tests {
6 
8  public:
10  {
12  this->set_signature(&signature);
13  }
14 
16  {
17  MFSignatureBuilder signature{"Add Prefix"};
18  signature.single_input<std::string>("Prefix");
19  signature.single_mutable<std::string>("Strings");
20  return signature.build();
21  }
22 
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  for (int64_t i : mask) {
29  strings[i] = prefixes[i] + strings[i];
30  }
31  }
32 };
33 
35  public:
37  {
39  this->set_signature(&signature);
40  }
41 
43  {
44  MFSignatureBuilder signature{"Create Range"};
45  signature.single_input<int>("Size");
46  signature.vector_output<int>("Range");
47  return signature.build();
48  }
49 
51  {
52  const VArray<int> &sizes = params.readonly_single_input<int>(0, "Size");
53  GVectorArray &ranges = params.vector_output(1, "Range");
54 
55  for (int64_t i : mask) {
56  int size = sizes[i];
57  for (int j : IndexRange(size)) {
58  ranges.append(i, &j);
59  }
60  }
61  }
62 };
63 
65  private:
66  MFSignature signature_;
67 
68  public:
70  {
71  MFSignatureBuilder signature{"Append"};
72  signature.vector_mutable("Vector", type);
73  signature.single_input("Value", type);
74  signature_ = signature.build();
75  this->set_signature(&signature_);
76  }
77 
79  {
80  GVectorArray &vectors = params.vector_mutable(0, "Vector");
81  const GVArray &values = params.readonly_single_input(1, "Value");
82 
83  for (int64_t i : mask) {
85  values.get(i, buffer);
86  vectors.append(i, buffer);
87  values.type().destruct(buffer);
88  }
89  }
90 };
91 
93  public:
95  {
97  this->set_signature(&signature);
98  }
99 
101  {
102  MFSignatureBuilder signature{"Concat Vectors"};
103  signature.vector_mutable<int>("A");
104  signature.vector_input<int>("B");
105  return signature.build();
106  }
107 
109  {
110  GVectorArray &a = params.vector_mutable(0);
111  const GVVectorArray &b = params.readonly_vector_input(1);
112  a.extend(mask, b);
113  }
114 };
115 
117  public:
119  {
121  this->set_signature(&signature);
122  }
123 
125  {
126  MFSignatureBuilder signature{"Append"};
127  signature.vector_mutable<int>("Vector");
128  signature.single_input<int>("Value");
129  return signature.build();
130  }
131 
133  {
134  GVectorArray_TypedMutableRef<int> vectors = params.vector_mutable<int>(0);
135  const VArray<int> &values = params.readonly_single_input<int>(1);
136 
137  for (int64_t i : mask) {
138  vectors.append(i, values[i]);
139  }
140  }
141 };
142 
144  public:
146  {
148  this->set_signature(&signature);
149  }
150 
152  {
153  MFSignatureBuilder signature{"Sum Vectors"};
154  signature.vector_input<int>("Vector");
155  signature.single_output<int>("Sum");
156  return signature.build();
157  }
158 
160  {
161  const VVectorArray<int> &vectors = params.readonly_vector_input<int>(0);
162  MutableSpan<int> sums = params.uninitialized_single_output<int>(1);
163 
164  for (int64_t i : mask) {
165  int sum = 0;
166  for (int j : IndexRange(vectors.get_vector_size(i))) {
167  sum += vectors.get_vector_element(i, j);
168  }
169  sums[i] = sum;
170  }
171  }
172 };
173 
175  public:
177  {
179  this->set_signature(&signature);
180  }
181 
183  {
184  MFSignatureBuilder signature{"Optional Outputs"};
185  signature.single_output<int>("Out 1");
186  signature.single_output<std::string>("Out 2");
187  return signature.build();
188  }
189 
191  {
192  if (params.single_output_is_required(0, "Out 1")) {
193  MutableSpan<int> values = params.uninitialized_single_output<int>(0, "Out 1");
194  values.fill_indices(mask, 5);
195  }
196  MutableSpan<std::string> values = params.uninitialized_single_output<std::string>(1, "Out 2");
197  for (const int i : mask) {
198  new (&values[i]) std::string("hello, this is a long string");
199  }
200  }
201 };
202 
203 } // namespace blender::fn::tests
#define BUFFER_FOR_CPP_TYPE_VALUE(type, variable_name)
#define UNUSED(x)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition: btDbvt.cpp:52
static T sum(const btAlignedObjectArray< T > &items)
void destruct(void *ptr) const
const CPPType & type() const
void get(int64_t index, void *r_value) const
void append(const int64_t index, const T &value)
void append(int64_t index, const void *value)
constexpr void fill_indices(Span< int64_t > indices, const T &value)
Definition: BLI_span.hh:536
int64_t get_vector_size(const int64_t index) const
T get_vector_element(const int64_t index, const int64_t index_in_vector) const
void set_signature(const MFSignature *signature)
const MFSignature & signature() const
void call(IndexMask mask, MFParams params, MFContext UNUSED(context)) const override
void call(IndexMask mask, MFParams params, MFContext UNUSED(context)) const override
void call(IndexMask mask, MFParams params, MFContext UNUSED(context)) const override
void call(IndexMask mask, MFParams params, MFContext UNUSED(context)) const override
void call(IndexMask mask, MFParams params, MFContext UNUSED(context)) const override
void call(IndexMask mask, MFParams params, MFContext UNUSED(context)) const override
void call(IndexMask mask, MFParams params, MFContext UNUSED(context)) const override
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
ccl_global float * buffer
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
Definition: math_float4.h:513
static unsigned a[3]
Definition: RandGen.cpp:78
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
__int64 int64_t
Definition: stdint.h:89