Loading system/gd/packet/parser/fields/array_field.cc +1 −1 Original line number Diff line number Diff line Loading @@ -99,7 +99,7 @@ void ArrayField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) s << "size_t end_index = size();"; s << "auto to_bound = begin();"; int num_leading_bits = GenBounds(s, start_offset, end_offset); int num_leading_bits = GenBounds(s, start_offset, end_offset, GetSize()); s << GetDataType() << " " << GetName() << "_value;"; s << GetDataType() << "* " << GetName() << "_ptr = &" << GetName() << "_value;"; GenExtractor(s, num_leading_bits, false); Loading system/gd/packet/parser/fields/custom_field.cc +1 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ void CustomField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) s << "size_t end_index = size();"; s << "auto to_bound = begin();"; int num_leading_bits = GenBounds(s, start_offset, end_offset); int num_leading_bits = GenBounds(s, start_offset, end_offset, GetSize()); s << "std::unique_ptr<" << GetDataType() << "> " << GetName() << "_value"; s << " = std::make_unique<" << GetDataType() << ">();"; s << GetDataType() << "* " << GetName() << "_ptr = " << GetName() << "_value.get();"; Loading system/gd/packet/parser/fields/custom_field_fixed_size.cc +2 −2 Original line number Diff line number Diff line Loading @@ -30,12 +30,12 @@ std::string CustomFieldFixedSize::GetDataType() const { return type_name_; } int CustomFieldFixedSize::GenBounds(std::ostream& s, Size start_offset, Size end_offset) const { int CustomFieldFixedSize::GenBounds(std::ostream& s, Size start_offset, Size end_offset, Size size) const { if (!start_offset.empty()) { // Default to start if available. s << "auto " << GetName() << "_it = to_bound + (" << start_offset << ") / 8;"; } else if (!end_offset.empty()) { Size byte_offset = GetSize() + end_offset; Size byte_offset = size + end_offset; s << "auto " << GetName() << "_it = to_bound (+ to_bound.NumBytesRemaining() - (" << byte_offset << ") / 8);"; } else { ERROR(this) << "Ambiguous offset for field."; Loading system/gd/packet/parser/fields/custom_field_fixed_size.h +1 −1 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ class CustomFieldFixedSize : public ScalarField { virtual std::string GetDataType() const override; virtual int GenBounds(std::ostream& s, Size start_offset, Size end_offset) const override; virtual int GenBounds(std::ostream& s, Size start_offset, Size end_offset, Size size) const override; virtual void GenExtractor(std::ostream& s, int num_leading_bits, bool for_struct) const override; Loading system/gd/packet/parser/fields/packet_field.cc +8 −8 Original line number Diff line number Diff line Loading @@ -36,11 +36,11 @@ Size PacketField::GetBuilderSize() const { return GetSize(); } int PacketField::GenBounds(std::ostream& s, Size start_offset, Size end_offset) const { int PacketField::GenBounds(std::ostream& s, Size start_offset, Size end_offset, Size size) const { // In order to find field_begin and field_end, we must have two of the three Sizes. if ((start_offset.empty() && GetSize().empty()) || (start_offset.empty() && end_offset.empty()) || (end_offset.empty() && GetSize().empty())) { ERROR(this) << "GenBounds called without enough information. " << start_offset << end_offset << GetSize(); if ((start_offset.empty() && size.empty()) || (start_offset.empty() && end_offset.empty()) || (end_offset.empty() && size.empty())) { ERROR(this) << "GenBounds called without enough information. " << start_offset << end_offset << size; } if (start_offset.bits() % 8 != 0 || end_offset.bits() % 8 != 0) { Loading @@ -50,18 +50,18 @@ int 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 = end_index - (" << end_offset << " + " << GetSize() << ") / 8;"; s << "size_t field_begin = end_index - (" << end_offset << " + " << size << ") / 8;"; } if (!end_offset.empty()) { s << "size_t field_end = end_index - (" << end_offset << ") / 8;"; // If the field has a known size, use the minimum for the end if (!GetSize().empty()) { s << "size_t field_sized_end = field_begin + (" << GetSize() << ") / 8;"; if (!size.empty()) { s << "size_t field_sized_end = field_begin + (" << size << ") / 8;"; s << "if (field_sized_end < field_end) { field_end = field_sized_end; }"; } } else { s << "size_t field_end = field_begin + (" << GetSize() << ") / 8;"; s << "size_t field_end = field_begin + (" << size << ") / 8;"; s << "if (field_end > end_index) { field_end = end_index; }"; } s << "auto " << name_ << "_it = to_bound.Subrange(field_begin, field_end - field_begin); "; Loading Loading
system/gd/packet/parser/fields/array_field.cc +1 −1 Original line number Diff line number Diff line Loading @@ -99,7 +99,7 @@ void ArrayField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) s << "size_t end_index = size();"; s << "auto to_bound = begin();"; int num_leading_bits = GenBounds(s, start_offset, end_offset); int num_leading_bits = GenBounds(s, start_offset, end_offset, GetSize()); s << GetDataType() << " " << GetName() << "_value;"; s << GetDataType() << "* " << GetName() << "_ptr = &" << GetName() << "_value;"; GenExtractor(s, num_leading_bits, false); Loading
system/gd/packet/parser/fields/custom_field.cc +1 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ void CustomField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) s << "size_t end_index = size();"; s << "auto to_bound = begin();"; int num_leading_bits = GenBounds(s, start_offset, end_offset); int num_leading_bits = GenBounds(s, start_offset, end_offset, GetSize()); s << "std::unique_ptr<" << GetDataType() << "> " << GetName() << "_value"; s << " = std::make_unique<" << GetDataType() << ">();"; s << GetDataType() << "* " << GetName() << "_ptr = " << GetName() << "_value.get();"; Loading
system/gd/packet/parser/fields/custom_field_fixed_size.cc +2 −2 Original line number Diff line number Diff line Loading @@ -30,12 +30,12 @@ std::string CustomFieldFixedSize::GetDataType() const { return type_name_; } int CustomFieldFixedSize::GenBounds(std::ostream& s, Size start_offset, Size end_offset) const { int CustomFieldFixedSize::GenBounds(std::ostream& s, Size start_offset, Size end_offset, Size size) const { if (!start_offset.empty()) { // Default to start if available. s << "auto " << GetName() << "_it = to_bound + (" << start_offset << ") / 8;"; } else if (!end_offset.empty()) { Size byte_offset = GetSize() + end_offset; Size byte_offset = size + end_offset; s << "auto " << GetName() << "_it = to_bound (+ to_bound.NumBytesRemaining() - (" << byte_offset << ") / 8);"; } else { ERROR(this) << "Ambiguous offset for field."; Loading
system/gd/packet/parser/fields/custom_field_fixed_size.h +1 −1 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ class CustomFieldFixedSize : public ScalarField { virtual std::string GetDataType() const override; virtual int GenBounds(std::ostream& s, Size start_offset, Size end_offset) const override; virtual int GenBounds(std::ostream& s, Size start_offset, Size end_offset, Size size) const override; virtual void GenExtractor(std::ostream& s, int num_leading_bits, bool for_struct) const override; Loading
system/gd/packet/parser/fields/packet_field.cc +8 −8 Original line number Diff line number Diff line Loading @@ -36,11 +36,11 @@ Size PacketField::GetBuilderSize() const { return GetSize(); } int PacketField::GenBounds(std::ostream& s, Size start_offset, Size end_offset) const { int PacketField::GenBounds(std::ostream& s, Size start_offset, Size end_offset, Size size) const { // In order to find field_begin and field_end, we must have two of the three Sizes. if ((start_offset.empty() && GetSize().empty()) || (start_offset.empty() && end_offset.empty()) || (end_offset.empty() && GetSize().empty())) { ERROR(this) << "GenBounds called without enough information. " << start_offset << end_offset << GetSize(); if ((start_offset.empty() && size.empty()) || (start_offset.empty() && end_offset.empty()) || (end_offset.empty() && size.empty())) { ERROR(this) << "GenBounds called without enough information. " << start_offset << end_offset << size; } if (start_offset.bits() % 8 != 0 || end_offset.bits() % 8 != 0) { Loading @@ -50,18 +50,18 @@ int 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 = end_index - (" << end_offset << " + " << GetSize() << ") / 8;"; s << "size_t field_begin = end_index - (" << end_offset << " + " << size << ") / 8;"; } if (!end_offset.empty()) { s << "size_t field_end = end_index - (" << end_offset << ") / 8;"; // If the field has a known size, use the minimum for the end if (!GetSize().empty()) { s << "size_t field_sized_end = field_begin + (" << GetSize() << ") / 8;"; if (!size.empty()) { s << "size_t field_sized_end = field_begin + (" << size << ") / 8;"; s << "if (field_sized_end < field_end) { field_end = field_sized_end; }"; } } else { s << "size_t field_end = field_begin + (" << GetSize() << ") / 8;"; s << "size_t field_end = field_begin + (" << size << ") / 8;"; s << "if (field_end > end_index) { field_end = end_index; }"; } s << "auto " << name_ << "_it = to_bound.Subrange(field_begin, field_end - field_begin); "; Loading