Module | RuCodeGen::ValueIncapsulator::Generation |
In: |
lib/rucodegen/value_incapsulator.rb
|
Сгенерировать декларации всех атрибутов.
# File lib/rucodegen/value_incapsulator.rb, line 183 def Generation.attr_decl( a_vi ) a_vi.get_attributes.inject( "" ) do |decl, a| decl += "\t\t#{a.type} #{attribute_name(a_vi,a)};\n" end end
Сгенерировать список инициализаторов всех атрибутов в конструкторе.
# File lib/rucodegen/value_incapsulator.rb, line 210 def Generation.attr_initializers( a_vi ) return "" if a_vi.get_attributes.empty? r = a_vi.get_attributes.inject( [ "", "\t:\t" ] ) do |v, a| initializer = a.has_default? ? a.default : nil initializer_representation = initializer ? make_initializer_representation( initializer ) : "" v[ 0 ] += v[ 1 ] + "#{attribute_name(a_vi, a)}" + "(#{initializer_representation})\n" v[ 1 ] = "\t,\t" v end r[ 0 ] end
Получить имя атрибута класса как имя атрибута (с учетом префиксов и суффиксов).
# File lib/rucodegen/value_incapsulator.rb, line 168 def Generation.attribute_name( a_vi, a_attr ) "#{a_vi.get_attr_prefix}#{a_attr.name}#{a_vi.get_attr_suffix}" end
Сгенерировать декларацию класса, описанного в ValueIncapsulator.
# File lib/rucodegen/value_incapsulator.rb, line 241 def Generation.generate_decl( a_vi ) %Q{ class #{a_vi.class_name} { private : #{attr_decl(a_vi)} public : #{a_vi.class_name}(); #{getter_setter_decl(a_vi)} }; } end
Сгенерировать реализацию класса, описанного в ValueIncapsulator.
# File lib/rucodegen/value_incapsulator.rb, line 256 def Generation.generate_impl( a_vi ) %Q{ #{a_vi.class_name}::#{a_vi.class_name}() #{attr_initializers(a_vi)} {} #{getter_setter_impl(a_vi)} } end
Получить имя getter-а для атрибута с учетом префикса.
# File lib/rucodegen/value_incapsulator.rb, line 173 def Generation.getter_name( a_vi, a_attr ) "#{a_vi.get_getter_prefix}#{a_attr.name}" end
Сгенерировать декларации всех getter-ов/setter-ов.
# File lib/rucodegen/value_incapsulator.rb, line 190 def Generation.getter_setter_decl( a_vi ) a_vi.get_attributes.inject( "" ) do |decl, a| decl += "\t\t#{a.getter_return_type}\n" + "\t\t#{getter_name(a_vi, a)}() const;\n" + "\t\tvoid\n" + "\t\t#{setter_name(a_vi, a)}( #{a.getter_return_type} v__ );\n" end end
Сгенерировать реализации методов getter-ов/setter-ов.
# File lib/rucodegen/value_incapsulator.rb, line 228 def Generation.getter_setter_impl( a_vi ) a_vi.get_attributes.inject( "" ) do |v, a| v += "#{a.getter_return_type}\n" + "#{a_vi.class_name}::#{getter_name(a_vi, a)}() const\n" + "\t{ return #{attribute_name(a_vi, a)}; }\n" + "void\n" + "#{a_vi.class_name}::#{setter_name(a_vi, a)}" + "( #{a.getter_return_type} v__ )\n" + "\t{ #{attribute_name(a_vi, a)} = v__; }\n" end end
Создать строковое представление инициализатора атрибута.
# File lib/rucodegen/value_incapsulator.rb, line 200 def Generation.make_initializer_representation( a_initializer ) if a_initializer.kind_of?( Integer ) or a_initializer.kind_of?( Symbol ) return "#{a_initializer}" elsif a_initializer.kind_of? String return "\"#{a_initializer}\"" end end