QBinaryTranslate/TranslateUI/common.h

57 lines
1.5 KiB
C++

#pragma once
#include <QJsonObject>
#include <memory>
#define NAME(u) #u
#define INT32_SAVE(varx, obj) obj[NAME(varx)] = varx;
#define INT32_PEAK(varx, obj) varx = obj[NAME(varx)].toInt();
#define STRLIST_SAVE(list, obj) obj[NAME(list)] = list.join(";");
#define STRLIST_PEAK(list, obj) list = obj[NAME(list)].toString().split(";");
#define STRING_PEAK(codec_name, obj) codec_name = obj[NAME(codec_name)].toString();
#define STRING_SAVE(codec_name, obj) obj[NAME(codec_name)] = codec_name;
#define OBJECT_SAVE(objn, obj) obj[NAME(objn)] = objn;
#define OBJECT_PEAK(objn, obj) objn = obj[NAME(objn)].toObject();
#define ARRAY_SAVE(objn, obj) obj[NAME(objn)] = objn;
#define ARRAY_PEAK(objn, obj) objn = obj[NAME(objn)].toArray();
class TranslateBasic;
/// <summary>
/// 序列化实体
/// </summary>
class Serializable {
public:
virtual ~Serializable() = default;
/// <summary>
/// 反序列化
/// </summary>
/// <param name="obj"></param>
virtual void loadFrom(std::shared_ptr<TranslateBasic> core, const QJsonObject& obj) = 0;
/// <summary>
/// 序列化
/// </summary>
/// <param name="obj"></param>
virtual void saveTo(QJsonObject& obj) const = 0;
/// <summary>
/// 创建默认副本
/// </summary>
/// <returns></returns>
virtual std::shared_ptr<Serializable> newDefault() const = 0;
};
/// <summary>
/// 内部使用的数据类型
/// </summary>
enum class DataType {
TextString,
Integer, // 整形
Unsigned,// 无符号整形
Flt32,
Dbl64,
LIST_COLLECTION,
UNION_COMBINATE,
SUB_RULE,
};