|
| 1 | +from .metadata_find import find_len_size_parameter_names |
1 | 2 | from .metadata_find import find_size_parameter |
2 | 3 | from .parameter_usage_options import ParameterUsageOptions |
3 | 4 |
|
@@ -348,23 +349,26 @@ def filter_parameters(parameters, parameter_usage_options): |
348 | 349 | parameters_to_use = [] |
349 | 350 |
|
350 | 351 | # Filter based on options |
351 | | - size_parameter = None |
| 352 | + ivi_dance_size_parameter = None |
| 353 | + len_size_parameter_names = set() |
352 | 354 | size_twist_parameter = None |
353 | 355 | # If we are being called looking for the ivi-dance, len or code param, we do not care about the size param so we do |
354 | 356 | # not call back into ourselves, to avoid infinite recursion |
355 | 357 | if parameter_usage_options not in [ParameterUsageOptions.IVI_DANCE_PARAMETER, ParameterUsageOptions.LEN_PARAMETER]: |
356 | | - # Find the size parameter - we are assuming there can only be one type, either from ivi-dance or len |
357 | | - size_parameter = find_size_parameter(filter_ivi_dance_parameters(parameters), parameters) |
358 | | - if size_parameter is None: |
359 | | - size_parameter = find_size_parameter(filter_len_parameters(parameters), parameters) |
| 358 | + # Determine any size parameters that should be skipped based on the presence of ivi-dance or len-sized buffers. |
| 359 | + # For ivi-dance, there is a single shared size parameter; for len, there may be multiple independent size parameters. |
| 360 | + ivi_dance_size_parameter = find_size_parameter(filter_ivi_dance_parameters(parameters), parameters) |
| 361 | + len_size_parameter_names = find_len_size_parameter_names(parameters) |
360 | 362 | size_twist_parameter = find_size_parameter(filter_ivi_dance_twist_parameters(parameters), parameters, key='value_twist') |
361 | 363 | for x in parameters: |
362 | 364 | skip = False |
363 | 365 | if x['direction'] == 'out' and options_to_use['skip_output_parameters']: |
364 | 366 | skip = True |
365 | 367 | if x['direction'] == 'in' and options_to_use['skip_input_parameters']: |
366 | 368 | skip = True |
367 | | - if x == size_parameter and options_to_use['skip_size_parameter']: |
| 369 | + if ivi_dance_size_parameter is not None and x == ivi_dance_size_parameter and options_to_use['skip_size_parameter']: |
| 370 | + skip = True |
| 371 | + if len_size_parameter_names and x['name'] in len_size_parameter_names and options_to_use['skip_size_parameter']: |
368 | 372 | skip = True |
369 | 373 | if size_twist_parameter is not None and x == size_twist_parameter and options_to_use['skip_size_parameter']: |
370 | 374 | skip = True |
@@ -443,18 +447,15 @@ def filter_ivi_dance_twist_parameters(parameters): |
443 | 447 | def filter_len_parameters(parameters): |
444 | 448 | '''Returns the len parameters of a session method if there are any. These are the parameters whose size is determined at runtime using the value of a different parameter. |
445 | 449 |
|
446 | | - asserts all parameters that use len reference the same parameter |
| 450 | + Note: Multiple len parameters may reference different size parameters. |
447 | 451 | Args: |
448 | 452 | parameters: parameters to be checked |
449 | 453 |
|
450 | 454 | Return: |
451 | | - None if no len parameter found |
452 | | - Parameters dict if one is found |
| 455 | + Empty list if no len parameter found |
| 456 | + List of parameter dicts if any are found |
453 | 457 | ''' |
454 | 458 | params = filter_parameters(parameters, ParameterUsageOptions.LEN_PARAMETER) |
455 | | - if len(params) > 0: |
456 | | - size_param = params[0]['size']['value'] |
457 | | - assert all(x['size']['value'] == size_param for x in params) |
458 | 459 | return params |
459 | 460 |
|
460 | 461 |
|
|
0 commit comments