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

Commit 7630740b authored by Henri Chataing's avatar Henri Chataing Committed by Gerrit Code Review
Browse files

Merge "packetgen: Remove redundant declarations in the generated cxx code"

parents aac86613 0287b62d
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -34,23 +34,20 @@ template <bool little_endian>
class PacketView {
 public:
  explicit PacketView(std::forward_list<View> fragments);
  PacketView(const PacketView& PacketView) = default;
  explicit PacketView(std::shared_ptr<const std::vector<uint8_t>> packet);
  PacketView(const PacketView& PacketView) = default;
  PacketView<little_endian>() = delete;
  virtual ~PacketView() = default;

  virtual Iterator<little_endian> begin() const;

  virtual Iterator<little_endian> end() const;
  Iterator<little_endian> begin() const;
  Iterator<little_endian> end() const;

  uint8_t operator[](size_t i) const;

  uint8_t at(size_t index) const;

  size_t size() const;

  PacketView<true> GetLittleEndianSubview(size_t begin, size_t end) const;

  PacketView<false> GetBigEndianSubview(size_t begin, size_t end) const;

 protected:
@@ -59,6 +56,7 @@ class PacketView {
 private:
  std::forward_list<View> fragments_;
  size_t length_;

  std::forward_list<View> GetSubviewList(size_t begin, size_t end) const;
};

+0 −8
Original line number Diff line number Diff line
@@ -70,14 +70,6 @@ void PayloadField::GenGetter(std::ostream& s, Size start_offset, Size end_offset
  GenBounds(s, start_offset, end_offset, GetSize());
  s << "return GetLittleEndianSubview(field_begin, field_end);";
  s << "}\n\n";

  s << "PacketView<!kLittleEndian> " << GetGetterFunctionName() << "BigEndian() const {";
  s << "ASSERT(was_validated_);";
  s << "size_t end_index = size();";
  s << "auto to_bound = begin();";
  GenBounds(s, start_offset, end_offset, GetSize());
  s << "return GetBigEndianSubview(field_begin, field_end);";
  s << "}\n";
}

std::string PayloadField::GetBuilderParameterType() const {
+23 −11
Original line number Diff line number Diff line
@@ -179,17 +179,29 @@ void PacketDef::GenValidator(std::ostream& s) const {
    }
  }

  // Write the function declaration.
  s << "virtual bool IsValid() " << (parent_ != nullptr ? " override" : "") << " {";
  s << "if (was_validated_) { return true; } ";
  s << "else { was_validated_ = true; was_validated_ = IsValid_(); return was_validated_; }";
  s << "}";

  s << "protected:";
  s << "virtual bool IsValid_() const {";

  if (parent_ != nullptr) {
    s << "if (!" << parent_->name_ << "View::IsValid_()) { return false; } ";
  // Generate the public validator IsValid().
  // The method only needs to be generated for the top most class.
  if (parent_ == nullptr) {
    s << "bool IsValid() {" << std::endl;
    s << "  if (was_validated_) {" << std::endl;
    s << "    return true;" << std::endl;
    s << "  } else {" << std::endl;
    s << "    was_validated_ = true;" << std::endl;
    s << "    return (was_validated_ = Validate());" << std::endl;
    s << "  }" << std::endl;
    s << "}" << std::endl;
  }

  // Generate the private validator Validate().
  // The method is overridden by all child classes.
  s << "protected:" << std::endl;
  if (parent_ == nullptr) {
    s << "virtual bool Validate() const {" << std::endl;
  } else {
    s << "bool Validate() const override {" << std::endl;
    s << "  if (!" << parent_->name_ << "View::Validate()) {" << std::endl;
    s << "    return false;" << std::endl;
    s << "  }" << std::endl;
  }

  // Offset by the parents known size. We know that any dynamic fields can