diff --git a/wxdata/include/scwx/wsr88d/rpg/storm_tracking_information_message.hpp b/wxdata/include/scwx/wsr88d/rpg/storm_tracking_information_message.hpp new file mode 100644 index 00000000..fb2a00c2 --- /dev/null +++ b/wxdata/include/scwx/wsr88d/rpg/storm_tracking_information_message.hpp @@ -0,0 +1,39 @@ +#pragma once + +#include + +namespace scwx +{ +namespace wsr88d +{ +namespace rpg +{ + +class StormTrackingInformationMessage : public GraphicProductMessage +{ +public: + explicit StormTrackingInformationMessage(); + ~StormTrackingInformationMessage(); + + StormTrackingInformationMessage(const StormTrackingInformationMessage&) = + delete; + StormTrackingInformationMessage& + operator=(const StormTrackingInformationMessage&) = delete; + + StormTrackingInformationMessage(StormTrackingInformationMessage&&) noexcept; + StormTrackingInformationMessage& + operator=(StormTrackingInformationMessage&&) noexcept; + + bool Parse(std::istream& is) override; + + static std::shared_ptr + Create(Level3MessageHeader&& header, std::istream& is); + +private: + class Impl; + std::unique_ptr p; +}; + +} // namespace rpg +} // namespace wsr88d +} // namespace scwx diff --git a/wxdata/source/scwx/wsr88d/rpg/level3_message_factory.cpp b/wxdata/source/scwx/wsr88d/rpg/level3_message_factory.cpp index 595f1da0..25675470 100644 --- a/wxdata/source/scwx/wsr88d/rpg/level3_message_factory.cpp +++ b/wxdata/source/scwx/wsr88d/rpg/level3_message_factory.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -44,7 +45,7 @@ static const std::unordered_map // {51, GraphicProductMessage::Create}, {56, GraphicProductMessage::Create}, {57, GraphicProductMessage::Create}, - {58, GraphicProductMessage::Create}, + {58, StormTrackingInformationMessage::Create}, {59, GraphicProductMessage::Create}, {61, GraphicProductMessage::Create}, {62, TabularProductMessage::Create}, diff --git a/wxdata/source/scwx/wsr88d/rpg/storm_tracking_information_message.cpp b/wxdata/source/scwx/wsr88d/rpg/storm_tracking_information_message.cpp new file mode 100644 index 00000000..6201efd6 --- /dev/null +++ b/wxdata/source/scwx/wsr88d/rpg/storm_tracking_information_message.cpp @@ -0,0 +1,58 @@ +#include +#include + +namespace scwx +{ +namespace wsr88d +{ +namespace rpg +{ + +static const std::string logPrefix_ = + "scwx::wsr88d::rpg::storm_tracking_information_message"; +static const auto logger_ = util::Logger::Create(logPrefix_); + +class StormTrackingInformationMessage::Impl +{ +public: + explicit Impl() {} + ~Impl() = default; +}; + +StormTrackingInformationMessage::StormTrackingInformationMessage() : + p(std::make_unique()) +{ +} +StormTrackingInformationMessage::~StormTrackingInformationMessage() = default; + +StormTrackingInformationMessage::StormTrackingInformationMessage( + StormTrackingInformationMessage&&) noexcept = default; +StormTrackingInformationMessage& StormTrackingInformationMessage::operator=( + StormTrackingInformationMessage&&) noexcept = default; + +bool StormTrackingInformationMessage::Parse(std::istream& is) +{ + bool dataValid = GraphicProductMessage::Parse(is); + + return dataValid; +} + +std::shared_ptr +StormTrackingInformationMessage::Create(Level3MessageHeader&& header, + std::istream& is) +{ + std::shared_ptr message = + std::make_shared(); + message->set_header(std::move(header)); + + if (!message->Parse(is)) + { + message.reset(); + } + + return message; +} + +} // namespace rpg +} // namespace wsr88d +} // namespace scwx diff --git a/wxdata/wxdata.cmake b/wxdata/wxdata.cmake index 8a885719..122786fd 100644 --- a/wxdata/wxdata.cmake +++ b/wxdata/wxdata.cmake @@ -158,6 +158,7 @@ set(HDR_WSR88D_RPG include/scwx/wsr88d/rpg/ccb_header.hpp include/scwx/wsr88d/rpg/special_graphic_symbol_packet.hpp include/scwx/wsr88d/rpg/sti_circle_symbol_packet.hpp include/scwx/wsr88d/rpg/storm_id_symbol_packet.hpp + include/scwx/wsr88d/rpg/storm_tracking_information_message.hpp include/scwx/wsr88d/rpg/tabular_alphanumeric_block.hpp include/scwx/wsr88d/rpg/tabular_product_message.hpp include/scwx/wsr88d/rpg/text_and_special_symbol_packet.hpp @@ -197,6 +198,7 @@ set(SRC_WSR88D_RPG source/scwx/wsr88d/rpg/ccb_header.cpp source/scwx/wsr88d/rpg/special_graphic_symbol_packet.cpp source/scwx/wsr88d/rpg/sti_circle_symbol_packet.cpp source/scwx/wsr88d/rpg/storm_id_symbol_packet.cpp + source/scwx/wsr88d/rpg/storm_tracking_information_message.cpp source/scwx/wsr88d/rpg/tabular_alphanumeric_block.cpp source/scwx/wsr88d/rpg/tabular_product_message.cpp source/scwx/wsr88d/rpg/text_and_special_symbol_packet.cpp