def process_mapper_instances(class_definition, class_definition_dict): mapper_instances = dict() for field in class_definition.fields: if field.is_related_class: ros_middleware_definition = class_definition_dict.get( field.field_type).middlewares[MiddlewareType.ROS] project_name = ros_middleware_definition.project_name field_ros_type = ros_middleware_definition.class_name ros_type = "%s::%s" % (project_name, field_ros_type) mapper_name = '_%s_mapper' % field.field_type.replace('::', '_').lower() if ros_middleware_definition.mapper_include_file: include_file = ros_middleware_definition.mapper_include_file else: class_name = split_namespace_class(field.field_type)[-1] include_file = "\"%s%s\"" % (convert_to_lower_case_underscores( class_name), "_ros_mapper.h") ros_mapper_definition = RosMapperInstanceDefinition( mapper_name, field.field_type, ros_type, include_file) mapper_instances[mapper_name] = ros_mapper_definition return list(mapper_instances.values())
def process_mapper_instances(class_definition, class_definition_dict, include_path): mapper_instances = dict() for field in class_definition.fields: if field.is_related_class: dds_middleware_definition = class_definition_dict.get( field.field_type).middlewares[MiddlewareType.DDS] field_dds_type = dds_middleware_definition.class_name dds_type = field_dds_type mapper_name = '_%s_mapper' % field.field_type.replace('::', '_').lower() if dds_middleware_definition.mapper_include_file: include_file = dds_middleware_definition.mapper_include_file else: class_name = split_namespace_class(field.field_type)[-1] include_file = "<%s/dds/%s%s>" % ( include_path, convert_to_lower_case_underscores(class_name), "_dds_mapper.h") include_file = include_file.replace("//", "/") dds_mapper_definition = DdsMapperInstanceDefinition( mapper_name, field.field_type, dds_type, include_file) mapper_instances[mapper_name] = dds_mapper_definition return list(mapper_instances.values())
def process_custom_includes(class_definition, mapper_instances, include_path): custom_includes = set() for mapper_instance in mapper_instances: if mapper_instance.include_file: custom_includes.add(mapper_instance.include_file) if class_definition.already_exists: custom_includes.add(class_definition.include_file) else: class_name = split_namespace_class(class_definition.class_name)[-1] if include_path: custom_includes.add("<%s%s.h>" % (include_path, convert(class_name))) else: custom_includes.add("<%s.h>" % convert(class_name)) middleware_definition = class_definition.middlewares[MiddlewareType.DDS] if middleware_definition.already_exists: custom_includes.add(middleware_definition.include_file) else: class_name = split_namespace_class( middleware_definition.class_name)[-1] custom_includes.add("\"%s.hpp\"" % convert_to_lower_case_underscores(class_name)) return custom_includes
def process(self, class_definition_name, class_definition_dict, include_path): class_definition = class_definition_dict.get(class_definition_name) serializer_field_definitions = [ field.field_name for field in class_definition.fields ] include_list = self.process_includes(class_definition, class_definition_dict, include_path) cereal_include_list = self.process_cereal_includes(class_definition) if class_definition.parent_class is not None: parent_class_definition = self.process( class_definition.parent_class, class_definition_dict, include_path) include_list = parent_class_definition.include_list.union( include_list) cereal_include_list = parent_class_definition.cereal_include_list.union( cereal_include_list) serializer_field_definitions = parent_class_definition.field_names + serializer_field_definitions serializer_class_name = "%sSerializer" % split_namespace_class( class_definition_name)[-1] return SerializerDefinition( convert_to_lower_case_underscores(serializer_class_name).upper(), class_definition_name, include_list, cereal_include_list, serializer_field_definitions)
def process_includes(self, class_definition, class_definition_dict): include_list = set() for field in class_definition.fields: if not field.is_enum and field.field_type not in self.fundamental_types: dds_middleware_definition = class_definition_dict.get(field.field_type).middlewares[MiddlewareType.DDS] if dds_middleware_definition.idl_file: include_list.add("\"%s\"", dds_middleware_definition.idl_file) else: class_name = split_namespace_class(dds_middleware_definition.class_name)[-1] include_list.add("\"%s.idl\"" % convert_to_lower_case_underscores(class_name)) return include_list
def process_includes(self, class_definition, class_definition_dict, include_path): include_list = set() if class_definition.already_exists: include_list.add(class_definition.include_file) else: class_name = split_namespace_class(class_definition.class_name)[-1] if include_path: include = "<%s/%s.h>" % ( include_path, convert_to_lower_case_underscores(class_name)) include_list.add(include.replace("//", "/")) else: include_list.add("<%s.h>" % convert_to_lower_case_underscores(class_name)) for field in class_definition.fields: if not field.is_enum and field.field_type not in self.fundamental_types: zmq_middleware_definition = class_definition_dict.get( field.field_type).middlewares[MiddlewareType.ZMQ] if zmq_middleware_definition.serializer_include_file: include_list.add( "\"%s\"", zmq_middleware_definition.serializer_include_file) else: class_name = split_namespace_class(field.field_type)[-1] if include_path: include = "<%s/cereal/%s_serializer.h>" % ( include_path, convert_to_lower_case_underscores(class_name)) include_list.add(include.replace("//", "/")) else: include = "<cereal/%s.h>" % convert_to_lower_case_underscores( class_name) include_list.add(include.replace("//", "/")) return include_list
def generate_code(self, class_definition_dict, include_path, input_dir, main_kidl_file, output_dir, disable_ros, disable_dds, disable_zmq): main_class_definition = self.read_kidl_file(input_dir, main_kidl_file, disable_zmq) poco_definition = self.poco_processor.process( main_class_definition.class_name, class_definition_dict, include_path) if not main_class_definition.already_exists: class_name = split_namespace_class( main_class_definition.class_name)[-1] poco_file_name = output_dir + "/poco/include/" + include_path + "/" + \ convert_to_lower_case_underscores(class_name) + ".h" poco_template_content = self.poco_template.render( definition=poco_definition) write_contents_to_file(poco_file_name, poco_template_content) ros_middleware_definition = main_class_definition.middlewares.get( MiddlewareType.ROS) if (not disable_ros) and ros_middleware_definition is not None: if not ros_middleware_definition.mapper_include_file: ros_mapper_definition = self.ros_mapper_processor.process( main_class_definition.class_name, class_definition_dict, include_path) ros_mapper_file_name = output_dir + "/rosstg/include/" + ros_middleware_definition.project_name + "/" \ + convert_to_lower_case_underscores(class_name) + "_ros_mapper.h" ros_mapper_template_content = self.ros_mapper_template.render( definition=ros_mapper_definition) write_contents_to_file(ros_mapper_file_name, ros_mapper_template_content) if not ros_middleware_definition.already_exists: ros_msg_definition = self.ros_msg_processor.process( main_class_definition.class_name, class_definition_dict) ros_msg_file_name = output_dir + "/rosstg/msg/" + ros_middleware_definition.class_name + ".msg" ros_msg_template_content = self.ros_msg_template.render( definition=ros_msg_definition) write_contents_to_file(ros_msg_file_name, ros_msg_template_content) node_handler_definition = self.node_handler_processor.process( main_class_definition.class_name, class_definition_dict) node_handler_file_name = convert_to_lower_case_underscores( node_handler_definition.handler_name) + ".js" node_handler_file_path = output_dir + "/rosstg/node/" + node_handler_file_name node_handler_template_content = self.node_handler_template.render( definition=node_handler_definition) write_contents_to_file(node_handler_file_path, node_handler_template_content) if (not disable_dds) and (main_class_definition.middlewares.get( MiddlewareType.DDS) is not None): if not main_class_definition.middlewares.get( MiddlewareType.DDS).mapper_include_file: dds_mapper_definition = self.dds_mapper_processor.process( main_class_definition.class_name, class_definition_dict, include_path) dds_mapper_file_name = output_dir + "/dds/include/" + include_path + "/dds/" \ + convert_to_lower_case_underscores(class_name) + "_dds_mapper.h" dds_mapper_template_content = self.dds_mapper_template.render( definition=dds_mapper_definition) write_contents_to_file(dds_mapper_file_name, dds_mapper_template_content) if not main_class_definition.middlewares.get( MiddlewareType.DDS).already_exists: dds_idl_definition = self.dds_idl_processor.process( main_class_definition.class_name, class_definition_dict) dds_idl_file_name = output_dir + "/dds/idl/" + \ convert_to_lower_case_underscores(dds_idl_definition.class_name) + ".idl" dds_idl_template_content = self.dds_idl_template.render( definition=dds_idl_definition) write_contents_to_file(dds_idl_file_name, dds_idl_template_content) if (not disable_zmq) and main_class_definition.middlewares.get( MiddlewareType.ZMQ) is not None: if not main_class_definition.middlewares.get( MiddlewareType.ZMQ).serializer_include_file: class_name = split_namespace_class( main_class_definition.class_name)[-1] zmq_serializer_definition = self.zmq_serializer_processor.process( main_class_definition.class_name, class_definition_dict, include_path) zmq_serializer_file_name = output_dir + "/serialization/include/" + include_path + "/cereal/" \ + convert_to_lower_case_underscores(class_name) + "_serializer.h" zmq_serializer_template_content = self.zmq_serializer_template.render( definition=zmq_serializer_definition) write_contents_to_file(zmq_serializer_file_name, zmq_serializer_template_content)