diff --git a/wxdata/include/scwx/wsr88d/rpg/linked_vector_packet.hpp b/wxdata/include/scwx/wsr88d/rpg/linked_vector_packet.hpp index 47c03070..97b47696 100644 --- a/wxdata/include/scwx/wsr88d/rpg/linked_vector_packet.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/linked_vector_packet.hpp @@ -6,6 +6,8 @@ #include #include +#include + namespace scwx { namespace wsr88d @@ -21,17 +23,27 @@ public: explicit LinkedVectorPacket(); ~LinkedVectorPacket(); - LinkedVectorPacket(const LinkedVectorPacket&) = delete; + LinkedVectorPacket(const LinkedVectorPacket&) = delete; LinkedVectorPacket& operator=(const LinkedVectorPacket&) = delete; LinkedVectorPacket(LinkedVectorPacket&&) noexcept; LinkedVectorPacket& operator=(LinkedVectorPacket&&) noexcept; - uint16_t packet_code() const override; - uint16_t length_of_block() const; - std::optional value_of_vector() const; + std::uint16_t packet_code() const override; + std::uint16_t length_of_block() const; + std::optional value_of_vector() const; - size_t data_size() const override; + std::int16_t start_i() const; + std::int16_t start_j() const; + std::vector end_i() const; + std::vector end_j() const; + + units::kilometers start_i_km() const; + units::kilometers start_j_km() const; + std::vector> end_i_km() const; + std::vector> end_j_km() const; + + std::size_t data_size() const override; bool Parse(std::istream& is) override; diff --git a/wxdata/source/scwx/wsr88d/rpg/linked_vector_packet.cpp b/wxdata/source/scwx/wsr88d/rpg/linked_vector_packet.cpp index f12c35dd..ba9ba522 100644 --- a/wxdata/source/scwx/wsr88d/rpg/linked_vector_packet.cpp +++ b/wxdata/source/scwx/wsr88d/rpg/linked_vector_packet.cpp @@ -71,6 +71,56 @@ std::optional LinkedVectorPacket::value_of_vector() const return value; } +std::int16_t LinkedVectorPacket::start_i() const +{ + return p->startI_; +} + +std::int16_t LinkedVectorPacket::start_j() const +{ + return p->startJ_; +} + +std::vector LinkedVectorPacket::end_i() const +{ + return p->endI_; +} + +std::vector LinkedVectorPacket::end_j() const +{ + return p->endJ_; +} + +units::kilometers LinkedVectorPacket::start_i_km() const +{ + return units::kilometers {p->startI_ * 0.25}; +} + +units::kilometers LinkedVectorPacket::start_j_km() const +{ + return units::kilometers {p->startJ_ * 0.25}; +} + +std::vector> LinkedVectorPacket::end_i_km() const +{ + std::vector> endI; + for (const auto& i : p->endI_) + { + endI.emplace_back(units::kilometers {i * 0.25}); + } + return endI; +} + +std::vector> LinkedVectorPacket::end_j_km() const +{ + std::vector> endJ; + for (const auto& j : p->endJ_) + { + endJ.emplace_back(units::kilometers {j * 0.25}); + } + return endJ; +} + size_t LinkedVectorPacket::data_size() const { return p->lengthOfBlock_ + 4u;