Functions: simplify multi-function parameters

The use of `std::variant` allows combining the four vectors
into one which more closely matches the intend and avoids
a workaround used before.

Note that this uses `std::get_if` instead of `std::get` because
`std::get` is only available since macOS 10.14.
This commit is contained in:
2023-01-06 11:50:56 +01:00
parent fc9c39e320
commit 42b88c0088
3 changed files with 44 additions and 91 deletions

View File

@@ -28,20 +28,6 @@ struct MFSignature {
Vector<MFParamType> param_types;
Vector<int> param_data_indices;
bool depends_on_context = false;
/**
* Number of elements of each of these types that has to be passed into the multi-function as an
* input or output.
*/
int span_num = 0;
int virtual_array_num = 0;
int virtual_vector_array_num = 0;
int vector_array_num = 0;
int data_index(int param_index) const
{
return param_data_indices[param_index];
}
};
class MFSignatureBuilder {
@@ -81,15 +67,6 @@ class MFSignatureBuilder {
{
signature_.param_names.append(name);
signature_.param_types.append(MFParamType(MFParamType::Input, data_type));
switch (data_type.category()) {
case MFDataType::Single:
signature_.param_data_indices.append(signature_.virtual_array_num++);
break;
case MFDataType::Vector:
signature_.param_data_indices.append(signature_.virtual_vector_array_num++);
break;
}
}
/* Output Parameter Types */
@@ -114,15 +91,6 @@ class MFSignatureBuilder {
{
signature_.param_names.append(name);
signature_.param_types.append(MFParamType(MFParamType::Output, data_type));
switch (data_type.category()) {
case MFDataType::Single:
signature_.param_data_indices.append(signature_.span_num++);
break;
case MFDataType::Vector:
signature_.param_data_indices.append(signature_.vector_array_num++);
break;
}
}
/* Mutable Parameter Types */
@@ -147,15 +115,6 @@ class MFSignatureBuilder {
{
signature_.param_names.append(name);
signature_.param_types.append(MFParamType(MFParamType::Mutable, data_type));
switch (data_type.category()) {
case MFDataType::Single:
signature_.param_data_indices.append(signature_.span_num++);
break;
case MFDataType::Vector:
signature_.param_data_indices.append(signature_.vector_array_num++);
break;
}
}
void add(const char *name, const MFParamType &param_type)