Hexes/rule.cpp
2024-10-28 19:15:40 -04:00

203 lines
4.4 KiB
C++

#include "rule.h"
Rule::Rule() {
pName = "";
pType = TYPE_NONE;
pProps = QVariantMap();
pColor = pGenerateColor();
pByteOrder = BYTE_ORDER_NONE;
pLength = -1;
pValue = "";
pRepeatCount = 0;
pPreSkipCount = 0;
pPostSkipCount = 0;
}
Rule::Rule(const Rule &rule) {
pName = rule.Name();
pType = rule.Type();
pProps = rule.Properties();
pColor = rule.Color();
pByteOrder = rule.ByteOrder();
pLength = rule.Length();
pValue = rule.Value();
pRepeatCount = rule.RepeatCount();
pPreSkipCount = rule.PreSkipCount();
pPostSkipCount = rule.PostSkipCount();
}
Rule &Rule::operator=(const Rule &rule) {
if (this == &rule) {
return *this;
}
pName = rule.Name();
pType = rule.Type();
pProps = rule.Properties();
pColor = rule.Color();
pByteOrder = rule.ByteOrder();
pLength = rule.Length();
pValue = rule.Value();
pRepeatCount = rule.RepeatCount();
pPreSkipCount = rule.PreSkipCount();
pPostSkipCount = rule.PostSkipCount();
return *this;
}
bool Rule::operator==(const Rule &rule) const {
bool nameMatch = pName == rule.Name();
bool typeMatch = pType == rule.Type();
bool propsMatch = pProps == rule.Properties();
bool byteOrderMatch = pByteOrder == rule.ByteOrder();
bool lengthMatch = pLength == rule.Length();
bool valueMatch = pValue == rule.Value();
bool repeatMatch = pRepeatCount == rule.RepeatCount();
bool preSkipMatch = pPreSkipCount == rule.PreSkipCount();
bool postSkipMatch = pPostSkipCount == rule.PostSkipCount();
return nameMatch && typeMatch && propsMatch &&
byteOrderMatch && lengthMatch && valueMatch &&
repeatMatch && preSkipMatch && postSkipMatch;
}
bool Rule::operator!=(const Rule &rule) const {
return !operator==(rule);
}
void Rule::SetName(const QString name) {
pName = name;
}
QString Rule::Name() const {
return pName;
}
void Rule::SetType(RULE_TYPE type) {
pType = type;
if (pLength == -1) {
pLength = pGetTypeLength(type);
}
}
RULE_TYPE Rule::Type() const {
return pType;
}
void Rule::SetColor(const QColor color) {
pColor = color;
}
QColor Rule::Color() const {
return pColor;
}
void Rule::SetByteOrder(BYTE_ORDER byteOrder) {
pByteOrder = byteOrder;
}
BYTE_ORDER Rule::ByteOrder() const {
return pByteOrder;
}
void Rule::SetLength(int length) {
pLength = length;
}
int Rule::Length() const {
return pLength;
}
void Rule::SetValue(QString value) {
pValue = value;
}
QString Rule::Value() const {
return pValue;
}
QVariant Rule::GetProperty(QString propName) const {
return pProps[propName];
}
void Rule::SetProperties(QVariantMap props) {
pProps = props;
}
QVariantMap Rule::Properties() const {
return pProps;
}
void Rule::SetRepeatCount(int repeatCount) {
pRepeatCount = repeatCount;
}
int Rule::RepeatCount() const {
return pRepeatCount;
}
void Rule::SetPreSkipCount(int preSkipCount) {
pPreSkipCount = preSkipCount;
}
int Rule::PreSkipCount() const {
return pPreSkipCount;
}
void Rule::SetPostSkipCount(int postSkipCount) {
pPostSkipCount = postSkipCount;
}
int Rule::PostSkipCount() const {
return pPostSkipCount;
}
QColor Rule::pGenerateColor() {
QRandomGenerator64 *globalRand = QRandomGenerator64::global();
double rRand = globalRand->generateDouble();
double gRand = globalRand->generateDouble();
double bRand = globalRand->generateDouble();
return QColor(rRand * 255, gRand * 255, bRand * 255);
}
int Rule::pGetTypeLength(RULE_TYPE ruleType) {
int typeLength = 0;
switch ((int)ruleType) {
case 1: // TYPE_SKIP
typeLength = 0;
break;
case 2: // TYPE_INT_8
typeLength = 1;
break;
case 3: // TYPE_UINT_8
typeLength = 1;
break;
case 4: // TYPE_INT_16
typeLength = 2;
break;
case 5: // TYPE_UINT_16
typeLength = 2;
break;
case 6: // TYPE_INT_32
typeLength = 4;
break;
case 7: // TYPE_UINT_32
typeLength = 4;
break;
case 8: // TYPE_INT_64
typeLength = 8;
break;
case 9: // TYPE_UINT_64
typeLength = 8;
break;
default: // Unknown
typeLength = 0;
break;
}
return typeLength;
}
void Rule::SetProperty(QString propName, QVariant propData) {
pProps[propName] = propData;
}