예제 #1
0
    def __generate_root_header(self, namespace_generators: [], file_cache: FileCache):
        if self.params_description.root_header and self.api_description.project_name:
            root_header = FileGenerator(os.path.join(self.output_folder, self.params_description.root_header))
            root_header.put_begin_cpp_comments(self.params_description)
            with WatchdogScope(root_header, self.api_description.project_name.upper() + '_LIBRARY_ROOT_INCLUDED'):
                with IfDefScope(root_header, '{0}_LIBRARY_USE_DYNAMIC_LOADER'.format(
                        self.api_description.project_name.upper()), False):
                    for namespace_generator in namespace_generators:
                        root_header.put_line('#define {0}_CAPI_USE_DYNAMIC_LOADER'.format(
                            namespace_generator.wrap_name.upper()))
                root_header.put_line('')

                with IfDefScope(root_header, '{0}_LIBRARY_DEFINE_FUNCTION_POINTERS'.format(
                        self.api_description.project_name.upper()), False):
                    for namespace_generator in namespace_generators:
                        root_header.put_line('#define {0}_CAPI_DEFINE_FUNCTION_POINTERS'.format(
                            namespace_generator.wrap_name.upper()))
                root_header.put_line('')

                root_header.put_include_files(False)
                for namespace_generator in namespace_generators:
                    root_header.include_user_header(file_cache.namespace_header(namespace_generator.full_name_array))
                if self.params_description.root_header_initializer:
                    root_header.put_line('')
                    with IfDefScope(root_header, '__cplusplus'):
                        if self.params_description.root_header_namespace:
                            root_header.put_line('namespace {0}'.format(self.params_description.root_header_namespace))
                            with IndentScope(root_header):
                                self.__generate_root_initializer(root_header, namespace_generators)
                        else:
                            self.__generate_root_initializer(root_header, namespace_generators)
 def __generate_namespace_header(self, file_cache: FileCache,
                                 capi_generator: CapiGenerator):
     namespace_header = file_cache.get_file_for_namespace(
         self.full_name_array)
     namespace_header.put_begin_cpp_comments(self.params)
     with WatchdogScope(namespace_header,
                        self.full_name.upper() + '_INCLUDED'):
         namespace_header.put_include_files()
         namespace_header.include_user_header(
             file_cache.capi_header(self.full_name_array))
         namespace_header.include_user_header(
             file_cache.fwd_header(self.full_name_array))
         if self.enum_generators:
             namespace_header.include_user_header(
                 file_cache.enums_header(self.full_name_array))
         for nested_namespace_generator in self.nested_namespaces:
             namespace_header.include_user_header(
                 file_cache.namespace_header(
                     nested_namespace_generator.full_name_array))
         for class_generator in self.classes:
             namespace_header.include_user_header(
                 file_cache.class_header(class_generator.full_name_array))
         self.__generate_namespace_functions(capi_generator, file_cache,
                                             namespace_header)
         include_headers(namespace_header,
                         self.namespace_object.include_headers)
         DoxygenCppGenerator().generate_for_namespace(
             namespace_header, self.namespace_object, self.full_wrap_name)
예제 #3
0
 def process_external_namespaces(namespaces: [object], external_namespaces: [object]):
     for cur_namespace in namespaces:
         external_namespace = TExternalNamespace()
         external_namespace.name = cur_namespace.name
         external_namespace.detach_method_name = new_params.detach_method_name
         external_namespace.get_raw_pointer_method_name = new_params.get_raw_pointer_method_name
         file_cache = FileCache(new_params)
         external_namespace.include = file_cache.namespace_header(cur_namespace.full_name_array)
         process_external_namespaces(cur_namespace.nested_namespaces, external_namespace.namespaces)
         for cur_class in cur_namespace.classes:
             external_class = TExternalClass()
             external_class.name = cur_class.name
             external_class.wrap_name = cur_class.wrap_name
             external_class.include_declaration = file_cache.class_header_decl(cur_class.full_name_array)
             external_class.include_definition = file_cache.class_header(cur_class.full_name_array)
             external_namespace.classes.append(external_class)
         external_namespaces.append(external_namespace)