Ejemplo n.º 1
0
def generate_down_cast(output_file, cur_class, base_class, capi_generator):
    cur_class_extra_info = capi_generator.extra_info[cur_class]
    base_class_extra_info = capi_generator.extra_info[base_class]
    output_file.put_line('template<>')
    output_file.put_line(
        'inline {return_type} down_cast(const {input_type}& input_object)'.format(
            return_type=cur_class_extra_info.get_class_name(),
            input_type=base_class_extra_info.get_class_name()
        )
    )
    with FileGenerator.IndentScope(output_file):
        Helpers.put_raw_pointer_structure(output_file)
        c_function_name = '{0}_cast_to_{1}'.format(
            base_class_extra_info.get_c_name(),
            cur_class_extra_info.get_c_name()
        )
        output_file.put_line(
            'return {0}({1}(reinterpret_cast<const raw_pointer_holder*>(&input_object)->raw_pointer), true);'.format(
                cur_class_extra_info.get_class_name(),
                c_function_name,
            )
        )
        c_function_declaration = 'void* {0}(void* object_pointer)'.format(c_function_name)
        capi_generator.loader_traits.add_c_function_declaration(c_function_declaration)
        with FileGenerator.IndentScope(capi_generator.output_source):
            capi_generator.output_source.put_line(
                'return dynamic_cast<{0}*>(static_cast<{1}*>(object_pointer));'.format(
                    cur_class.m_implementation_class_name,
                    base_class.m_implementation_class_name
                )
            )
        capi_generator.output_source.put_line('')
    output_file.put_line('')
Ejemplo n.º 2
0
 def put_raw_pointer_structure_if_required(self, output_file, arguments):
     if self.__is_raw_pointer_structure_required(arguments):
         Helpers.put_raw_pointer_structure(output_file)