update
This commit is contained in:
parent
7b4ecfb9ea
commit
e17fc39dc7
|
@ -1,7 +1,7 @@
|
|||
#include "TranslateBasic.h"
|
||||
|
||||
AbstractExtractor::AbstractExtractor(const QString& name)
|
||||
:_name_store(name), _byte_offset(0), _byte_count(0) {
|
||||
AbstractExtractor::AbstractExtractor(const QString& name, DataType data)
|
||||
:_name_store(name), _type_store(data), _byte_offset(0), _byte_count(0) {
|
||||
}
|
||||
|
||||
bool AbstractExtractor::setOffsetFromPrevious(int bytes)
|
||||
|
@ -21,6 +21,11 @@ QString AbstractExtractor::name() const
|
|||
return _name_store;
|
||||
}
|
||||
|
||||
DataType AbstractExtractor::outType() const
|
||||
{
|
||||
return _type_store;
|
||||
}
|
||||
|
||||
int AbstractExtractor::offsetFromPrevious() const
|
||||
{
|
||||
return _byte_offset;
|
||||
|
@ -44,7 +49,7 @@ void AbstractExtractor::saveTo(QJsonObject& obj) const
|
|||
}
|
||||
|
||||
BytesAsHex::BytesAsHex()
|
||||
: AbstractExtractor(NAME(BytesAsHex)) {
|
||||
: AbstractExtractor(NAME(BytesAsHex), DataType::ValueSequenceString) {
|
||||
}
|
||||
|
||||
QVariant BytesAsHex::parse(const QByteArray& bytes) const
|
||||
|
@ -62,7 +67,7 @@ std::shared_ptr<Serializable> BytesAsHex::newDefault() const
|
|||
}
|
||||
|
||||
BytesAsBitCombine::BytesAsBitCombine()
|
||||
: AbstractExtractor(NAME(BytesAsBitCombine))
|
||||
: AbstractExtractor(NAME(BytesAsBitCombine), DataType::TextString)
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -151,7 +156,7 @@ std::shared_ptr<Serializable> BytesAsInteger::newDefault() const
|
|||
}
|
||||
|
||||
BytesAsInteger::BytesAsInteger()
|
||||
:AbstractExtractor(NAME(BytesAsInteger)) {
|
||||
:AbstractExtractor(NAME(BytesAsInteger), DataType::Int64) {
|
||||
setCountWithinParse(8);
|
||||
}
|
||||
|
||||
|
@ -208,7 +213,7 @@ QVariant BytesAsInteger::parse(const QByteArray& bytes) const
|
|||
#include <QTextCodec>
|
||||
|
||||
BytesAsString::BytesAsString()
|
||||
:AbstractExtractor(NAME(BytesAsString)) {
|
||||
:AbstractExtractor(NAME(BytesAsString), DataType::TextString) {
|
||||
_conv_with = QTextCodec::codecForName("GBK");
|
||||
}
|
||||
|
||||
|
@ -248,3 +253,42 @@ std::shared_ptr<Serializable> BytesAsString::newDefault() const
|
|||
{
|
||||
return std::make_shared<BytesAsString>();
|
||||
}
|
||||
|
||||
AbstractValueConvert::AbstractValueConvert(const QString& nm, DataType in, DataType out)
|
||||
: _name_store(nm), _in_type(in), _out_type(out) {
|
||||
}
|
||||
|
||||
QString AbstractValueConvert::name() const
|
||||
{
|
||||
return _name_store;
|
||||
}
|
||||
|
||||
DataType AbstractValueConvert::inType() const
|
||||
{
|
||||
return _in_type;
|
||||
}
|
||||
|
||||
DataType AbstractValueConvert::outType() const
|
||||
{
|
||||
return _out_type;
|
||||
}
|
||||
|
||||
void AbstractValueConvert::loadFrom(const QJsonObject& obj)
|
||||
{
|
||||
auto int_in_type = (int)_in_type;
|
||||
INT32_PEAK(int_in_type);
|
||||
_in_type = (DataType) int_in_type;
|
||||
|
||||
auto int_out_type = (int)_out_type;
|
||||
INT32_PEAK(int_out_type);
|
||||
_out_type = (DataType) int_out_type;
|
||||
}
|
||||
|
||||
void AbstractValueConvert::saveTo(QJsonObject& obj) const
|
||||
{
|
||||
auto int_in_type = (int)_in_type;
|
||||
INT32_SAVE(int_in_type);
|
||||
|
||||
auto int_out_type = (int)_out_type;
|
||||
INT32_SAVE(int_out_type);
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ public:
|
|||
/// 内部使用的数据类型
|
||||
/// </summary>
|
||||
enum class DataType {
|
||||
ValueString,
|
||||
ValueSequenceString,
|
||||
TextString,
|
||||
Int64,
|
||||
Flt32,
|
||||
|
@ -51,6 +51,12 @@ public:
|
|||
/// <returns></returns>
|
||||
virtual QString name() const = 0;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
virtual DataType outType() const = 0;
|
||||
|
||||
/// <summary>
|
||||
/// 从上一个单元字节偏移字节数量
|
||||
/// </summary>
|
||||
|
@ -73,10 +79,11 @@ public:
|
|||
class AbstractExtractor : public ExtractUnit {
|
||||
private:
|
||||
QString _name_store;
|
||||
DataType _type_store;
|
||||
int _byte_offset, _byte_count;
|
||||
|
||||
public:
|
||||
AbstractExtractor(const QString& name);
|
||||
AbstractExtractor(const QString& name, DataType data);
|
||||
/// <summary>
|
||||
/// 设置偏移字节数量
|
||||
/// </summary>
|
||||
|
@ -90,6 +97,7 @@ public:
|
|||
|
||||
// ExtractUnit ===========================
|
||||
QString name() const override;
|
||||
virtual DataType outType() const;
|
||||
int offsetFromPrevious() const override;
|
||||
int countWithinParse() const override;
|
||||
|
||||
|
@ -186,3 +194,31 @@ public:
|
|||
std::shared_ptr<Serializable> newDefault() const override;
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Êýֵת»»³éÏó½Ó¿Ú
|
||||
/// </summary>
|
||||
class ValueConvert : public Serializable {
|
||||
public:
|
||||
virtual ~ValueConvert() = default;
|
||||
|
||||
virtual QString name() const = 0;
|
||||
virtual DataType inType() const = 0;
|
||||
virtual DataType outType() const = 0;
|
||||
virtual QVariant convert(const QVariant &value) const = 0;
|
||||
};
|
||||
|
||||
class AbstractValueConvert : public ValueConvert {
|
||||
private:
|
||||
QString _name_store;
|
||||
DataType _in_type, _out_type;
|
||||
|
||||
public:
|
||||
AbstractValueConvert(const QString &nm, DataType in, DataType out);
|
||||
|
||||
QString name() const override;
|
||||
DataType inType() const override;
|
||||
DataType outType() const override;
|
||||
|
||||
void loadFrom(const QJsonObject& obj) override;
|
||||
void saveTo(QJsonObject& obj) const override;
|
||||
};
|
Loading…
Reference in New Issue