diff --git a/wxdata/include/scwx/wsr88d/rpg/scit_data_packet.hpp b/wxdata/include/scwx/wsr88d/rpg/scit_data_packet.hpp new file mode 100644 index 00000000..37aac08a --- /dev/null +++ b/wxdata/include/scwx/wsr88d/rpg/scit_data_packet.hpp @@ -0,0 +1,43 @@ +#pragma once + +#include + +#include +#include + +namespace scwx +{ +namespace wsr88d +{ +namespace rpg +{ + +class ScitDataPacket : public SpecialGraphicSymbolPacket +{ +public: + explicit ScitDataPacket(); + ~ScitDataPacket(); + + ScitDataPacket(const ScitDataPacket&) = delete; + ScitDataPacket& operator=(const ScitDataPacket&) = delete; + + ScitDataPacket(ScitDataPacket&&) noexcept; + ScitDataPacket& operator=(ScitDataPacket&&) noexcept; + + const std::vector& data() const; + + std::size_t RecordCount() const override; + + static std::shared_ptr Create(std::istream& is); + +protected: + bool ParseData(std::istream& is) override; + +private: + class Impl; + std::unique_ptr p; +}; + +} // namespace rpg +} // namespace wsr88d +} // namespace scwx diff --git a/wxdata/include/scwx/wsr88d/rpg/scit_forecast_data_packet.hpp b/wxdata/include/scwx/wsr88d/rpg/scit_forecast_data_packet.hpp deleted file mode 100644 index 56061d7a..00000000 --- a/wxdata/include/scwx/wsr88d/rpg/scit_forecast_data_packet.hpp +++ /dev/null @@ -1,44 +0,0 @@ -#pragma once - -#include - -#include -#include - -namespace scwx -{ -namespace wsr88d -{ -namespace rpg -{ - -class ScitForecastDataPacketImpl; - -class ScitForecastDataPacket : public SpecialGraphicSymbolPacket -{ -public: - explicit ScitForecastDataPacket(); - ~ScitForecastDataPacket(); - - ScitForecastDataPacket(const ScitForecastDataPacket&) = delete; - ScitForecastDataPacket& operator=(const ScitForecastDataPacket&) = delete; - - ScitForecastDataPacket(ScitForecastDataPacket&&) noexcept; - ScitForecastDataPacket& operator=(ScitForecastDataPacket&&) noexcept; - - const std::vector& data() const; - - size_t RecordCount() const override; - - static std::shared_ptr Create(std::istream& is); - -protected: - bool ParseData(std::istream& is) override; - -private: - std::unique_ptr p; -}; - -} // namespace rpg -} // namespace wsr88d -} // namespace scwx diff --git a/wxdata/source/scwx/wsr88d/rpg/packet_factory.cpp b/wxdata/source/scwx/wsr88d/rpg/packet_factory.cpp index 01f91339..e3cd034b 100644 --- a/wxdata/source/scwx/wsr88d/rpg/packet_factory.cpp +++ b/wxdata/source/scwx/wsr88d/rpg/packet_factory.cpp @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include #include #include @@ -63,8 +63,8 @@ static const std::unordered_map create_ { {20, PointFeatureSymbolPacket::Create}, {21, CellTrendDataPacket::Create}, {22, CellTrendVolumeScanTimes::Create}, - {23, ScitForecastDataPacket::Create}, - {24, ScitForecastDataPacket::Create}, + {23, ScitDataPacket::Create}, + {24, ScitDataPacket::Create}, {25, StiCircleSymbolPacket::Create}, {26, PointGraphicSymbolPacket::Create}, {28, GenericDataPacket::Create}, diff --git a/wxdata/source/scwx/wsr88d/rpg/scit_data_packet.cpp b/wxdata/source/scwx/wsr88d/rpg/scit_data_packet.cpp new file mode 100644 index 00000000..74327c81 --- /dev/null +++ b/wxdata/source/scwx/wsr88d/rpg/scit_data_packet.cpp @@ -0,0 +1,80 @@ +#include +#include + +#include +#include +#include + +namespace scwx +{ +namespace wsr88d +{ +namespace rpg +{ + +static const std::string logPrefix_ = "scwx::wsr88d::rpg::scit_data_packet"; +static const auto logger_ = util::Logger::Create(logPrefix_); + +static const std::set packetCodes_ = {23, 24}; + +class ScitDataPacket::Impl +{ +public: + explicit Impl() : data_ {}, recordCount_ {0} {} + ~Impl() = default; + + std::vector data_; + size_t recordCount_; +}; + +ScitDataPacket::ScitDataPacket() : p(std::make_unique()) {} +ScitDataPacket::~ScitDataPacket() = default; + +ScitDataPacket::ScitDataPacket(ScitDataPacket&&) noexcept = default; +ScitDataPacket& ScitDataPacket::operator=(ScitDataPacket&&) noexcept = default; + +const std::vector& ScitDataPacket::data() const +{ + return p->data_; +} + +size_t ScitDataPacket::RecordCount() const +{ + return p->recordCount_; +} + +bool ScitDataPacket::ParseData(std::istream& is) +{ + bool blockValid = true; + + if (!packetCodes_.contains(packet_code())) + { + logger_->warn("Invalid packet code: {}", packet_code()); + blockValid = false; + } + + if (blockValid) + { + p->recordCount_ = length_of_block(); + p->data_.resize(p->recordCount_); + is.read(reinterpret_cast(p->data_.data()), p->recordCount_); + } + + return blockValid; +} + +std::shared_ptr ScitDataPacket::Create(std::istream& is) +{ + std::shared_ptr packet = std::make_shared(); + + if (!packet->Parse(is)) + { + packet.reset(); + } + + return packet; +} + +} // namespace rpg +} // namespace wsr88d +} // namespace scwx diff --git a/wxdata/source/scwx/wsr88d/rpg/scit_forecast_data_packet.cpp b/wxdata/source/scwx/wsr88d/rpg/scit_forecast_data_packet.cpp deleted file mode 100644 index 86899bec..00000000 --- a/wxdata/source/scwx/wsr88d/rpg/scit_forecast_data_packet.cpp +++ /dev/null @@ -1,88 +0,0 @@ -#include -#include - -#include -#include -#include - -namespace scwx -{ -namespace wsr88d -{ -namespace rpg -{ - -static const std::string logPrefix_ = - "scwx::wsr88d::rpg::scit_forecast_data_packet"; -static const auto logger_ = util::Logger::Create(logPrefix_); - -static const std::set packetCodes_ = {23, 24}; - -class ScitForecastDataPacketImpl -{ -public: - explicit ScitForecastDataPacketImpl() : data_ {}, recordCount_ {0} {} - ~ScitForecastDataPacketImpl() = default; - - std::vector data_; - size_t recordCount_; -}; - -ScitForecastDataPacket::ScitForecastDataPacket() : - p(std::make_unique()) -{ -} -ScitForecastDataPacket::~ScitForecastDataPacket() = default; - -ScitForecastDataPacket::ScitForecastDataPacket( - ScitForecastDataPacket&&) noexcept = default; -ScitForecastDataPacket& -ScitForecastDataPacket::operator=(ScitForecastDataPacket&&) noexcept = default; - -const std::vector& ScitForecastDataPacket::data() const -{ - return p->data_; -} - -size_t ScitForecastDataPacket::RecordCount() const -{ - return p->recordCount_; -} - -bool ScitForecastDataPacket::ParseData(std::istream& is) -{ - bool blockValid = true; - - if (!packetCodes_.contains(packet_code())) - { - logger_->warn("Invalid packet code: {}", packet_code()); - blockValid = false; - } - - if (blockValid) - { - p->recordCount_ = length_of_block(); - p->data_.resize(p->recordCount_); - is.read(reinterpret_cast(p->data_.data()), p->recordCount_); - } - - return blockValid; -} - -std::shared_ptr -ScitForecastDataPacket::Create(std::istream& is) -{ - std::shared_ptr packet = - std::make_shared(); - - if (!packet->Parse(is)) - { - packet.reset(); - } - - return packet; -} - -} // namespace rpg -} // namespace wsr88d -} // namespace scwx diff --git a/wxdata/wxdata.cmake b/wxdata/wxdata.cmake index 0652d898..30d1cd8c 100644 --- a/wxdata/wxdata.cmake +++ b/wxdata/wxdata.cmake @@ -152,7 +152,7 @@ set(HDR_WSR88D_RPG include/scwx/wsr88d/rpg/ccb_header.hpp include/scwx/wsr88d/rpg/radar_coded_message.hpp include/scwx/wsr88d/rpg/radial_data_packet.hpp include/scwx/wsr88d/rpg/raster_data_packet.hpp - include/scwx/wsr88d/rpg/scit_forecast_data_packet.hpp + include/scwx/wsr88d/rpg/scit_data_packet.hpp include/scwx/wsr88d/rpg/set_color_level_packet.hpp include/scwx/wsr88d/rpg/special_graphic_symbol_packet.hpp include/scwx/wsr88d/rpg/sti_circle_symbol_packet.hpp @@ -191,7 +191,7 @@ set(SRC_WSR88D_RPG source/scwx/wsr88d/rpg/ccb_header.cpp source/scwx/wsr88d/rpg/radar_coded_message.cpp source/scwx/wsr88d/rpg/radial_data_packet.cpp source/scwx/wsr88d/rpg/raster_data_packet.cpp - source/scwx/wsr88d/rpg/scit_forecast_data_packet.cpp + source/scwx/wsr88d/rpg/scit_data_packet.cpp source/scwx/wsr88d/rpg/set_color_level_packet.cpp source/scwx/wsr88d/rpg/special_graphic_symbol_packet.cpp source/scwx/wsr88d/rpg/sti_circle_symbol_packet.cpp