#ifndef FSFW_CFDP_LV_H_ #define FSFW_CFDP_LV_H_ #include #include "fsfw/serialize/SerialBufferAdapter.h" namespace cfdp { /** * @brief Length-Value field implementation * @details * Thin abstraction layer around a serial buffer adapter */ class Lv : public SerializeIF { public: explicit Lv(const std::vector& data); Lv(const uint8_t* value, size_t size); Lv(); // Semantically, this class is a zero-copy helper, so the copy ctor and copy assigment do not // really make sense here. Lv(const Lv&) = delete; Lv& operator=(const Lv&) = delete; Lv(Lv&&) noexcept; Lv& operator=(Lv&&) noexcept; ReturnValue_t serialize(uint8_t** buffer, size_t* size, size_t maxSize, Endianness streamEndianness) const override; [[nodiscard]] size_t getSerializedSize() const override; /** * @brief Deserialize a LV field from a raw buffer * @param buffer Raw buffer including the size field * @param size * @param streamEndianness * @return */ ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size, Endianness streamEndianness) override; size_t getValueLen() const; /** * Get value field and its size. * @param size Optionally retrieve size. Size will be the size of the actual value field * without the length field of the LV * @return */ const uint8_t* getValue(size_t* size) const; bool isEmpty() const; private: bool zeroLen = true; SerialBufferAdapter value; }; } // namespace cfdp #endif /* FSFW_CFDP_LV_H_ */