mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 10: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,31 +15,23 @@ 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; | ||||||
|  | @ -49,19 +41,19 @@ TextAndSpecialSymbolPacket::TextAndSpecialSymbolPacket( | ||||||
| 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
	
	 Dan Paulat
						Dan Paulat