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)
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)