diff --git a/src/cbexigen/datatype_classes.py b/src/cbexigen/datatype_classes.py index de5ae06..df3fd6f 100644 --- a/src/cbexigen/datatype_classes.py +++ b/src/cbexigen/datatype_classes.py @@ -192,15 +192,14 @@ def __generate_char_array_struct_from_string(self, particle: Particle, with_used # generate struct for array with length variable indent = ' ' * self.config['c_code_indent_chars'] comment = self.__get_particle_comment(particle) - type_array = 1 if particle.max_occurs > 1 else 0 - struct_def = particle.prefixed_define_for_array if particle.max_occurs > 1 else '' + struct_def = particle.prefixed_define_for_array if particle.is_array else '' temp = self.generator.get_template("SubStructCharWithUsed.jinja" if with_used else "SubStructChar.jinja") return temp.render(indent=indent, level=indent_level, struct_name=particle.name, struct_type="char", type_def=particle.prefixed_define_for_base_type, - type_array=type_array, + type_array=particle.is_array, struct_def=struct_def, variable_comment=comment) @@ -208,15 +207,14 @@ def __generate_byte_array_struct_from_binary(self, particle: Particle, with_used # generate struct for array with length variable indent = ' ' * self.config['c_code_indent_chars'] comment = self.__get_particle_comment(particle) - type_array = 1 if particle.max_occurs > 1 else 0 - struct_def = particle.prefixed_define_for_array if particle.max_occurs > 1 else '' + struct_def = particle.prefixed_define_for_array if particle.is_array else '' temp = self.generator.get_template("SubStructByteWithIsUsed.jinja" if with_used else "SubStructByte.jinja") return temp.render(indent=indent, level=indent_level, struct_name=particle.name, struct_type="uint8_t", type_def=particle.prefixed_define_for_base_type, - type_array=type_array, + type_array=particle.is_array, struct_def=struct_def, variable_comment=comment) @@ -282,7 +280,7 @@ def __get_particle_content(self, particle: Particle, elements, indent_level=1): # particle type is in list, so a separate type is generated if particle.type in self.analyzer_data.known_elements: - if particle.max_occurs > 1: + if particle.is_array: # generate struct for array with length variable if particle.is_enum: content += self.__generate_enum_array_struct(particle) @@ -333,7 +331,7 @@ def __get_particle_content(self, particle: Particle, elements, indent_level=1): content += self.__generate_base64binary(particle, False, indent_level) + '\n' else: # max_occurs > 1, generate array type - if particle.max_occurs > 1: + if particle.is_array: content += self.__generate_array_struct(particle) else: content += self.__generate_variable(particle) + '\n' @@ -837,7 +835,7 @@ def __get_function_content(self): for particle in element.particles: # TODO: check if particle is in OCCURRENCE_LIMITS_CORRECTED, # should then result in an array definition - if particle.max_occurs > 1: + if particle.is_array: arr.append(self.__get_type_member_array(particle)) elif particle.min_occurs == 0: if particle.parent_has_choice_sequence: diff --git a/src/cbexigen/decoder_classes.py b/src/cbexigen/decoder_classes.py index e2dabc8..822c636 100644 --- a/src/cbexigen/decoder_classes.py +++ b/src/cbexigen/decoder_classes.py @@ -187,7 +187,7 @@ def __get_content_decode_base64_binary(self, element_typename, detail: ElementGr type_content = type_value + f'.{detail.particle.value_parameter_name}' type_content_len = type_value + f'.{detail.particle.length_parameter_name}' else: - if detail.particle.max_occurs > 1: + if detail.particle.is_array: decode_comment += ' (Array)' type_array_length = f'{element_typename}->{detail.particle.name}.arrayLen' type_value = f'{element_typename}->{detail.particle.name}' @@ -208,7 +208,7 @@ def __get_content_decode_base64_binary(self, element_typename, detail: ElementGr type_content_len=type_content_len, type_define=type_define, type_option=detail.particle.is_optional, - type_array=detail.particle.max_occurs > 1, + type_array=detail.particle.is_array, type_array_length=f'{element_typename}->{detail.particle.name}.arrayLen', type_array_define=detail.particle.prefixed_define_for_array, next_grammar_id=next_grammar_id, @@ -393,7 +393,7 @@ def __get_content_decode_string(self, element_typename, detail: ElementGrammarDe type_simple = detail.particle.is_attribute or detail.particle.is_simple_content next_grammar_id = detail.next_grammar - if detail.particle.max_occurs > 1: + if detail.particle.is_array: decode_comment += ' (Array)' type_array_length = f'{element_typename}->{detail.particle.name}.arrayLen' type_length = type_value + f'.array[{type_array_length}].{detail.particle.length_parameter_name}' @@ -407,7 +407,7 @@ def __get_content_decode_string(self, element_typename, detail: ElementGrammarDe type_chars_size=type_chars_size, type_option=detail.particle.is_optional, type_simple=type_simple, - type_array=detail.particle.max_occurs > 1, + type_array=detail.particle.is_array, type_array_length=f'{element_typename}->{detail.particle.name}.arrayLen', type_array_define=detail.particle.prefixed_define_for_array, next_grammar_id=next_grammar_id, diff --git a/src/cbexigen/elementGrammar.py b/src/cbexigen/elementGrammar.py index 9d0b031..0a49aaa 100644 --- a/src/cbexigen/elementGrammar.py +++ b/src/cbexigen/elementGrammar.py @@ -38,7 +38,7 @@ def is_optional_array(self): if self.particle is None: return False - return self.particle.min_occurs == 0 and self.particle.max_occurs > 1 + return self.particle.min_occurs == 0 and self.particle.is_array @property def is_mandatory(self):