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

Commit 3fb8a788 authored by Myles Watson's avatar Myles Watson
Browse files

PDL: Separate member and parameters for arrays

Test: bluetooth_packet_parser_test
Change-Id: I7c23d29548d63f7c1e23281585b10fd9f43bdad4
parent 96c55e83
Loading
Loading
Loading
Loading
+14 −6
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ const std::string ArrayField::kFieldType = "ArrayField";
ArrayField::ArrayField(std::string name, int element_size, std::string size_modifier, ParseLocation loc)
    : PacketField(name, loc), element_size_(element_size), size_modifier_(size_modifier) {
  // Make sure the element_size is a multiple of 8.
  if (element_size_ > 64 || element_size_ < 0)
    ERROR(this) << __func__ << ": Not implemented for element size = " << element_size_;
  if (element_size % 8 != 0) {
    ERROR(this) << "Can only have arrays with elements that are byte aligned (" << element_size << ")";
  }
@@ -29,6 +31,8 @@ ArrayField::ArrayField(std::string name, int element_size, std::string size_modi

ArrayField::ArrayField(std::string name, int element_size, int fixed_size, ParseLocation loc)
    : PacketField(name, loc), element_size_(element_size), fixed_size_(fixed_size) {
  if (element_size_ > 64 || element_size_ < 0)
    ERROR(this) << __func__ << ": Not implemented for element size = " << element_size_;
  // Make sure the element_size is a multiple of 8.
  if (element_size % 8 != 0) {
    ERROR(this) << "Can only have arrays with elements that are byte aligned (" << element_size << ")";
@@ -154,16 +158,20 @@ void ArrayField::GenGetter(std::ostream& s, Size start_offset, Size end_offset)
}

bool ArrayField::GenBuilderParameter(std::ostream& s) const {
  std::string element_type = "";
  if (type_def_ != nullptr) {
    element_type = type_def_->GetTypeName();
    s << "const std::vector<" << type_def_->GetTypeName() << ">& " << GetName();
  } else {
    if (element_size_ > 64 || element_size_ < 0)
      ERROR(this) << __func__ << ": Not implemented for element size = " << element_size_;
    element_type = util::GetTypeForSize(element_size_);
    s << "const std::vector<" << util::GetTypeForSize(element_size_) << ">& " << GetName();
  }
  return true;
}

  s << "const std::vector<" << element_type << ">& " << GetName();
bool ArrayField::GenBuilderMember(std::ostream& s) const {
  if (type_def_ != nullptr) {
    s << "std::vector<" << type_def_->GetTypeName() << "> " << GetName();
  } else {
    s << "std::vector<" << util::GetTypeForSize(element_size_) << "> " << GetName();
  }
  return true;
}

+2 −0
Original line number Diff line number Diff line
@@ -47,6 +47,8 @@ class ArrayField : public PacketField {

  virtual bool GenBuilderParameter(std::ostream& s) const override;

  virtual bool GenBuilderMember(std::ostream& s) const override;

  virtual bool HasParameterValidator() const override;

  virtual void GenParameterValidator(std::ostream& s) const override;
+0 −5
Original line number Diff line number Diff line
@@ -35,11 +35,6 @@ std::string EnumField::GetDataType() const {
  return enum_def_.name_;
}

bool EnumField::GenBuilderParameter(std::ostream& s) const {
  s << GetDataType() << " " << GetName();
  return true;
}

bool EnumField::HasParameterValidator() const {
  return false;
}
+0 −2
Original line number Diff line number Diff line
@@ -33,8 +33,6 @@ class EnumField : public ScalarField {

  virtual std::string GetDataType() const override;

  virtual bool GenBuilderParameter(std::ostream& s) const override;

  virtual bool HasParameterValidator() const override;

  virtual void GenParameterValidator(std::ostream&) const override;
+4 −0
Original line number Diff line number Diff line
@@ -33,3 +33,7 @@ std::string PacketField::GetName() const {
Size PacketField::GetBuilderSize() const {
  return GetSize();
}

bool PacketField::GenBuilderMember(std::ostream& s) const {
  return GenBuilderParameter(s);
}
Loading