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

Commit 626b6c62 authored by Jack He's avatar Jack He
Browse files

Packet: Refactor packet fields definition

* Split GenGetter into GetGetterFunctionName() and GenGetter()
* Split GenBuilderParameter into GetBuilderParameterType and
  GenBuilderParameter()
* This allows other code generation routines to use builder types and
  getter function names separately

Bug: 143374372
Test: make and run unit tests
Change-Id: I748455dae0720df5c8e4aac9aedb64fc07660a12
parent f7c8e8f4
Loading
Loading
Loading
Loading
+20 −6
Original line number Diff line number Diff line
@@ -106,9 +106,14 @@ void ArrayField::GenExtractor(std::ostream& s, int num_leading_bits, bool for_st
  s << "}";
}

std::string ArrayField::GetGetterFunctionName() const {
  std::stringstream ss;
  ss << "Get" << util::UnderscoreToCamelCase(GetName());
  return ss.str();
}

void ArrayField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) const {
  s << GetDataType();
  s << " Get" << util::UnderscoreToCamelCase(GetName()) << "() {";
  s << GetDataType() << " " << GetGetterFunctionName() << "() {";
  s << "ASSERT(was_validated_);";
  s << "size_t end_index = size();";
  s << "auto to_bound = begin();";
@@ -122,13 +127,14 @@ void ArrayField::GenGetter(std::ostream& s, Size start_offset, Size end_offset)
  s << "}\n";
}

bool ArrayField::GenBuilderParameter(std::ostream& s) const {
std::string ArrayField::GetBuilderParameterType() const {
  std::stringstream ss;
  if (element_field_->BuilderParameterMustBeMoved()) {
    s << "std::array<" << element_field_->GetDataType() << "," << array_size_ << "> " << GetName();
    ss << "std::array<" << element_field_->GetDataType() << "," << array_size_ << ">";
  } else {
    s << "const std::array<" << element_field_->GetDataType() << "," << array_size_ << ">& " << GetName();
    ss << "const std::array<" << element_field_->GetDataType() << "," << array_size_ << ">&";
  }
  return true;
  return ss.str();
}

bool ArrayField::BuilderParameterMustBeMoved() const {
@@ -161,3 +167,11 @@ void ArrayField::GenValidator(std::ostream&) const {
  // Other than that there is nothing that arrays need to be validated on other than length so nothing needs to
  // be done here.
}

bool ArrayField::IsContainerField() const {
  return true;
}

const PacketField* ArrayField::GetElementField() const {
  return element_field_;
}
+7 −1
Original line number Diff line number Diff line
@@ -40,9 +40,11 @@ class ArrayField : public PacketField {

  virtual void GenExtractor(std::ostream& s, int num_leading_bits, bool for_struct) const override;

  virtual std::string GetGetterFunctionName() const override;

  virtual void GenGetter(std::ostream& s, Size start_offset, Size end_offset) const override;

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

  virtual bool BuilderParameterMustBeMoved() const override;

@@ -56,6 +58,10 @@ class ArrayField : public PacketField {

  virtual void GenValidator(std::ostream&) const override;

  virtual bool IsContainerField() const override;

  virtual const PacketField* GetElementField() const override;

  const std::string name_;

  const PacketField* element_field_{nullptr};
+6 −2
Original line number Diff line number Diff line
@@ -35,10 +35,14 @@ std::string BodyField::GetDataType() const {

void BodyField::GenExtractor(std::ostream&, int, bool) const {}

std::string BodyField::GetGetterFunctionName() const {
  return "";
}

void BodyField::GenGetter(std::ostream&, Size, Size) const {}

bool BodyField::GenBuilderParameter(std::ostream&) const {
  return false;
std::string BodyField::GetBuilderParameterType() const {
  return "";
}

bool BodyField::HasParameterValidator() const {
+3 −1
Original line number Diff line number Diff line
@@ -34,9 +34,11 @@ class BodyField : public PacketField {

  virtual void GenExtractor(std::ostream& s, int num_leading_bits, bool for_struct) const override;

  virtual std::string GetGetterFunctionName() const override;

  virtual void GenGetter(std::ostream&, Size, Size) const override;

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

  virtual bool HasParameterValidator() const override;

+4 −0
Original line number Diff line number Diff line
@@ -32,6 +32,10 @@ std::string ChecksumField::GetDataType() const {

void ChecksumField::GenExtractor(std::ostream&, int, bool) const {}

std::string ChecksumField::GetGetterFunctionName() const {
  return "";
}

void ChecksumField::GenGetter(std::ostream&, Size, Size) const {}

bool ChecksumField::GenBuilderParameter(std::ostream&) const {
Loading