This commit is contained in:
codeboss 2025-07-15 23:00:11 +08:00
parent 878d1c3854
commit 7b4ecfb9ea
2 changed files with 43 additions and 31 deletions

View File

@ -1,50 +1,50 @@
#include "TranslateBasic.h"
AbstractTranslateUnit::AbstractTranslateUnit(const QString& name)
AbstractExtractor::AbstractExtractor(const QString& name)
:_name_store(name), _byte_offset(0), _byte_count(0) {
}
bool AbstractTranslateUnit::setOffsetFromPrevious(int bytes)
bool AbstractExtractor::setOffsetFromPrevious(int bytes)
{
this->_byte_offset = bytes;
return true;
}
bool AbstractTranslateUnit::setCountWithinParse(int bytes)
bool AbstractExtractor::setCountWithinParse(int bytes)
{
this->_byte_count = bytes;
return true;
}
QString AbstractTranslateUnit::name() const
QString AbstractExtractor::name() const
{
return _name_store;
}
int AbstractTranslateUnit::offsetFromPrevious() const
int AbstractExtractor::offsetFromPrevious() const
{
return _byte_offset;
}
int AbstractTranslateUnit::countWithinParse() const
int AbstractExtractor::countWithinParse() const
{
return _byte_count;
}
void AbstractTranslateUnit::loadFrom(const QJsonObject& obj)
void AbstractExtractor::loadFrom(const QJsonObject& obj)
{
INT32_PEAK(_byte_offset);
INT32_PEAK(_byte_count);
}
void AbstractTranslateUnit::saveTo(QJsonObject& obj) const
void AbstractExtractor::saveTo(QJsonObject& obj) const
{
INT32_SAVE(_byte_count);
INT32_SAVE(_byte_offset);
}
BytesAsHex::BytesAsHex()
: AbstractTranslateUnit(NAME(BytesAsHex)) {
: AbstractExtractor(NAME(BytesAsHex)) {
}
QVariant BytesAsHex::parse(const QByteArray& bytes) const
@ -62,7 +62,7 @@ std::shared_ptr<Serializable> BytesAsHex::newDefault() const
}
BytesAsBitCombine::BytesAsBitCombine()
: AbstractTranslateUnit(NAME(BytesAsBitCombine))
: AbstractExtractor(NAME(BytesAsBitCombine))
{
}
@ -106,7 +106,7 @@ QVariant BytesAsBitCombine::parse(const QByteArray& bytes) const
void BytesAsBitCombine::loadFrom(const QJsonObject& obj)
{
AbstractTranslateUnit::loadFrom(obj);
AbstractExtractor::loadFrom(obj);
QStringList value_list;
STRLIST_PEAK(value_list);
@ -119,7 +119,7 @@ void BytesAsBitCombine::loadFrom(const QJsonObject& obj)
void BytesAsBitCombine::saveTo(QJsonObject& obj) const
{
AbstractTranslateUnit::saveTo(obj);
AbstractExtractor::saveTo(obj);
QStringList value_list;
for (auto key : _switch_options.keys()) {
@ -135,13 +135,13 @@ std::shared_ptr<Serializable> BytesAsBitCombine::newDefault() const
void BytesAsInteger::loadFrom(const QJsonObject& obj)
{
AbstractTranslateUnit::loadFrom(obj);
AbstractExtractor::loadFrom(obj);
INT32_PEAK(unsigned_mark);
}
void BytesAsInteger::saveTo(QJsonObject& obj) const
{
AbstractTranslateUnit::saveTo(obj);
AbstractExtractor::saveTo(obj);
INT32_SAVE(unsigned_mark);
}
@ -151,7 +151,7 @@ std::shared_ptr<Serializable> BytesAsInteger::newDefault() const
}
BytesAsInteger::BytesAsInteger()
:AbstractTranslateUnit(NAME(BytesAsInteger)) {
:AbstractExtractor(NAME(BytesAsInteger)) {
setCountWithinParse(8);
}
@ -168,7 +168,7 @@ bool BytesAsInteger::unsignedMark() const
bool BytesAsInteger::setCountWithinParse(int bytes)
{
if (bytes >= 0 && bytes <= 8)
return AbstractTranslateUnit::setCountWithinParse(bytes);
return AbstractExtractor::setCountWithinParse(bytes);
return false;
}
@ -208,7 +208,7 @@ QVariant BytesAsInteger::parse(const QByteArray& bytes) const
#include <QTextCodec>
BytesAsString::BytesAsString()
:AbstractTranslateUnit(NAME(BytesAsString)) {
:AbstractExtractor(NAME(BytesAsString)) {
_conv_with = QTextCodec::codecForName("GBK");
}
@ -229,7 +229,7 @@ QVariant BytesAsString::parse(const QByteArray& bytes) const
void BytesAsString::loadFrom(const QJsonObject& obj)
{
AbstractTranslateUnit::loadFrom(obj);
AbstractExtractor::loadFrom(obj);
QString codec_name;
STRING_PEAK(codec_name);
@ -238,7 +238,7 @@ void BytesAsString::loadFrom(const QJsonObject& obj)
void BytesAsString::saveTo(QJsonObject& obj) const
{
AbstractTranslateUnit::saveTo(obj);
AbstractExtractor::saveTo(obj);
auto codec_name = this->codecName();
STRING_SAVE(codec_name);

View File

@ -26,12 +26,24 @@ public:
virtual std::shared_ptr<Serializable> newDefault() const = 0;
};
/// <summary>
/// ÄÚ²¿Ê¹ÓõÄÊý¾ÝÀàÐÍ
/// </summary>
enum class DataType {
ValueString,
TextString,
Int64,
Flt32,
Dbl64,
};
/// <summary>
/// 翻译单元抽象接口
/// </summary>
class TranslateUnit : public Serializable {
class ExtractUnit : public Serializable {
public:
virtual ~TranslateUnit() = default;
virtual ~ExtractUnit() = default;
/// <summary>
/// 单元名称
@ -58,13 +70,13 @@ public:
virtual QVariant parse(const QByteArray& bytes) const = 0;
};
class AbstractTranslateUnit : public TranslateUnit {
class AbstractExtractor : public ExtractUnit {
private:
QString _name_store;
int _byte_offset, _byte_count;
public:
AbstractTranslateUnit(const QString& name);
AbstractExtractor(const QString& name);
/// <summary>
/// 设置偏移字节数量
/// </summary>
@ -76,7 +88,7 @@ public:
/// <param name="bytes"></param>
virtual bool setCountWithinParse(int bytes);
// TranslateUnit ===========================
// ExtractUnit ===========================
QString name() const override;
int offsetFromPrevious() const override;
int countWithinParse() const override;
@ -95,7 +107,7 @@ public:
/// <summary>
/// 转换源数值未16进制数值默认分割方式
/// </summary>
class BytesAsHex : public AbstractTranslateUnit {
class BytesAsHex : public AbstractExtractor {
public:
BytesAsHex();
@ -107,7 +119,7 @@ public:
/// <summary>
/// 转换源数值为位联合
/// </summary>
class BytesAsBitCombine : public AbstractTranslateUnit {
class BytesAsBitCombine : public AbstractExtractor {
private:
QHash<int, QString> _switch_options;
@ -118,7 +130,7 @@ public:
QHash<int, QString> switchOptions() const;
virtual void clearOptions();
// TranslateUnit ============================
// ExtractUnit ============================
QVariant parse(const QByteArray& bytes) const override;
// Serializable ==============================
@ -130,7 +142,7 @@ public:
/// <summary>
/// 转换源数据为整形
/// </summary>
class BytesAsInteger : public AbstractTranslateUnit {
class BytesAsInteger : public AbstractExtractor {
private:
bool unsigned_mark = false;
@ -140,7 +152,7 @@ public:
void setUnsignedMark(bool ste);
bool unsignedMark() const;
// TranslateUnit ============================
// ExtractUnit ============================
bool setCountWithinParse(int bytes) override;
QVariant parse(const QByteArray& bytes) const override;
@ -155,7 +167,7 @@ public:
/// <summary>
/// 转换源数据为字符串
/// </summary>
class BytesAsString : public AbstractTranslateUnit {
class BytesAsString : public AbstractExtractor {
private:
QTextCodec* _conv_with = nullptr;
@ -165,7 +177,7 @@ public:
void setStrCodec(QTextCodec* ins);
QString codecName() const;
// TranslateUnit ============================
// ExtractUnit ============================
QVariant parse(const QByteArray& bytes) const override;
// Serializable ==============================