Loading system/gd/packet/parser/fields/array_field.cc +9 −8 Original line number Diff line number Diff line Loading @@ -69,22 +69,21 @@ std::string ArrayField::GetDataType() const { void ArrayField::GenExtractor(std::ostream& s, Size start_offset, Size end_offset) const { GenBounds(s, start_offset, end_offset, GetSize()); s << " auto subview = GetLittleEndianSubview(field_begin, field_end); "; s << "auto it = subview.begin();"; s << "auto it = begin_it + field_begin;"; // Add the element size so that we will extract as many elements as we can. s << GetDataType() << " ret;"; s << GetDataType() << " value;"; if (element_size_ != -1) { std::string type = (type_def_ != nullptr) ? type_def_->name_ : util::GetTypeForSize(element_size_); s << GetDataType() << "::iterator ret_it = ret.begin();"; s << "while (it + sizeof(" << type << ") <= subview.end()) {"; s << GetDataType() << "::iterator ret_it = value.begin();"; s << "while (it + sizeof(" << type << ") <= begin_it + field_end) {"; s << "*ret_it = it.extract<" << type << ">();"; s << "ret_it++;"; s << "}"; } else { s << "std::size_t ret_idx = 0;"; s << "while (it < subview.end()) {"; s << "it = " << type_def_->name_ << "::ParseArray(ret, &ret_idx, it);"; s << "while (it < begin_it + field_end) {"; s << "it = " << type_def_->name_ << "::ParseArray(value, &ret_idx, it);"; s << "ret_idx++;"; s << "}"; } Loading @@ -94,10 +93,12 @@ void ArrayField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) s << GetDataType(); s << " Get" << util::UnderscoreToCamelCase(GetName()) << "() {"; s << "ASSERT(was_validated_);"; s << "size_t end_index = size();"; s << "auto begin_it = begin();"; GenExtractor(s, start_offset, end_offset); s << "return ret;"; s << "return value;"; s << "}\n"; } Loading system/gd/packet/parser/fields/checksum_field.cc +2 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ std::string ChecksumField::GetDataType() const { return type_name_; } void ChecksumField::GenExtractor(std::ostream&, Size, Size) const {} void ChecksumField::GenGetter(std::ostream&, Size, Size) const {} bool ChecksumField::GenBuilderParameter(std::ostream&) const { Loading system/gd/packet/parser/fields/checksum_field.h +2 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ class ChecksumField : public ScalarField { virtual std::string GetDataType() const override; virtual void GenExtractor(std::ostream& s, Size start_offset, Size end_offset) const override; virtual void GenGetter(std::ostream& s, Size start_offset, Size end_offset) const override; virtual bool GenBuilderParameter(std::ostream& s) const override; Loading system/gd/packet/parser/fields/custom_field.cc +1 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ void CustomField::GenExtractor(std::ostream& s, Size start_offset, Size end_offs void CustomField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) const { s << "std::vector<" << GetDataType() << "> Get" << util::UnderscoreToCamelCase(GetName()) << "() const {"; s << "ASSERT(was_validated_);"; s << "size_t end_index = size();"; GenExtractor(s, start_offset, end_offset); s << "return vec;"; Loading system/gd/packet/parser/fields/packet_field.cc +2 −2 Original line number Diff line number Diff line Loading @@ -48,11 +48,11 @@ void PacketField::GenBounds(std::ostream& s, Size start_offset, Size end_offset, if (!start_offset.empty()) { s << "size_t field_begin = (" << start_offset << ") / 8;"; } else { s << "size_t field_begin = size() - (" << end_offset << " + " << field_size << ") / 8;"; s << "size_t field_begin = end_index - (" << end_offset << " + " << field_size << ") / 8;"; } if (!end_offset.empty()) { s << "size_t field_end = size() - (" << end_offset << ") / 8;"; s << "size_t field_end = end_index - (" << end_offset << ") / 8;"; // If the field has a known size, use the minimum for the end if (!field_size.empty()) { s << "size_t field_sized_end = field_begin + (" << field_size << ") / 8;"; Loading Loading
system/gd/packet/parser/fields/array_field.cc +9 −8 Original line number Diff line number Diff line Loading @@ -69,22 +69,21 @@ std::string ArrayField::GetDataType() const { void ArrayField::GenExtractor(std::ostream& s, Size start_offset, Size end_offset) const { GenBounds(s, start_offset, end_offset, GetSize()); s << " auto subview = GetLittleEndianSubview(field_begin, field_end); "; s << "auto it = subview.begin();"; s << "auto it = begin_it + field_begin;"; // Add the element size so that we will extract as many elements as we can. s << GetDataType() << " ret;"; s << GetDataType() << " value;"; if (element_size_ != -1) { std::string type = (type_def_ != nullptr) ? type_def_->name_ : util::GetTypeForSize(element_size_); s << GetDataType() << "::iterator ret_it = ret.begin();"; s << "while (it + sizeof(" << type << ") <= subview.end()) {"; s << GetDataType() << "::iterator ret_it = value.begin();"; s << "while (it + sizeof(" << type << ") <= begin_it + field_end) {"; s << "*ret_it = it.extract<" << type << ">();"; s << "ret_it++;"; s << "}"; } else { s << "std::size_t ret_idx = 0;"; s << "while (it < subview.end()) {"; s << "it = " << type_def_->name_ << "::ParseArray(ret, &ret_idx, it);"; s << "while (it < begin_it + field_end) {"; s << "it = " << type_def_->name_ << "::ParseArray(value, &ret_idx, it);"; s << "ret_idx++;"; s << "}"; } Loading @@ -94,10 +93,12 @@ void ArrayField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) s << GetDataType(); s << " Get" << util::UnderscoreToCamelCase(GetName()) << "() {"; s << "ASSERT(was_validated_);"; s << "size_t end_index = size();"; s << "auto begin_it = begin();"; GenExtractor(s, start_offset, end_offset); s << "return ret;"; s << "return value;"; s << "}\n"; } Loading
system/gd/packet/parser/fields/checksum_field.cc +2 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ std::string ChecksumField::GetDataType() const { return type_name_; } void ChecksumField::GenExtractor(std::ostream&, Size, Size) const {} void ChecksumField::GenGetter(std::ostream&, Size, Size) const {} bool ChecksumField::GenBuilderParameter(std::ostream&) const { Loading
system/gd/packet/parser/fields/checksum_field.h +2 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ class ChecksumField : public ScalarField { virtual std::string GetDataType() const override; virtual void GenExtractor(std::ostream& s, Size start_offset, Size end_offset) const override; virtual void GenGetter(std::ostream& s, Size start_offset, Size end_offset) const override; virtual bool GenBuilderParameter(std::ostream& s) const override; Loading
system/gd/packet/parser/fields/custom_field.cc +1 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ void CustomField::GenExtractor(std::ostream& s, Size start_offset, Size end_offs void CustomField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) const { s << "std::vector<" << GetDataType() << "> Get" << util::UnderscoreToCamelCase(GetName()) << "() const {"; s << "ASSERT(was_validated_);"; s << "size_t end_index = size();"; GenExtractor(s, start_offset, end_offset); s << "return vec;"; Loading
system/gd/packet/parser/fields/packet_field.cc +2 −2 Original line number Diff line number Diff line Loading @@ -48,11 +48,11 @@ void PacketField::GenBounds(std::ostream& s, Size start_offset, Size end_offset, if (!start_offset.empty()) { s << "size_t field_begin = (" << start_offset << ") / 8;"; } else { s << "size_t field_begin = size() - (" << end_offset << " + " << field_size << ") / 8;"; s << "size_t field_begin = end_index - (" << end_offset << " + " << field_size << ") / 8;"; } if (!end_offset.empty()) { s << "size_t field_end = size() - (" << end_offset << ") / 8;"; s << "size_t field_end = end_index - (" << end_offset << ") / 8;"; // If the field has a known size, use the minimum for the end if (!field_size.empty()) { s << "size_t field_sized_end = field_begin + (" << field_size << ") / 8;"; Loading