Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 924497b1 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes I62125269,Icbe89252

* changes:
  PDL: Use Size for StructField sizes
  PDL: Pass the size to GenBounds
parents 653f8329 a630ba0f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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();";
+2 −2
Original line number Diff line number Diff line
@@ -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.";
+1 −1
Original line number Diff line number Diff line
@@ -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;

+8 −8
Original line number Diff line number Diff line
@@ -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) {
@@ -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