From c98a90350a76dc72c1e7b704704d756b1984c2b5 Mon Sep 17 00:00:00 2001 From: Rafael Rojas Date: Thu, 23 Feb 2023 09:16:44 +0100 Subject: [PATCH] Attempt to add public variables --- src/code_generation/cpp/cpp_class.py | 33 +++++++++++++++++++++------- tests/test_cpp_file.py | 7 +++++- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/code_generation/cpp/cpp_class.py b/src/code_generation/cpp/cpp_class.py index b546244..0cbda99 100644 --- a/src/code_generation/cpp/cpp_class.py +++ b/src/code_generation/cpp/cpp_class.py @@ -319,8 +319,11 @@ def __init__(self, **properties): # aggregated classes self.internal_class_elements = [] - # class members - self.internal_variable_elements = [] + # private class variables + self.internal_private_variable_elements = [] + + # public class variables + self.internal_public_variable_elements = [] # array class members self.internal_array_elements = [] @@ -352,13 +355,16 @@ def add_enum(self, enum): enum.ref_to_parent = self self.internal_enum_elements.append(enum) - def add_variable(self, cpp_variable): + def add_variable(self, cpp_variable, is_private=True): """ @param: cpp_variable CppVariable instance """ cpp_variable.ref_to_parent = self cpp_variable.is_class_member = True - self.internal_variable_elements.append(cpp_variable) + if is_private: + self.internal_private_variable_elements.append(cpp_variable) + else: + self.internal_public_variable_elements.append(cpp_variable) def add_array(self, cpp_variable): """ @@ -405,12 +411,21 @@ def _render_enum_section(self, cpp): enumItem.render_to_string(cpp) cpp.newline() - def _render_variables_declaration(self, cpp): + def _render_private_variables_declaration(self, cpp): + """ + Render to string all contained variable class members + Method is protected as it is used by CppClass only + """ + for varItem in self.internal_private_variable_elements: + varItem.declaration().render_to_string(cpp) + cpp.newline() + + def _render_public_variables_declaration(self, cpp): """ Render to string all contained variable class members Method is protected as it is used by CppClass only """ - for varItem in self.internal_variable_elements: + for varItem in self.internal_public_variable_elements: varItem.declaration().render_to_string(cpp) cpp.newline() @@ -440,7 +455,8 @@ def render_static_members_implementation(self, cpp): int MyClass::my_static_array[] = {} """ # generate definition for static variables - static_vars = [variable for variable in self.internal_variable_elements if variable.is_static] + static_vars = [variable for variable in self.internal_private_variable_elements if variable.is_static] \ + + [variable for variable in self.internal_public_variable_elements if variable.is_static] for varItem in static_vars: varItem.definition().render_to_string(cpp) cpp.newline() @@ -480,13 +496,14 @@ def class_interface(self, cpp): self._render_enum_section(cpp) self._render_internal_classes_declaration(cpp) self._render_methods_declaration(cpp) + self._render_public_variables_declaration(cpp) def private_class_members(self, cpp): """ Generates section of class member variables. Should be placed in 'private:' section """ - self._render_variables_declaration(cpp) + self._render_private_variables_declaration(cpp) self._render_array_declaration(cpp) def render_to_string(self, cpp): diff --git a/tests/test_cpp_file.py b/tests/test_cpp_file.py index 2679bbf..138e72d 100644 --- a/tests/test_cpp_file.py +++ b/tests/test_cpp_file.py @@ -70,11 +70,16 @@ def test_cpp_class(self): my_class.add_variable(CppVariable(name="m_var1", type="int", - initialization_value='1')) + initialization_value='1'), is_private=False) my_class.add_variable(CppVariable(name="m_var2", type="int*")) + my_class.add_variable(CppVariable(name="m_var3", + type="int", + initialization_value='1', is_static=True), + is_private=False) + a2 = CppArray(name='array2', type='char*', is_const=True, is_static=True, ) a2.add_array_item('"Item1"') a2.add_array_item('"Item2"')