SIT/templates/cpp/mapper.template

74 lines
2.4 KiB
Plaintext

{# 映射器模板 #}
{% if part == 'header' %}
#pragma once
#include "deserializer.h"
#include "serializer.h"
/**
* 消息映射器
* 将{{ source_message.full_name }}映射到{{ target_message.full_name }}
*/
class MessageMapper {
public:
MessageMapper();
// 执行映射
{{ target_message.system_name }}{{ target_message.message_type }} map(
const {{ source_message.system_name }}{{ source_message.message_type }}& source);
private:
// 各个字段的映射函数
{% for edge in mapping_path %}
void map_{{ edge.mapping.source_field.name }}_to_{{ edge.mapping.target_field.name }}(
const {{ source_message.system_name }}{{ source_message.message_type }}& source,
{{ target_message.system_name }}{{ target_message.message_type }}& target);
{% endfor %}
};
{% else %}
#include "mapper.h"
#include <cmath>
#include <algorithm>
MessageMapper::MessageMapper() {
}
{{ target_message.system_name }}{{ target_message.message_type }}
MessageMapper::map(const {{ source_message.system_name }}{{ source_message.message_type }}& source) {
{{ target_message.system_name }}{{ target_message.message_type }} target;
{% for edge in mapping_path %}
// 映射: {{ edge.mapping.source_field.full_name }} -> {{ edge.mapping.target_field.full_name }}
map_{{ edge.mapping.source_field.name }}_to_{{ edge.mapping.target_field.name }}(source, target);
{% endfor %}
return target;
}
{% for edge in mapping_path %}
void MessageMapper::map_{{ edge.mapping.source_field.name }}_to_{{ edge.mapping.target_field.name }}(
const {{ source_message.system_name }}{{ source_message.message_type }}& source,
{{ target_message.system_name }}{{ target_message.message_type }}& target) {
{% if edge.mapping.operator.value == 'DIRECT' %}
// 直接赋值
target.{{ edge.mapping.target_field.name }} = source.{{ edge.mapping.source_field.name }};
{% elif edge.mapping.operator.value == 'ADD' %}
// 加法运算
target.{{ edge.mapping.target_field.name }} = source.{{ edge.mapping.source_field.name }} + {{ edge.mapping.operand }};
{% elif edge.mapping.operator.value == 'MULTIPLY' %}
// 乘法运算
target.{{ edge.mapping.target_field.name }} = source.{{ edge.mapping.source_field.name }} * {{ edge.mapping.operand }};
{% else %}
// 默认直接赋值
target.{{ edge.mapping.target_field.name }} = source.{{ edge.mapping.source_field.name }};
{% endif %}
}
{% endfor %}
{% endif %}