mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 21:10:04 +00:00
Add special symbol getter method to TextAndSpecialSymbolPacket
This commit is contained in:
parent
43911c1179
commit
a5d97933dc
4 changed files with 88 additions and 36 deletions
22
wxdata/include/scwx/wsr88d/rpg/rpg_types.hpp
Normal file
22
wxdata/include/scwx/wsr88d/rpg/rpg_types.hpp
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#pragma once
|
||||
|
||||
namespace scwx
|
||||
{
|
||||
namespace wsr88d
|
||||
{
|
||||
namespace rpg
|
||||
{
|
||||
|
||||
enum class SpecialSymbol
|
||||
{
|
||||
PastStormCellPosition,
|
||||
CurrentStormCellPosition,
|
||||
ForecastStormCellPosition,
|
||||
PastMdaPosition,
|
||||
ForecastMdaPosition,
|
||||
None
|
||||
};
|
||||
|
||||
} // namespace rpg
|
||||
} // namespace wsr88d
|
||||
} // namespace scwx
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <scwx/wsr88d/rpg/packet.hpp>
|
||||
#include <scwx/wsr88d/rpg/rpg_types.hpp>
|
||||
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
|
|
@ -14,8 +15,6 @@ namespace wsr88d
|
|||
namespace rpg
|
||||
{
|
||||
|
||||
class TextAndSpecialSymbolPacketImpl;
|
||||
|
||||
class TextAndSpecialSymbolPacket : public Packet
|
||||
{
|
||||
public:
|
||||
|
|
@ -29,21 +28,23 @@ public:
|
|||
TextAndSpecialSymbolPacket(TextAndSpecialSymbolPacket&&) noexcept;
|
||||
TextAndSpecialSymbolPacket& operator=(TextAndSpecialSymbolPacket&&) noexcept;
|
||||
|
||||
uint16_t packet_code() const override;
|
||||
uint16_t length_of_block() const;
|
||||
std::optional<uint16_t> value_of_text() const;
|
||||
int16_t start_i() const;
|
||||
int16_t start_j() const;
|
||||
std::uint16_t packet_code() const override;
|
||||
std::uint16_t length_of_block() const;
|
||||
std::optional<std::uint16_t> value_of_text() const;
|
||||
std::int16_t start_i() const;
|
||||
std::int16_t start_j() const;
|
||||
std::string text() const;
|
||||
SpecialSymbol special_symbol() const;
|
||||
|
||||
size_t data_size() const override;
|
||||
std::size_t data_size() const override;
|
||||
|
||||
bool Parse(std::istream& is) override;
|
||||
|
||||
static std::shared_ptr<TextAndSpecialSymbolPacket> Create(std::istream& is);
|
||||
|
||||
private:
|
||||
std::unique_ptr<TextAndSpecialSymbolPacketImpl> p;
|
||||
class Impl;
|
||||
std::unique_ptr<Impl> p;
|
||||
};
|
||||
|
||||
} // namespace rpg
|
||||
|
|
|
|||
|
|
@ -15,31 +15,23 @@ static const std::string logPrefix_ =
|
|||
"scwx::wsr88d::rpg::text_and_special_symbol_packet";
|
||||
static const auto logger_ = util::Logger::Create(logPrefix_);
|
||||
|
||||
class TextAndSpecialSymbolPacketImpl
|
||||
class TextAndSpecialSymbolPacket::Impl
|
||||
{
|
||||
public:
|
||||
explicit TextAndSpecialSymbolPacketImpl() :
|
||||
packetCode_ {0},
|
||||
lengthOfBlock_ {0},
|
||||
valueOfText_ {0},
|
||||
startI_ {0},
|
||||
startJ_ {0},
|
||||
text_ {}
|
||||
{
|
||||
}
|
||||
~TextAndSpecialSymbolPacketImpl() = default;
|
||||
explicit Impl() {}
|
||||
~Impl() = default;
|
||||
|
||||
uint16_t packetCode_;
|
||||
uint16_t lengthOfBlock_;
|
||||
uint16_t valueOfText_;
|
||||
int16_t startI_;
|
||||
int16_t startJ_;
|
||||
std::uint16_t packetCode_ {0};
|
||||
std::uint16_t lengthOfBlock_ {0};
|
||||
std::uint16_t valueOfText_ {0};
|
||||
std::int16_t startI_ {0};
|
||||
std::int16_t startJ_ {0};
|
||||
|
||||
std::string text_;
|
||||
std::string text_ {};
|
||||
};
|
||||
|
||||
TextAndSpecialSymbolPacket::TextAndSpecialSymbolPacket() :
|
||||
p(std::make_unique<TextAndSpecialSymbolPacketImpl>())
|
||||
p(std::make_unique<Impl>())
|
||||
{
|
||||
}
|
||||
TextAndSpecialSymbolPacket::~TextAndSpecialSymbolPacket() = default;
|
||||
|
|
@ -49,19 +41,19 @@ TextAndSpecialSymbolPacket::TextAndSpecialSymbolPacket(
|
|||
TextAndSpecialSymbolPacket& TextAndSpecialSymbolPacket::operator=(
|
||||
TextAndSpecialSymbolPacket&&) noexcept = default;
|
||||
|
||||
uint16_t TextAndSpecialSymbolPacket::packet_code() const
|
||||
std::uint16_t TextAndSpecialSymbolPacket::packet_code() const
|
||||
{
|
||||
return p->packetCode_;
|
||||
}
|
||||
|
||||
uint16_t TextAndSpecialSymbolPacket::length_of_block() const
|
||||
std::uint16_t TextAndSpecialSymbolPacket::length_of_block() const
|
||||
{
|
||||
return p->lengthOfBlock_;
|
||||
}
|
||||
|
||||
std::optional<uint16_t> TextAndSpecialSymbolPacket::value_of_text() const
|
||||
std::optional<std::uint16_t> TextAndSpecialSymbolPacket::value_of_text() const
|
||||
{
|
||||
std::optional<uint16_t> value;
|
||||
std::optional<std::uint16_t> value;
|
||||
|
||||
if (p->packetCode_ == 8)
|
||||
{
|
||||
|
|
@ -71,12 +63,12 @@ std::optional<uint16_t> TextAndSpecialSymbolPacket::value_of_text() const
|
|||
return value;
|
||||
}
|
||||
|
||||
int16_t TextAndSpecialSymbolPacket::start_i() const
|
||||
std::int16_t TextAndSpecialSymbolPacket::start_i() const
|
||||
{
|
||||
return p->startI_;
|
||||
}
|
||||
|
||||
int16_t TextAndSpecialSymbolPacket::start_j() const
|
||||
std::int16_t TextAndSpecialSymbolPacket::start_j() const
|
||||
{
|
||||
return p->startJ_;
|
||||
}
|
||||
|
|
@ -86,7 +78,43 @@ std::string TextAndSpecialSymbolPacket::text() const
|
|||
return p->text_;
|
||||
}
|
||||
|
||||
size_t TextAndSpecialSymbolPacket::data_size() const
|
||||
SpecialSymbol TextAndSpecialSymbolPacket::special_symbol() const
|
||||
{
|
||||
SpecialSymbol symbol = SpecialSymbol::None;
|
||||
|
||||
if (!p->text_.empty())
|
||||
{
|
||||
switch (p->text_.at(0))
|
||||
{
|
||||
case '!': // 0x21
|
||||
symbol = SpecialSymbol::PastStormCellPosition;
|
||||
break;
|
||||
|
||||
case '"': // 0x22
|
||||
symbol = SpecialSymbol::CurrentStormCellPosition;
|
||||
break;
|
||||
|
||||
case '#': // 0x23
|
||||
symbol = SpecialSymbol::ForecastStormCellPosition;
|
||||
break;
|
||||
|
||||
case '$': // 0x24
|
||||
symbol = SpecialSymbol::PastMdaPosition;
|
||||
break;
|
||||
|
||||
case '%': // 0x25
|
||||
symbol = SpecialSymbol::ForecastMdaPosition;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return symbol;
|
||||
}
|
||||
|
||||
std::size_t TextAndSpecialSymbolPacket::data_size() const
|
||||
{
|
||||
return p->lengthOfBlock_ + 4u;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -152,6 +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/rpg_types.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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue