2025-08-01 01:47:41 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "common.h"
|
|
|
|
|
#include <QHash>
|
|
|
|
|
|
2025-08-03 00:04:12 +00:00
|
|
|
|
class ScopeFieldsSetter;
|
2025-08-10 09:02:18 +00:00
|
|
|
|
class DataContext;
|
2025-08-03 00:04:12 +00:00
|
|
|
|
|
2025-08-10 09:02:18 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
class ExtractStruct : public Serializable {
|
|
|
|
|
public:
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param typeAlias="inst"></param>
|
|
|
|
|
virtual void registSubField(std::shared_ptr<ScopeFieldsSetter> inst) = 0;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
virtual int countWithin() const = 0;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// ִ<>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param typeAlias="bytes"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
virtual void parse(const QByteArray& bytes, std::shared_ptr<DataContext> out) const = 0;
|
|
|
|
|
};
|
2025-08-03 00:04:12 +00:00
|
|
|
|
|
2025-08-01 01:47:41 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD>뵥Ԫ<EBB5A5><D4AA><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|
|
|
|
/// </summary>
|
2025-08-10 10:03:02 +00:00
|
|
|
|
class ExtractDelegate : public ExtractStruct {
|
2025-08-01 01:47:41 +00:00
|
|
|
|
public:
|
2025-08-10 09:02:18 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
virtual QString unitType() const = 0;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
2025-08-10 09:02:18 +00:00
|
|
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-08-01 01:47:41 +00:00
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
2025-08-10 09:02:18 +00:00
|
|
|
|
virtual DataType outType() const = 0;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
|
2025-08-03 00:04:12 +00:00
|
|
|
|
/// <summary>
|
2025-08-10 09:02:18 +00:00
|
|
|
|
/// <20><>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-08-03 00:04:12 +00:00
|
|
|
|
/// </summary>
|
2025-08-10 09:02:18 +00:00
|
|
|
|
/// <returns></returns>
|
|
|
|
|
virtual QString aliasName() const = 0;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD>õ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="type"></param>
|
|
|
|
|
virtual void setAlias(const QString& name) = 0;
|
|
|
|
|
};
|
2025-08-03 00:04:12 +00:00
|
|
|
|
|
2025-08-10 09:02:18 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20>ֶδ<D6B6><CEB4><EFBFBD>
|
|
|
|
|
/// </summary>
|
2025-08-10 10:05:58 +00:00
|
|
|
|
class ExtractUnit : public ExtractStruct {
|
2025-08-10 09:02:18 +00:00
|
|
|
|
public:
|
2025-08-10 12:32:42 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
virtual QString baseType() const = 0;
|
|
|
|
|
|
2025-08-01 01:47:41 +00:00
|
|
|
|
/// <summary>
|
2025-08-10 09:02:18 +00:00
|
|
|
|
/// <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
|
2025-08-01 01:47:41 +00:00
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
2025-08-10 09:02:18 +00:00
|
|
|
|
virtual QString name() const = 0;
|
2025-08-10 12:32:42 +00:00
|
|
|
|
virtual void setName(const QString& name) = 0;
|
2025-08-10 09:02:18 +00:00
|
|
|
|
|
2025-08-01 23:06:42 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
2025-08-10 09:02:18 +00:00
|
|
|
|
/// <param typeAlias="bytes"></param>
|
2025-08-01 23:06:42 +00:00
|
|
|
|
virtual bool setOffsetSpan(int bytes) = 0;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
/// <summary>
|
2025-08-10 09:02:18 +00:00
|
|
|
|
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
2025-08-01 01:47:41 +00:00
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
virtual int offsetSpan() const = 0;
|
|
|
|
|
};
|
|
|
|
|
|
2025-08-10 09:02:18 +00:00
|
|
|
|
|
|
|
|
|
class SizeProvider;
|
|
|
|
|
class RuleMatch;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
namespace extract {
|
2025-08-10 10:03:02 +00:00
|
|
|
|
class AbstractExtractor : public ExtractDelegate {
|
2025-08-10 09:02:18 +00:00
|
|
|
|
private:
|
2025-08-02 02:04:30 +00:00
|
|
|
|
struct __Private {
|
2025-08-10 09:02:18 +00:00
|
|
|
|
QString typename_store = "";
|
2025-08-02 02:04:30 +00:00
|
|
|
|
DataType type_store = DataType::Integer;
|
2025-08-10 09:02:18 +00:00
|
|
|
|
QString name_alias = "";
|
|
|
|
|
int byte_count = 1;
|
2025-08-02 02:04:30 +00:00
|
|
|
|
} _abs_data;
|
|
|
|
|
|
2025-08-10 09:02:18 +00:00
|
|
|
|
public:
|
2025-08-01 01:47:41 +00:00
|
|
|
|
AbstractExtractor(const QString& name, DataType data);
|
|
|
|
|
virtual bool setCountWithin(int bytes);
|
|
|
|
|
|
2025-08-10 10:03:02 +00:00
|
|
|
|
// ExtractDelegate ===========================
|
2025-08-10 09:02:18 +00:00
|
|
|
|
QString unitType() const override;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
virtual DataType outType() const;
|
|
|
|
|
int countWithin() const override;
|
2025-08-10 09:02:18 +00:00
|
|
|
|
QString aliasName() const override;
|
|
|
|
|
void setAlias(const QString& name) override;
|
|
|
|
|
|
|
|
|
|
// ExtractStruct ============================
|
|
|
|
|
void registSubField(std::shared_ptr<ScopeFieldsSetter> inst) override;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
|
|
|
|
|
// Serializable ==============================
|
2025-08-02 02:42:39 +00:00
|
|
|
|
void loadFrom(std::shared_ptr<TranslateBasic> core, const QJsonObject& obj) override;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
void saveTo(QJsonObject& obj) const override;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// ת<><D7AA>Դ<EFBFBD><D4B4>ֵδ16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ĭ<EFBFBD>Ϸָʽ
|
|
|
|
|
/// </summary>
|
2025-08-05 14:00:41 +00:00
|
|
|
|
class AsHex : public AbstractExtractor {
|
2025-08-01 01:47:41 +00:00
|
|
|
|
public:
|
2025-08-05 14:00:41 +00:00
|
|
|
|
static QString topic();
|
|
|
|
|
AsHex();
|
2025-08-01 01:47:41 +00:00
|
|
|
|
|
2025-08-10 09:02:18 +00:00
|
|
|
|
void parse(const QByteArray& bytes, std::shared_ptr<DataContext> out) const override;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
std::shared_ptr<Serializable> newDefault() const override;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// ת<><D7AA>Դ<EFBFBD><D4B4>ֵΪλ<CEAA><CEBB><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
2025-08-05 14:00:41 +00:00
|
|
|
|
class AsBitCombine : public AbstractExtractor {
|
2025-08-10 09:02:18 +00:00
|
|
|
|
private:
|
2025-08-02 02:04:30 +00:00
|
|
|
|
struct __Private {
|
|
|
|
|
QHash<int, QString> _switch_options;
|
2025-08-02 02:42:39 +00:00
|
|
|
|
} _combine;
|
2025-08-02 02:04:30 +00:00
|
|
|
|
|
2025-08-10 09:02:18 +00:00
|
|
|
|
public:
|
2025-08-05 14:00:41 +00:00
|
|
|
|
static QString topic();
|
|
|
|
|
AsBitCombine();
|
2025-08-01 01:47:41 +00:00
|
|
|
|
|
|
|
|
|
bool setSwitchOption(int bit_index, const QString& keyword);
|
|
|
|
|
QHash<int, QString> switchOptions() const;
|
|
|
|
|
virtual void clearOptions();
|
|
|
|
|
|
2025-08-10 10:03:02 +00:00
|
|
|
|
// ExtractDelegate ============================
|
2025-08-10 09:02:18 +00:00
|
|
|
|
void parse(const QByteArray& bytes, std::shared_ptr<DataContext> out) const override;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
|
|
|
|
|
// Serializable ==============================
|
2025-08-02 02:42:39 +00:00
|
|
|
|
void loadFrom(std::shared_ptr<TranslateBasic> core, const QJsonObject& obj) override;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
void saveTo(QJsonObject& obj) const override;
|
|
|
|
|
std::shared_ptr<Serializable> newDefault() const override;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// ת<><D7AA>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
2025-08-05 14:00:41 +00:00
|
|
|
|
class AsInteger : public AbstractExtractor {
|
2025-08-01 01:47:41 +00:00
|
|
|
|
public:
|
2025-08-05 14:00:41 +00:00
|
|
|
|
static QString topic();
|
|
|
|
|
AsInteger();
|
2025-08-01 01:47:41 +00:00
|
|
|
|
|
2025-08-10 10:03:02 +00:00
|
|
|
|
// ExtractDelegate ============================
|
2025-08-01 01:47:41 +00:00
|
|
|
|
bool setCountWithin(int bytes) override;
|
2025-08-10 09:02:18 +00:00
|
|
|
|
void parse(const QByteArray& bytes, std::shared_ptr<DataContext> out) const override;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
|
|
|
|
|
// Serializable ==============================
|
|
|
|
|
std::shared_ptr<Serializable> newDefault() const override;
|
|
|
|
|
};
|
2025-08-02 02:04:30 +00:00
|
|
|
|
|
2025-08-01 01:47:41 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// ת<><D7AA>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
2025-08-05 14:00:41 +00:00
|
|
|
|
class AsUnsigned : public AbstractExtractor {
|
2025-08-01 01:47:41 +00:00
|
|
|
|
public:
|
2025-08-05 14:00:41 +00:00
|
|
|
|
static QString topic();
|
|
|
|
|
AsUnsigned();
|
2025-08-01 01:47:41 +00:00
|
|
|
|
|
2025-08-10 10:03:02 +00:00
|
|
|
|
// ExtractDelegate ============================
|
2025-08-01 01:47:41 +00:00
|
|
|
|
bool setCountWithin(int bytes) override;
|
2025-08-10 09:02:18 +00:00
|
|
|
|
void parse(const QByteArray& bytes, std::shared_ptr<DataContext> out) const override;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
|
|
|
|
|
// Serializable ==============================
|
|
|
|
|
std::shared_ptr<Serializable> newDefault() const override;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// ת<><D7AA>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|
|
|
|
/// </summary>
|
2025-08-05 14:00:41 +00:00
|
|
|
|
class AsString : public AbstractExtractor {
|
2025-08-10 09:02:18 +00:00
|
|
|
|
private:
|
2025-08-02 02:04:30 +00:00
|
|
|
|
struct __Private {
|
|
|
|
|
QTextCodec* _conv_with = nullptr;
|
|
|
|
|
} _strings;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
|
|
|
|
|
public:
|
2025-08-05 14:00:41 +00:00
|
|
|
|
static QString topic();
|
|
|
|
|
AsString();
|
2025-08-01 01:47:41 +00:00
|
|
|
|
|
|
|
|
|
void setStrCodec(QTextCodec* ins);
|
|
|
|
|
QString codecName() const;
|
|
|
|
|
|
2025-08-10 10:03:02 +00:00
|
|
|
|
// ExtractDelegate ============================
|
2025-08-10 09:02:18 +00:00
|
|
|
|
void parse(const QByteArray& bytes, std::shared_ptr<DataContext> out) const override;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
|
|
|
|
|
// Serializable ==============================
|
2025-08-02 02:42:39 +00:00
|
|
|
|
void loadFrom(std::shared_ptr<TranslateBasic> core, const QJsonObject& obj) override;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
void saveTo(QJsonObject& obj) const override;
|
|
|
|
|
std::shared_ptr<Serializable> newDefault() const override;
|
|
|
|
|
};
|
|
|
|
|
|
2025-08-05 14:00:41 +00:00
|
|
|
|
class AsFloat : public AbstractExtractor {
|
2025-08-01 01:47:41 +00:00
|
|
|
|
public:
|
2025-08-05 14:00:41 +00:00
|
|
|
|
static QString topic();
|
|
|
|
|
AsFloat();
|
2025-08-01 01:47:41 +00:00
|
|
|
|
|
2025-08-10 09:02:18 +00:00
|
|
|
|
void parse(const QByteArray& bytes, std::shared_ptr<DataContext> out) const override;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
std::shared_ptr<Serializable> newDefault() const override;
|
|
|
|
|
};
|
|
|
|
|
|
2025-08-05 14:00:41 +00:00
|
|
|
|
class AsDouble : public AbstractExtractor {
|
2025-08-01 01:47:41 +00:00
|
|
|
|
public:
|
2025-08-05 14:00:41 +00:00
|
|
|
|
static QString topic();
|
|
|
|
|
AsDouble();
|
2025-08-01 01:47:41 +00:00
|
|
|
|
|
2025-08-10 09:02:18 +00:00
|
|
|
|
void parse(const QByteArray& bytes, std::shared_ptr<DataContext> out) const override;
|
2025-08-01 01:47:41 +00:00
|
|
|
|
std::shared_ptr<Serializable> newDefault() const override;
|
|
|
|
|
};
|
|
|
|
|
|
2025-08-10 10:03:02 +00:00
|
|
|
|
class AsRuleSet : public ExtractDelegate {
|
2025-08-05 12:51:12 +00:00
|
|
|
|
private:
|
2025-08-02 07:02:35 +00:00
|
|
|
|
struct __Private {
|
2025-08-10 09:02:18 +00:00
|
|
|
|
QString alias_name = "";
|
2025-08-10 10:05:58 +00:00
|
|
|
|
QList<std::shared_ptr<ExtractUnit>> sub_units;
|
2025-08-10 12:32:42 +00:00
|
|
|
|
|
|
|
|
|
int count_within_rt = 0;
|
2025-08-05 10:30:24 +00:00
|
|
|
|
}_bind;
|
2025-08-02 07:02:35 +00:00
|
|
|
|
|
2025-08-05 12:51:12 +00:00
|
|
|
|
public:
|
2025-08-05 14:00:41 +00:00
|
|
|
|
static QString topic();
|
|
|
|
|
|
2025-08-05 12:51:12 +00:00
|
|
|
|
QList<QString> fieldNames() const;
|
2025-08-10 10:05:58 +00:00
|
|
|
|
std::shared_ptr<ExtractUnit> operator[](const QString& field) const;
|
2025-08-05 12:51:12 +00:00
|
|
|
|
|
|
|
|
|
int memberCount() const;
|
2025-08-10 10:05:58 +00:00
|
|
|
|
std::shared_ptr<ExtractUnit> operator[](int index) const;
|
|
|
|
|
void replace(int index, std::shared_ptr<ExtractUnit> inst);
|
2025-08-05 12:51:12 +00:00
|
|
|
|
void removeAt(int index);
|
2025-08-10 10:05:58 +00:00
|
|
|
|
AsRuleSet& append(std::shared_ptr<ExtractUnit> u);
|
2025-08-05 12:51:12 +00:00
|
|
|
|
|
2025-08-02 10:26:13 +00:00
|
|
|
|
public:
|
2025-08-10 09:02:18 +00:00
|
|
|
|
QString unitType() const override;
|
2025-08-03 00:04:12 +00:00
|
|
|
|
void registSubField(std::shared_ptr<ScopeFieldsSetter> inst) override;
|
2025-08-02 07:02:35 +00:00
|
|
|
|
DataType outType() const override;
|
|
|
|
|
int countWithin() const override;
|
2025-08-10 09:02:18 +00:00
|
|
|
|
|
|
|
|
|
QString aliasName() const override;
|
|
|
|
|
void setAlias(const QString& name) override;
|
|
|
|
|
|
|
|
|
|
void loadFrom(std::shared_ptr<TranslateBasic> core, const QJsonObject& obj) override;
|
|
|
|
|
void saveTo(QJsonObject& obj) const override;
|
|
|
|
|
|
|
|
|
|
void parse(const QByteArray& bytes, std::shared_ptr<DataContext> out) const override;
|
2025-08-02 07:02:35 +00:00
|
|
|
|
std::shared_ptr<Serializable> newDefault() const override;
|
|
|
|
|
|
2025-08-10 09:02:18 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
2025-08-10 10:05:58 +00:00
|
|
|
|
class SingleBasedUnit : public ExtractUnit {
|
2025-08-10 09:02:18 +00:00
|
|
|
|
private:
|
|
|
|
|
struct __Private {
|
|
|
|
|
QString _field_name = "";
|
|
|
|
|
int _bytes_offset = 0;
|
2025-08-10 10:03:02 +00:00
|
|
|
|
std::shared_ptr<ExtractDelegate> _delegate_inst = nullptr;
|
2025-08-10 09:02:18 +00:00
|
|
|
|
} _inst;
|
|
|
|
|
|
|
|
|
|
public:
|
2025-08-10 12:32:42 +00:00
|
|
|
|
std::shared_ptr<ExtractDelegate> delegateInst() const;
|
|
|
|
|
void setDelegate(std::shared_ptr<ExtractDelegate> inst);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
QString baseType() const;
|
2025-08-10 09:02:18 +00:00
|
|
|
|
QString name() const override;
|
2025-08-10 12:32:42 +00:00
|
|
|
|
void setName(const QString& name) override;
|
2025-08-10 09:02:18 +00:00
|
|
|
|
|
|
|
|
|
bool setOffsetSpan(int bytes) override;
|
|
|
|
|
int offsetSpan() const override;
|
|
|
|
|
|
|
|
|
|
virtual int countWithin() const;
|
|
|
|
|
|
|
|
|
|
void registSubField(std::shared_ptr<ScopeFieldsSetter> inst) override;
|
|
|
|
|
void parse(const QByteArray& bytes, std::shared_ptr<DataContext> out) const override;
|
2025-08-02 07:02:35 +00:00
|
|
|
|
|
|
|
|
|
void loadFrom(std::shared_ptr<TranslateBasic> core, const QJsonObject& obj) override;
|
|
|
|
|
void saveTo(QJsonObject& obj) const override;
|
2025-08-10 09:02:18 +00:00
|
|
|
|
std::shared_ptr<Serializable> newDefault() const override;
|
2025-08-10 12:32:42 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class ListBasedUnit : public ExtractUnit {
|
|
|
|
|
private:
|
|
|
|
|
struct __Private {
|
|
|
|
|
QString field_name = "";
|
|
|
|
|
int bytes_offset = 0;
|
|
|
|
|
std::shared_ptr<SizeProvider> size_provider_inst = nullptr;
|
|
|
|
|
std::shared_ptr<ExtractDelegate> delegate_inst = nullptr;
|
|
|
|
|
|
|
|
|
|
int count_with_runtime = 0;
|
|
|
|
|
} _list;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
void setSizeProvider(std::shared_ptr<SizeProvider> inst);
|
|
|
|
|
std::shared_ptr<SizeProvider> sizeProvider() const;
|
|
|
|
|
|
|
|
|
|
void setDelegate(std::shared_ptr<ExtractDelegate> inst);
|
|
|
|
|
std::shared_ptr<ExtractDelegate> delegateInst() const;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
QString baseType() const;
|
|
|
|
|
QString name() const override;
|
|
|
|
|
void setName(const QString& name) override;
|
|
|
|
|
|
|
|
|
|
void registSubField(std::shared_ptr<ScopeFieldsSetter> inst) override;
|
|
|
|
|
bool setOffsetSpan(int bytes) override;
|
|
|
|
|
int offsetSpan() const override;
|
|
|
|
|
int countWithin() const override;
|
|
|
|
|
|
|
|
|
|
void loadFrom(std::shared_ptr<TranslateBasic> core, const QJsonObject& obj) override;
|
|
|
|
|
void saveTo(QJsonObject& obj) const override;
|
|
|
|
|
|
|
|
|
|
void parse(const QByteArray& bytes, std::shared_ptr<DataContext> out) const override;
|
|
|
|
|
std::shared_ptr<Serializable> newDefault() const override;
|
|
|
|
|
};
|
2025-08-02 07:02:35 +00:00
|
|
|
|
|
2025-08-10 12:32:42 +00:00
|
|
|
|
class UnionBasedUnit : public ExtractUnit {
|
|
|
|
|
private:
|
|
|
|
|
struct __Private {
|
|
|
|
|
int bytes_offset = 0;
|
|
|
|
|
int bytes_count = 1;
|
|
|
|
|
QString alias_name = "";
|
|
|
|
|
QList<std::shared_ptr<RuleMatch>> rulematch_list;
|
|
|
|
|
} _union;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
void updateMatch(int index, std::shared_ptr<RuleMatch> rule);
|
|
|
|
|
QList<std::shared_ptr<RuleMatch>> matchRules() const;
|
|
|
|
|
void clearRules();
|
|
|
|
|
void setCountWithin(int count);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
QString baseType() const override;
|
|
|
|
|
void registSubField(std::shared_ptr<ScopeFieldsSetter> inst) override;
|
|
|
|
|
|
|
|
|
|
QString name() const override;
|
|
|
|
|
void setName(const QString& name) override;
|
|
|
|
|
bool setOffsetSpan(int bytes) override;
|
|
|
|
|
int offsetSpan() const override;
|
|
|
|
|
int countWithin() const override;
|
|
|
|
|
|
|
|
|
|
void loadFrom(std::shared_ptr<TranslateBasic> core, const QJsonObject& obj) override;
|
|
|
|
|
void saveTo(QJsonObject& obj) const override;
|
|
|
|
|
|
|
|
|
|
void parse(const QByteArray& bytes, std::shared_ptr<DataContext> out) const override;
|
|
|
|
|
std::shared_ptr<Serializable> newDefault() const override;
|
2025-08-02 07:02:35 +00:00
|
|
|
|
};
|
2025-08-01 01:47:41 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|