Hexes/rule.h

203 lines
5.3 KiB
C
Raw Normal View History

2024-10-28 19:15:40 -04:00
#ifndef RULE_H
#define RULE_H
#include <QString>
#include <QMap>
#include <QVariant>
#include <QRandomGenerator64>
#include <QColor>
enum RULE_TYPE {
TYPE_NONE = 0,
TYPE_SKIP = 1,
TYPE_INT_8 = 2,
TYPE_UINT_8 = 3,
TYPE_INT_16 = 4,
TYPE_UINT_16 = 5,
TYPE_INT_32 = 6,
TYPE_UINT_32 = 7,
TYPE_INT_64 = 8,
TYPE_UINT_64 = 9
};
enum BYTE_ORDER {
BYTE_ORDER_NONE = 0,
BYTE_ORDER_LE = 1,
BYTE_ORDER_BE = 2
};
class Rule : public QObject
{
Q_OBJECT
public:
Rule();
Rule(const Rule &rule);
Rule &operator=(const Rule &rule);
2024-11-02 19:19:53 -04:00
bool operator!() const;
2024-10-28 19:15:40 -04:00
bool operator==(const Rule& rule) const;
bool operator!=(const Rule& rule) const;
friend QDataStream &operator<<(QDataStream &arch, const Rule &rule) {
arch << rule.Name();
arch << rule.Type();
arch << rule.Properties();
arch << rule.Color();
arch << rule.ByteOrder();
arch << rule.Length();
arch << rule.Value();
2024-11-02 19:19:53 -04:00
arch << rule.PreSkipCount();
arch << rule.RepeatCount();
arch << rule.PostSkipCount();
arch << rule.SkipOffset();
arch << rule.RepeatOffset();
arch << rule.PreSkipOffset();
arch << rule.PostSkipOffset();
2024-10-28 19:15:40 -04:00
return arch;
}
friend QDataStream &operator>>(QDataStream &arch, Rule &rule) {
QString ruleName = "";
RULE_TYPE ruleType = TYPE_NONE;
QVariantMap ruleProps = QVariantMap();
QColor ruleColor = QColor();
BYTE_ORDER ruleByteOrder = BYTE_ORDER_NONE;
int ruleLength = 0;
QString ruleValue = "";
2024-11-02 19:19:53 -04:00
int preSkipCount = 0;
int repeatCount = 0;
int postSkipCount = 0;
int repeatOffset;
int skipOffset;
int preSkipOffset;
int postSkipOffset;
2024-10-28 19:15:40 -04:00
arch >> ruleName;
rule.SetName(ruleName);
arch >> ruleType;
rule.SetType(ruleType);
arch >> ruleProps;
rule.SetProperties(ruleProps);
arch >> ruleColor;
rule.SetColor(ruleColor);
arch >> ruleByteOrder;
rule.SetByteOrder(ruleByteOrder);
arch >> ruleLength;
rule.SetLength(ruleLength);
arch >> ruleValue;
rule.SetValue(ruleValue);
2024-11-02 19:19:53 -04:00
arch >> preSkipCount;
rule.SetPreSkipCount(preSkipCount);
arch >> repeatCount;
rule.SetRepeatCount(repeatCount);
arch >> postSkipCount;
rule.SetPostSkipCount(postSkipCount);
arch >> repeatOffset;
rule.SetRepeatOffset(repeatOffset);
arch >> skipOffset;
rule.SetSkipOffset(skipOffset);
arch >> preSkipOffset;
rule.SetPreSkipOffset(preSkipOffset);
arch >> postSkipOffset;
rule.SetPostSkipOffset(postSkipOffset);
2024-10-28 19:15:40 -04:00
return arch;
}
2024-11-02 19:19:53 -04:00
operator QString() const {
return QString("Rule: %1\n"
"-Type: %2\n"
"-Color: %4\n"
"-ByteOrder: %5\n"
"-Length: %6\n"
"-Value: %7\n"
"-PreSkipCount: %8\n"
"-RepeatCount: %9\n"
"-PostSkipCount: %10\n"
"-SkipOffset: %11\n"
"-RepeatOffset: %12\n"
"-PreSkipOffset: %13\n"
"-PostSkipOffset: %14\n")
.arg(pName)
.arg(pType)
.arg(pColor.name())
.arg(pByteOrder)
.arg(pLength)
.arg(pValue)
.arg(pPreSkipCount)
.arg(pRepeatCount)
.arg(pPostSkipCount)
.arg(pSkipOffset)
.arg(pRepeatOffset)
.arg(pPreSkipOffset)
.arg(pPostSkipOffset);
}
2024-10-28 19:15:40 -04:00
void SetName(const QString name);
QString Name() const;
void SetType(RULE_TYPE type);
RULE_TYPE Type() const;
void SetColor(const QColor color);
QColor Color() const;
void SetByteOrder(BYTE_ORDER byteOrder);
BYTE_ORDER ByteOrder() const;
void SetLength(int length);
int Length() const;
void SetValue(QString value);
QString Value() const;
void SetProperty(QString propName, QVariant propData);
QVariant GetProperty(QString propName) const;
void SetProperties(QVariantMap props);
QVariantMap Properties() const;
void SetRepeatCount(int repeatCount);
int RepeatCount() const;
void SetPreSkipCount(int preSkipCount);
int PreSkipCount() const;
void SetPostSkipCount(int postSkipCount);
int PostSkipCount() const;
2024-11-02 19:19:53 -04:00
void SetRepeatOffset(int repeatOffset);
int RepeatOffset() const;
void SetSkipOffset(int skipOffset);
int SkipOffset() const;
void SetPreSkipOffset(int preSkipOffset);
int PreSkipOffset() const;
void SetPostSkipOffset(int postSkipOffset);
int PostSkipOffset() const;
2024-10-28 19:15:40 -04:00
private:
QString pName;
RULE_TYPE pType;
QVariantMap pProps;
QColor pColor;
BYTE_ORDER pByteOrder;
int pLength;
QString pValue;
int pRepeatCount;
int pPreSkipCount;
int pPostSkipCount;
2024-11-02 19:19:53 -04:00
int pRepeatOffset;
int pSkipOffset;
int pPreSkipOffset;
int pPostSkipOffset;
2024-10-28 19:15:40 -04:00
QColor pGenerateColor();
int pGetTypeLength(RULE_TYPE ruleType);
};
Q_DECLARE_METATYPE(Rule)
#endif // RULE_H