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:
@@ -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 ¶m_type)
|
||||
|
||||
Reference in New Issue
Block a user