mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 18:30:06 +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
|
#pragma once
|
||||||
|
|
||||||
#include <scwx/wsr88d/rpg/packet.hpp>
|
#include <scwx/wsr88d/rpg/packet.hpp>
|
||||||
|
#include <scwx/wsr88d/rpg/rpg_types.hpp>
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
@ -14,8 +15,6 @@ namespace wsr88d
|
||||||
namespace rpg
|
namespace rpg
|
||||||
{
|
{
|
||||||
|
|
||||||
class TextAndSpecialSymbolPacketImpl;
|
|
||||||
|
|
||||||
class TextAndSpecialSymbolPacket : public Packet
|
class TextAndSpecialSymbolPacket : public Packet
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -29,21 +28,23 @@ public:
|
||||||
TextAndSpecialSymbolPacket(TextAndSpecialSymbolPacket&&) noexcept;
|
TextAndSpecialSymbolPacket(TextAndSpecialSymbolPacket&&) noexcept;
|
||||||
TextAndSpecialSymbolPacket& operator=(TextAndSpecialSymbolPacket&&) noexcept;
|
TextAndSpecialSymbolPacket& operator=(TextAndSpecialSymbolPacket&&) noexcept;
|
||||||
|
|
||||||
uint16_t packet_code() const override;
|
std::uint16_t packet_code() const override;
|
||||||
uint16_t length_of_block() const;
|
std::uint16_t length_of_block() const;
|
||||||
std::optional<uint16_t> value_of_text() const;
|
std::optional<std::uint16_t> value_of_text() const;
|
||||||
int16_t start_i() const;
|
std::int16_t start_i() const;
|
||||||
int16_t start_j() const;
|
std::int16_t start_j() const;
|
||||||
std::string text() 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;
|
bool Parse(std::istream& is) override;
|
||||||
|
|
||||||
static std::shared_ptr<TextAndSpecialSymbolPacket> Create(std::istream& is);
|
static std::shared_ptr<TextAndSpecialSymbolPacket> Create(std::istream& is);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<TextAndSpecialSymbolPacketImpl> p;
|
class Impl;
|
||||||
|
std::unique_ptr<Impl> p;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace rpg
|
} // namespace rpg
|
||||||
|
|
|
||||||
|
|
@ -15,53 +15,45 @@ static const std::string logPrefix_ =
|
||||||
"scwx::wsr88d::rpg::text_and_special_symbol_packet";
|
"scwx::wsr88d::rpg::text_and_special_symbol_packet";
|
||||||
static const auto logger_ = util::Logger::Create(logPrefix_);
|
static const auto logger_ = util::Logger::Create(logPrefix_);
|
||||||
|
|
||||||
class TextAndSpecialSymbolPacketImpl
|
class TextAndSpecialSymbolPacket::Impl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit TextAndSpecialSymbolPacketImpl() :
|
explicit Impl() {}
|
||||||
packetCode_ {0},
|
~Impl() = default;
|
||||||
lengthOfBlock_ {0},
|
|
||||||
valueOfText_ {0},
|
|
||||||
startI_ {0},
|
|
||||||
startJ_ {0},
|
|
||||||
text_ {}
|
|
||||||
{
|
|
||||||
}
|
|
||||||
~TextAndSpecialSymbolPacketImpl() = default;
|
|
||||||
|
|
||||||
uint16_t packetCode_;
|
std::uint16_t packetCode_ {0};
|
||||||
uint16_t lengthOfBlock_;
|
std::uint16_t lengthOfBlock_ {0};
|
||||||
uint16_t valueOfText_;
|
std::uint16_t valueOfText_ {0};
|
||||||
int16_t startI_;
|
std::int16_t startI_ {0};
|
||||||
int16_t startJ_;
|
std::int16_t startJ_ {0};
|
||||||
|
|
||||||
std::string text_;
|
std::string text_ {};
|
||||||
};
|
};
|
||||||
|
|
||||||
TextAndSpecialSymbolPacket::TextAndSpecialSymbolPacket() :
|
TextAndSpecialSymbolPacket::TextAndSpecialSymbolPacket() :
|
||||||
p(std::make_unique<TextAndSpecialSymbolPacketImpl>())
|
p(std::make_unique<Impl>())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
TextAndSpecialSymbolPacket::~TextAndSpecialSymbolPacket() = default;
|
TextAndSpecialSymbolPacket::~TextAndSpecialSymbolPacket() = default;
|
||||||
|
|
||||||
TextAndSpecialSymbolPacket::TextAndSpecialSymbolPacket(
|
TextAndSpecialSymbolPacket::TextAndSpecialSymbolPacket(
|
||||||
TextAndSpecialSymbolPacket&&) noexcept = default;
|
TextAndSpecialSymbolPacket&&) noexcept = default;
|
||||||
TextAndSpecialSymbolPacket& TextAndSpecialSymbolPacket::operator=(
|
TextAndSpecialSymbolPacket& TextAndSpecialSymbolPacket::operator=(
|
||||||
TextAndSpecialSymbolPacket&&) noexcept = default;
|
TextAndSpecialSymbolPacket&&) noexcept = default;
|
||||||
|
|
||||||
uint16_t TextAndSpecialSymbolPacket::packet_code() const
|
std::uint16_t TextAndSpecialSymbolPacket::packet_code() const
|
||||||
{
|
{
|
||||||
return p->packetCode_;
|
return p->packetCode_;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t TextAndSpecialSymbolPacket::length_of_block() const
|
std::uint16_t TextAndSpecialSymbolPacket::length_of_block() const
|
||||||
{
|
{
|
||||||
return p->lengthOfBlock_;
|
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)
|
if (p->packetCode_ == 8)
|
||||||
{
|
{
|
||||||
|
|
@ -71,12 +63,12 @@ std::optional<uint16_t> TextAndSpecialSymbolPacket::value_of_text() const
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t TextAndSpecialSymbolPacket::start_i() const
|
std::int16_t TextAndSpecialSymbolPacket::start_i() const
|
||||||
{
|
{
|
||||||
return p->startI_;
|
return p->startI_;
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t TextAndSpecialSymbolPacket::start_j() const
|
std::int16_t TextAndSpecialSymbolPacket::start_j() const
|
||||||
{
|
{
|
||||||
return p->startJ_;
|
return p->startJ_;
|
||||||
}
|
}
|
||||||
|
|
@ -86,7 +78,43 @@ std::string TextAndSpecialSymbolPacket::text() const
|
||||||
return p->text_;
|
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;
|
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/radar_coded_message.hpp
|
||||||
include/scwx/wsr88d/rpg/radial_data_packet.hpp
|
include/scwx/wsr88d/rpg/radial_data_packet.hpp
|
||||||
include/scwx/wsr88d/rpg/raster_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/scit_data_packet.hpp
|
||||||
include/scwx/wsr88d/rpg/set_color_level_packet.hpp
|
include/scwx/wsr88d/rpg/set_color_level_packet.hpp
|
||||||
include/scwx/wsr88d/rpg/special_graphic_symbol_packet.hpp
|
include/scwx/wsr88d/rpg/special_graphic_symbol_packet.hpp
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue