Skip to content

Commit a43789a

Browse files
authored
codegen: add S161 for multidimensional input buffer to use array.size (#2166)
1 parent 538fc94 commit a43789a

2 files changed

Lines changed: 17 additions & 2 deletions

File tree

build/helper/codegen_helper.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,8 @@ def _get_ctype_variable_definition_snippet_for_scalar(parameter, parameters, ivi
337337
S120. Input is size of buffer with mechanism is python-code: visatype.ViInt32(<custom python code>)
338338
S130. Input enum: visatype.ViInt32(parameter_name.value)
339339
S150. Input scalar: visatype.ViInt32(parameter_name)
340-
S160. Input is size of input buffer: visatype.ViInt32(0 if list is None else len(list))
340+
S160. Input is size of 1-dimensional input buffer: visatype.ViInt32(0 if list is None else len(list))
341+
S161. Input is total number of elements in multidimensional input buffer: visatype.ViInt32(0 if array is None else array.size)
341342
S170. Input is size of output buffer with mechanism ivi-dance, QUERY_SIZE: visatype.ViInt32()
342343
S180. Input is size of output buffer with mechanism ivi-dance, GET_DATA: visatype.ViInt32(error_code)
343344
S190. Input is size of output buffer with mechanism ivi-dance-with-a-twist, QUERY_SIZE: visatype.ViInt32()
@@ -371,7 +372,11 @@ def _get_ctype_variable_definition_snippet_for_scalar(parameter, parameters, ivi
371372
if corresponding_buffer_parameters[0].get('complex_array_representation') == 'interleaved_real_number_array':
372373
definitions.append(parameter['ctypes_variable_name'] + ' = {0}.{1}(0 if {2} is None else len({2}) // 2) # case S160'.format(module_name, parameter['ctypes_type'], corresponding_buffer_parameters[0]['python_name']))
373374
else:
374-
definitions.append(parameter['ctypes_variable_name'] + ' = {0}.{1}(0 if {2} is None else len({2})) # case S160'.format(module_name, parameter['ctypes_type'], corresponding_buffer_parameters[0]['python_name']))
375+
array_dimensions = corresponding_buffer_parameters[0].get('array_dimensions')
376+
if isinstance(array_dimensions, int) and array_dimensions > 1:
377+
definitions.append(parameter['ctypes_variable_name'] + ' = {0}.{1}(0 if {2} is None else {2}.size) # case S161'.format(module_name, parameter['ctypes_type'], corresponding_buffer_parameters[0]['python_name']))
378+
else:
379+
definitions.append(parameter['ctypes_variable_name'] + ' = {0}.{1}(0 if {2} is None else len({2})) # case S160'.format(module_name, parameter['ctypes_type'], corresponding_buffer_parameters[0]['python_name']))
375380
else:
376381
if corresponding_buffer_parameters[0]['size']['mechanism'] == 'ivi-dance': # We are only looking at the first one. Assumes all are the same here, assert below if not
377382
# Verify all corresponding_buffer_parameters are 'out' and 'ivi-dance'

build/unit_tests/test_codegen_helper.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1149,6 +1149,16 @@ def test_get_ctype_variable_declaration_snippet_case_s160():
11491149
assert actual == ["input_array_size_ctype = _visatype.ViInt32(0 if input_array is None else len(input_array)) # case S160"]
11501150

11511151

1152+
def test_get_ctype_variable_declaration_snippet_case_s161():
1153+
parameters_with_multidim_buffer = list(parameters_for_testing)
1154+
# Create a copy to add 'array_dimensions' without modifying original parameters_for_testing[10]
1155+
buffer_parameter = dict(parameters_with_multidim_buffer[10])
1156+
buffer_parameter['array_dimensions'] = 3
1157+
parameters_with_multidim_buffer[10] = buffer_parameter
1158+
snippet = get_ctype_variable_declaration_snippet(parameters_with_multidim_buffer[11], parameters_with_multidim_buffer, IviDanceStep.NOT_APPLICABLE, config_for_testing, use_numpy_array=False)
1159+
assert snippet == ["input_array_size_ctype = _visatype.ViInt32(0 if input_array is None else input_array.size) # case S161"]
1160+
1161+
11521162
def test_get_ctype_variable_declaration_snippet_case_s170():
11531163
snippet = get_ctype_variable_declaration_snippet(parameters_for_testing[12], parameters_for_testing, IviDanceStep.QUERY_SIZE, config_for_testing, use_numpy_array=False)
11541164
assert snippet == ["string_size_ctype = _visatype.ViInt32() # case S170"]

0 commit comments

Comments
 (0)