Loading include/Field.h +11 −3 Original line number Original line Diff line number Diff line Loading @@ -46,6 +46,9 @@ public: /// Logical type /// Logical type enum LogicalFieldDataType type; enum LogicalFieldDataType type; int sectionOffsetBits; int sectionOffsetBytes; }; }; Loading @@ -56,7 +59,7 @@ class Field public: public: /// Constructor of class. /// Constructor of class. Field(std::string name, std::string typeStr, std::string dim, std::string prVal, int count); Field(std::string name, std::string typeStr, std::string dim, std::string prVal, int count, int sectionOffset); /// Destructor of class. /// Destructor of class. ~Field(); ~Field(); Loading Loading @@ -101,6 +104,12 @@ public: void print(); void print(); /// Returns the offset in bytes of the field from the begin of the section. /// Warning: if the field is not aligned to 8-bit this method returns -1. int getSectionOffset() { return type->sectionOffsetBytes; } protected: protected: static std::map<std::string, LogicalFieldDataType> typeStringToEnum; static std::map<std::string, LogicalFieldDataType> typeStringToEnum; Loading @@ -110,7 +119,6 @@ protected: int progressiv; int progressiv; FieldType * type; FieldType * type; }; }; } } Loading src/Field.cpp +4 −2 Original line number Original line Diff line number Diff line Loading @@ -62,7 +62,7 @@ std::map<std::string, LogicalFieldDataType> Field::makeMap() std::map<std::string, LogicalFieldDataType> Field::typeStringToEnum = Field::makeMap(); std::map<std::string, LogicalFieldDataType> Field::typeStringToEnum = Field::makeMap(); Field::Field(std::string name, std::string typeStr, std::string dim, std::string prVal, int count) Field::Field(std::string name, std::string typeStr, std::string dim, std::string prVal, int count, int sectionOffset) : progressiv(count) : progressiv(count) { { value = 0; value = 0; Loading Loading @@ -93,8 +93,10 @@ Field::Field(std::string name, std::string typeStr, std::string dim, std::string type->name = name; type->name = name; type->dimension = atoi(dim.c_str()); type->dimension = atoi(dim.c_str()); type->type = Field::typeStringToEnum[typeStr]; type->type = Field::typeStringToEnum[typeStr]; type->sectionOffsetBits = sectionOffset; type->sectionOffsetBytes = (sectionOffset % 8) ? -1 : sectionOffset / 8; #ifdef DEBUG #ifdef DEBUG std::cout << "Adding field '" << name << "', " << type->dimension << " bits type " << typeStr << " (" << type->type << ")" << std::endl; std::cout << "Adding field '" << name << "', " << type->dimension << " bits type " << typeStr << " (" << type->type << ")" << " section offset " << type->sectionOffsetBits << " " << type->sectionOffsetBytes << std::endl; #endif #endif if(prVal.compare("none") != 0) if(prVal.compare("none") != 0) Loading src/PartOfPacket.cpp +17 −9 Original line number Original line Diff line number Diff line Loading @@ -125,6 +125,7 @@ void PartOfPacket::loadFields(pugi::xml_node node) fields = new Field*[count]; fields = new Field*[count]; // field parsing // field parsing int sectionOffset = 0; for(pugi::xml_node_iterator it=node.begin(); it != node.end(); ++it) for(pugi::xml_node_iterator it=node.begin(); it != node.end(); ++it) { { if(string(it->name()).compare("field") != 0) if(string(it->name()).compare("field") != 0) Loading @@ -143,19 +144,21 @@ void PartOfPacket::loadFields(pugi::xml_node node) name = it->attribute("name").value(); name = it->attribute("name").value(); dimension = "16"; dimension = "16"; value = "none"; value = "none"; Field* f = new Field(name, typeStr, dimension, value, numberOfFields); Field* f = new Field(name, typeStr, dimension, value, numberOfFields, sectionOffset); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; sectionOffset += 16; name = it->attribute("name").value(); name = it->attribute("name").value(); name += "__1"; name += "__1"; dimension = "16"; dimension = "16"; value = "none"; value = "none"; f = new Field(name, typeStr, dimension, value, numberOfFields); f = new Field(name, typeStr, dimension, value, numberOfFields, sectionOffset); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; sectionOffset += 16; found = true; found = true; break; break; Loading @@ -172,37 +175,41 @@ void PartOfPacket::loadFields(pugi::xml_node node) name = it->attribute("name").value(); name = it->attribute("name").value(); dimension = "16"; dimension = "16"; value = "none"; value = "none"; Field* f = new Field(name, typeStr, dimension, value, numberOfFields); Field* f = new Field(name, typeStr, dimension, value, numberOfFields, sectionOffset); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; sectionOffset += 16; name = it->attribute("name").value(); name = it->attribute("name").value(); name += "__1"; name += "__1"; dimension = "16"; dimension = "16"; value = "none"; value = "none"; f = new Field(name, typeStr, dimension, value, numberOfFields); f = new Field(name, typeStr, dimension, value, numberOfFields, sectionOffset); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; sectionOffset += 16; name = it->attribute("name").value(); name = it->attribute("name").value(); name += "__2"; name += "__2"; dimension = "16"; dimension = "16"; value = "none"; value = "none"; f = new Field(name, typeStr, dimension, value, numberOfFields); f = new Field(name, typeStr, dimension, value, numberOfFields, sectionOffset); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; sectionOffset += 16; name = it->attribute("name").value(); name = it->attribute("name").value(); name += "__3"; name += "__3"; dimension = "16"; dimension = "16"; value = "none"; value = "none"; f = new Field(name, typeStr, dimension, value, numberOfFields); f = new Field(name, typeStr, dimension, value, numberOfFields, sectionOffset); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; sectionOffset += 16; found = true; found = true; break; break; Loading @@ -221,10 +228,11 @@ void PartOfPacket::loadFields(pugi::xml_node node) value = "none"; value = "none"; else else value = constvalue.value(); value = constvalue.value(); Field* f = new Field(name, typeStr, dimension, value, numberOfFields); Field* f = new Field(name, typeStr, dimension, value, numberOfFields, sectionOffset); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; sectionOffset += atoi(dimension.c_str()); } } } } Loading Loading @@ -259,7 +267,7 @@ bool PartOfPacket::loadFields(InputText& fp) throw(PacketException*) dimension = fp.getLine(); dimension = fp.getLine(); value = fp.getLine(); value = fp.getLine(); Field* f = new Field(name, "", dimension, value, numberOfFields); Field* f = new Field(name, "", dimension, value, numberOfFields, -1); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; Loading Loading @@ -298,7 +306,7 @@ bool PartOfPacket::loadFields(MemoryBuffer* buffer) throw(PacketException*) { { dimension = buffer->getbuffer(); dimension = buffer->getbuffer(); value = buffer->getbuffer(); value = buffer->getbuffer(); Field* f = new Field(name, "", dimension, value, numberOfFields); Field* f = new Field(name, "", dimension, value, numberOfFields, -1); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; Loading Loading
include/Field.h +11 −3 Original line number Original line Diff line number Diff line Loading @@ -46,6 +46,9 @@ public: /// Logical type /// Logical type enum LogicalFieldDataType type; enum LogicalFieldDataType type; int sectionOffsetBits; int sectionOffsetBytes; }; }; Loading @@ -56,7 +59,7 @@ class Field public: public: /// Constructor of class. /// Constructor of class. Field(std::string name, std::string typeStr, std::string dim, std::string prVal, int count); Field(std::string name, std::string typeStr, std::string dim, std::string prVal, int count, int sectionOffset); /// Destructor of class. /// Destructor of class. ~Field(); ~Field(); Loading Loading @@ -101,6 +104,12 @@ public: void print(); void print(); /// Returns the offset in bytes of the field from the begin of the section. /// Warning: if the field is not aligned to 8-bit this method returns -1. int getSectionOffset() { return type->sectionOffsetBytes; } protected: protected: static std::map<std::string, LogicalFieldDataType> typeStringToEnum; static std::map<std::string, LogicalFieldDataType> typeStringToEnum; Loading @@ -110,7 +119,6 @@ protected: int progressiv; int progressiv; FieldType * type; FieldType * type; }; }; } } Loading
src/Field.cpp +4 −2 Original line number Original line Diff line number Diff line Loading @@ -62,7 +62,7 @@ std::map<std::string, LogicalFieldDataType> Field::makeMap() std::map<std::string, LogicalFieldDataType> Field::typeStringToEnum = Field::makeMap(); std::map<std::string, LogicalFieldDataType> Field::typeStringToEnum = Field::makeMap(); Field::Field(std::string name, std::string typeStr, std::string dim, std::string prVal, int count) Field::Field(std::string name, std::string typeStr, std::string dim, std::string prVal, int count, int sectionOffset) : progressiv(count) : progressiv(count) { { value = 0; value = 0; Loading Loading @@ -93,8 +93,10 @@ Field::Field(std::string name, std::string typeStr, std::string dim, std::string type->name = name; type->name = name; type->dimension = atoi(dim.c_str()); type->dimension = atoi(dim.c_str()); type->type = Field::typeStringToEnum[typeStr]; type->type = Field::typeStringToEnum[typeStr]; type->sectionOffsetBits = sectionOffset; type->sectionOffsetBytes = (sectionOffset % 8) ? -1 : sectionOffset / 8; #ifdef DEBUG #ifdef DEBUG std::cout << "Adding field '" << name << "', " << type->dimension << " bits type " << typeStr << " (" << type->type << ")" << std::endl; std::cout << "Adding field '" << name << "', " << type->dimension << " bits type " << typeStr << " (" << type->type << ")" << " section offset " << type->sectionOffsetBits << " " << type->sectionOffsetBytes << std::endl; #endif #endif if(prVal.compare("none") != 0) if(prVal.compare("none") != 0) Loading
src/PartOfPacket.cpp +17 −9 Original line number Original line Diff line number Diff line Loading @@ -125,6 +125,7 @@ void PartOfPacket::loadFields(pugi::xml_node node) fields = new Field*[count]; fields = new Field*[count]; // field parsing // field parsing int sectionOffset = 0; for(pugi::xml_node_iterator it=node.begin(); it != node.end(); ++it) for(pugi::xml_node_iterator it=node.begin(); it != node.end(); ++it) { { if(string(it->name()).compare("field") != 0) if(string(it->name()).compare("field") != 0) Loading @@ -143,19 +144,21 @@ void PartOfPacket::loadFields(pugi::xml_node node) name = it->attribute("name").value(); name = it->attribute("name").value(); dimension = "16"; dimension = "16"; value = "none"; value = "none"; Field* f = new Field(name, typeStr, dimension, value, numberOfFields); Field* f = new Field(name, typeStr, dimension, value, numberOfFields, sectionOffset); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; sectionOffset += 16; name = it->attribute("name").value(); name = it->attribute("name").value(); name += "__1"; name += "__1"; dimension = "16"; dimension = "16"; value = "none"; value = "none"; f = new Field(name, typeStr, dimension, value, numberOfFields); f = new Field(name, typeStr, dimension, value, numberOfFields, sectionOffset); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; sectionOffset += 16; found = true; found = true; break; break; Loading @@ -172,37 +175,41 @@ void PartOfPacket::loadFields(pugi::xml_node node) name = it->attribute("name").value(); name = it->attribute("name").value(); dimension = "16"; dimension = "16"; value = "none"; value = "none"; Field* f = new Field(name, typeStr, dimension, value, numberOfFields); Field* f = new Field(name, typeStr, dimension, value, numberOfFields, sectionOffset); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; sectionOffset += 16; name = it->attribute("name").value(); name = it->attribute("name").value(); name += "__1"; name += "__1"; dimension = "16"; dimension = "16"; value = "none"; value = "none"; f = new Field(name, typeStr, dimension, value, numberOfFields); f = new Field(name, typeStr, dimension, value, numberOfFields, sectionOffset); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; sectionOffset += 16; name = it->attribute("name").value(); name = it->attribute("name").value(); name += "__2"; name += "__2"; dimension = "16"; dimension = "16"; value = "none"; value = "none"; f = new Field(name, typeStr, dimension, value, numberOfFields); f = new Field(name, typeStr, dimension, value, numberOfFields, sectionOffset); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; sectionOffset += 16; name = it->attribute("name").value(); name = it->attribute("name").value(); name += "__3"; name += "__3"; dimension = "16"; dimension = "16"; value = "none"; value = "none"; f = new Field(name, typeStr, dimension, value, numberOfFields); f = new Field(name, typeStr, dimension, value, numberOfFields, sectionOffset); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; sectionOffset += 16; found = true; found = true; break; break; Loading @@ -221,10 +228,11 @@ void PartOfPacket::loadFields(pugi::xml_node node) value = "none"; value = "none"; else else value = constvalue.value(); value = constvalue.value(); Field* f = new Field(name, typeStr, dimension, value, numberOfFields); Field* f = new Field(name, typeStr, dimension, value, numberOfFields, sectionOffset); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; sectionOffset += atoi(dimension.c_str()); } } } } Loading Loading @@ -259,7 +267,7 @@ bool PartOfPacket::loadFields(InputText& fp) throw(PacketException*) dimension = fp.getLine(); dimension = fp.getLine(); value = fp.getLine(); value = fp.getLine(); Field* f = new Field(name, "", dimension, value, numberOfFields); Field* f = new Field(name, "", dimension, value, numberOfFields, -1); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; Loading Loading @@ -298,7 +306,7 @@ bool PartOfPacket::loadFields(MemoryBuffer* buffer) throw(PacketException*) { { dimension = buffer->getbuffer(); dimension = buffer->getbuffer(); value = buffer->getbuffer(); value = buffer->getbuffer(); Field* f = new Field(name, "", dimension, value, numberOfFields); Field* f = new Field(name, "", dimension, value, numberOfFields, -1); fieldsDimension += f->size(); fieldsDimension += f->size(); fields[numberOfFields] = f; fields[numberOfFields] = f; numberOfFields++; numberOfFields++; Loading