mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 07:50:05 +00:00 
			
		
		
		
	Refactoring, making level 2 message classes more explicitly named
This commit is contained in:
		
							parent
							
								
									cae04fad37
								
							
						
					
					
						commit
						a280f37289
					
				
					 23 changed files with 236 additions and 155 deletions
				
			
		|  | @ -1,7 +1,5 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <scwx/wsr88d/rda/message_header.hpp> | ||||
| 
 | ||||
| #include <array> | ||||
| #include <execution> | ||||
| #include <istream> | ||||
|  | @ -18,8 +16,6 @@ namespace scwx | |||
| { | ||||
| namespace wsr88d | ||||
| { | ||||
| namespace rda | ||||
| { | ||||
| 
 | ||||
| class MessageImpl; | ||||
| 
 | ||||
|  | @ -34,20 +30,13 @@ protected: | |||
|    Message(Message&&) noexcept; | ||||
|    Message& operator=(Message&&) noexcept; | ||||
| 
 | ||||
|    bool ValidateMessage(std::istream& is, size_t bytesRead) const; | ||||
|    virtual bool ValidateMessage(std::istream& is, size_t bytesRead) const = 0; | ||||
| 
 | ||||
| public: | ||||
|    virtual ~Message(); | ||||
| 
 | ||||
|    const MessageHeader& header() const; | ||||
| 
 | ||||
|    void set_header(MessageHeader&& header); | ||||
| 
 | ||||
|    virtual bool Parse(std::istream& is) = 0; | ||||
| 
 | ||||
|    static constexpr double ANGLE_DATA_SCALE      = 0.005493125; | ||||
|    static constexpr double AZ_EL_RATE_DATA_SCALE = 0.001373291015625; | ||||
| 
 | ||||
|    static void ReadBoolean(std::istream& is, bool& value) | ||||
|    { | ||||
|       std::string data(4, ' '); | ||||
|  | @ -100,9 +89,10 @@ public: | |||
|    template<typename T> | ||||
|    static void SwapMap(std::map<T, float>& m) | ||||
|    { | ||||
|       std::for_each(std::execution::par_unseq, m.begin(), m.end(), [](auto& p) { | ||||
|          p.second = SwapFloat(p.second); | ||||
|       }); | ||||
|       std::for_each(std::execution::par_unseq, | ||||
|                     m.begin(), | ||||
|                     m.end(), | ||||
|                     [](auto& p) { p.second = SwapFloat(p.second); }); | ||||
|    } | ||||
| 
 | ||||
|    static void SwapVector(std::vector<uint16_t>& v) | ||||
|  | @ -118,6 +108,5 @@ private: | |||
|    std::unique_ptr<MessageImpl> p; | ||||
| }; | ||||
| 
 | ||||
| } // namespace rda
 | ||||
| } // namespace wsr88d
 | ||||
| } // namespace scwx
 | ||||
|  | @ -1,6 +1,6 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <scwx/wsr88d/rda/message.hpp> | ||||
| #include <scwx/wsr88d/rda/level2_message.hpp> | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
|  | @ -11,7 +11,7 @@ namespace rda | |||
| 
 | ||||
| class ClutterFilterMapImpl; | ||||
| 
 | ||||
| class ClutterFilterMap : public Message | ||||
| class ClutterFilterMap : public Level2Message | ||||
| { | ||||
| public: | ||||
|    explicit ClutterFilterMap(); | ||||
|  | @ -32,8 +32,8 @@ public: | |||
| 
 | ||||
|    bool Parse(std::istream& is); | ||||
| 
 | ||||
|    static std::shared_ptr<ClutterFilterMap> Create(MessageHeader&& header, | ||||
|                                                    std::istream&   is); | ||||
|    static std::shared_ptr<ClutterFilterMap> Create(Level2MessageHeader&& header, | ||||
|                                                    std::istream&         is); | ||||
| 
 | ||||
|    static const size_t NUM_AZIMUTH_SEGMENTS = 360u; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <scwx/util/iterator.hpp> | ||||
| #include <scwx/wsr88d/rda/message.hpp> | ||||
| #include <scwx/wsr88d/rda/level2_message.hpp> | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
|  | @ -170,7 +170,7 @@ private: | |||
|    bool Parse(std::istream& is); | ||||
| }; | ||||
| 
 | ||||
| class DigitalRadarData : public Message | ||||
| class DigitalRadarData : public Level2Message | ||||
| { | ||||
| public: | ||||
|    explicit DigitalRadarData(); | ||||
|  | @ -205,8 +205,8 @@ public: | |||
| 
 | ||||
|    bool Parse(std::istream& is); | ||||
| 
 | ||||
|    static std::shared_ptr<DigitalRadarData> Create(MessageHeader&& header, | ||||
|                                                    std::istream&   is); | ||||
|    static std::shared_ptr<DigitalRadarData> Create(Level2MessageHeader&& header, | ||||
|                                                    std::istream&         is); | ||||
| 
 | ||||
| private: | ||||
|    std::unique_ptr<DigitalRadarDataImpl> p; | ||||
|  |  | |||
							
								
								
									
										50
									
								
								wxdata/include/scwx/wsr88d/rda/level2_message.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								wxdata/include/scwx/wsr88d/rda/level2_message.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,50 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <scwx/wsr88d/rda/level2_message_header.hpp> | ||||
| #include <scwx/wsr88d/message.hpp> | ||||
| 
 | ||||
| #ifdef WIN32 | ||||
| #   include <WinSock2.h> | ||||
| #else | ||||
| #   include <arpa/inet.h> | ||||
| #endif | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
| namespace wsr88d | ||||
| { | ||||
| namespace rda | ||||
| { | ||||
| 
 | ||||
| class Level2MessageImpl; | ||||
| 
 | ||||
| class Level2Message : public Message | ||||
| { | ||||
| protected: | ||||
|    explicit Level2Message(); | ||||
| 
 | ||||
|    Level2Message(const Level2Message&) = delete; | ||||
|    Level2Message& operator=(const Level2Message&) = delete; | ||||
| 
 | ||||
|    Level2Message(Level2Message&&) noexcept; | ||||
|    Level2Message& operator=(Level2Message&&) noexcept; | ||||
| 
 | ||||
|    bool ValidateMessage(std::istream& is, size_t bytesRead) const override; | ||||
| 
 | ||||
| public: | ||||
|    virtual ~Level2Message(); | ||||
| 
 | ||||
|    const Level2MessageHeader& header() const; | ||||
| 
 | ||||
|    void set_header(Level2MessageHeader&& header); | ||||
| 
 | ||||
|    static constexpr double ANGLE_DATA_SCALE      = 0.005493125; | ||||
|    static constexpr double AZ_EL_RATE_DATA_SCALE = 0.001373291015625; | ||||
| 
 | ||||
| private: | ||||
|    std::unique_ptr<Level2MessageImpl> p; | ||||
| }; | ||||
| 
 | ||||
| } // namespace rda
 | ||||
| } // namespace wsr88d
 | ||||
| } // namespace scwx
 | ||||
							
								
								
									
										42
									
								
								wxdata/include/scwx/wsr88d/rda/level2_message_factory.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								wxdata/include/scwx/wsr88d/rda/level2_message_factory.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,42 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <scwx/wsr88d/rda/level2_message.hpp> | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
| namespace wsr88d | ||||
| { | ||||
| namespace rda | ||||
| { | ||||
| 
 | ||||
| struct Level2MessageInfo | ||||
| { | ||||
|    std::shared_ptr<Level2Message> message; | ||||
|    bool                           headerValid; | ||||
|    bool                           messageValid; | ||||
| 
 | ||||
|    Level2MessageInfo() : | ||||
|        message(nullptr), headerValid(false), messageValid(false) | ||||
|    { | ||||
|    } | ||||
| }; | ||||
| 
 | ||||
| class Level2MessageFactory | ||||
| { | ||||
| private: | ||||
|    explicit Level2MessageFactory() = delete; | ||||
|    ~Level2MessageFactory()         = delete; | ||||
| 
 | ||||
|    Level2MessageFactory(const Level2MessageFactory&) = delete; | ||||
|    Level2MessageFactory& operator=(const Level2MessageFactory&) = delete; | ||||
| 
 | ||||
|    Level2MessageFactory(Level2MessageFactory&&) noexcept = delete; | ||||
|    Level2MessageFactory& operator=(Level2MessageFactory&&) noexcept = delete; | ||||
| 
 | ||||
| public: | ||||
|    static Level2MessageInfo Create(std::istream& is); | ||||
| }; | ||||
| 
 | ||||
| } // namespace rda
 | ||||
| } // namespace wsr88d
 | ||||
| } // namespace scwx
 | ||||
|  | @ -10,19 +10,19 @@ namespace wsr88d | |||
| namespace rda | ||||
| { | ||||
| 
 | ||||
| class MessageHeaderImpl; | ||||
| class Level2MessageHeaderImpl; | ||||
| 
 | ||||
| class MessageHeader | ||||
| class Level2MessageHeader | ||||
| { | ||||
| public: | ||||
|    explicit MessageHeader(); | ||||
|    ~MessageHeader(); | ||||
|    explicit Level2MessageHeader(); | ||||
|    ~Level2MessageHeader(); | ||||
| 
 | ||||
|    MessageHeader(const MessageHeader&) = delete; | ||||
|    MessageHeader& operator=(const MessageHeader&) = delete; | ||||
|    Level2MessageHeader(const Level2MessageHeader&) = delete; | ||||
|    Level2MessageHeader& operator=(const Level2MessageHeader&) = delete; | ||||
| 
 | ||||
|    MessageHeader(MessageHeader&&) noexcept; | ||||
|    MessageHeader& operator=(MessageHeader&&) noexcept; | ||||
|    Level2MessageHeader(Level2MessageHeader&&) noexcept; | ||||
|    Level2MessageHeader& operator=(Level2MessageHeader&&) noexcept; | ||||
| 
 | ||||
|    uint16_t message_size() const; | ||||
|    uint8_t  rda_redundant_channel() const; | ||||
|  | @ -40,7 +40,7 @@ public: | |||
|    static const size_t SIZE = 16u; | ||||
| 
 | ||||
| private: | ||||
|    std::unique_ptr<MessageHeaderImpl> p; | ||||
|    std::unique_ptr<Level2MessageHeaderImpl> p; | ||||
| }; | ||||
| 
 | ||||
| } // namespace rda
 | ||||
|  | @ -1,39 +0,0 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <scwx/wsr88d/rda/message.hpp> | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
| namespace wsr88d | ||||
| { | ||||
| namespace rda | ||||
| { | ||||
| 
 | ||||
| struct MessageInfo | ||||
| { | ||||
|    std::shared_ptr<Message> message; | ||||
|    bool                     headerValid; | ||||
|    bool                     messageValid; | ||||
| 
 | ||||
|    MessageInfo() : message(nullptr), headerValid(false), messageValid(false) {} | ||||
| }; | ||||
| 
 | ||||
| class MessageFactory | ||||
| { | ||||
| private: | ||||
|    explicit MessageFactory() = delete; | ||||
|    ~MessageFactory()         = delete; | ||||
| 
 | ||||
|    MessageFactory(const MessageFactory&) = delete; | ||||
|    MessageFactory& operator=(const MessageFactory&) = delete; | ||||
| 
 | ||||
|    MessageFactory(MessageFactory&&) noexcept = delete; | ||||
|    MessageFactory& operator=(MessageFactory&&) noexcept = delete; | ||||
| 
 | ||||
| public: | ||||
|    static MessageInfo Create(std::istream& is); | ||||
| }; | ||||
| 
 | ||||
| } // namespace rda
 | ||||
| } // namespace wsr88d
 | ||||
| } // namespace scwx
 | ||||
|  | @ -1,6 +1,6 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <scwx/wsr88d/rda/message.hpp> | ||||
| #include <scwx/wsr88d/rda/level2_message.hpp> | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
|  | @ -11,7 +11,7 @@ namespace rda | |||
| 
 | ||||
| class PerformanceMaintenanceDataImpl; | ||||
| 
 | ||||
| class PerformanceMaintenanceData : public Message | ||||
| class PerformanceMaintenanceData : public Level2Message | ||||
| { | ||||
| public: | ||||
|    explicit PerformanceMaintenanceData(); | ||||
|  | @ -279,7 +279,7 @@ public: | |||
|    bool Parse(std::istream& is); | ||||
| 
 | ||||
|    static std::shared_ptr<PerformanceMaintenanceData> | ||||
|    Create(MessageHeader&& header, std::istream& is); | ||||
|    Create(Level2MessageHeader&& header, std::istream& is); | ||||
| 
 | ||||
| private: | ||||
|    std::unique_ptr<PerformanceMaintenanceDataImpl> p; | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <scwx/wsr88d/rda/message.hpp> | ||||
| #include <scwx/wsr88d/rda/level2_message.hpp> | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
|  | @ -11,7 +11,7 @@ namespace rda | |||
| 
 | ||||
| class RdaAdaptationDataImpl; | ||||
| 
 | ||||
| class RdaAdaptationData : public Message | ||||
| class RdaAdaptationData : public Level2Message | ||||
| { | ||||
| public: | ||||
|    explicit RdaAdaptationData(); | ||||
|  | @ -203,8 +203,8 @@ public: | |||
| 
 | ||||
|    bool Parse(std::istream& is); | ||||
| 
 | ||||
|    static std::shared_ptr<RdaAdaptationData> Create(MessageHeader&& header, | ||||
|                                                     std::istream&   is); | ||||
|    static std::shared_ptr<RdaAdaptationData> | ||||
|    Create(Level2MessageHeader&& header, std::istream& is); | ||||
| 
 | ||||
| private: | ||||
|    std::unique_ptr<RdaAdaptationDataImpl> p; | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <scwx/wsr88d/rda/message.hpp> | ||||
| #include <scwx/wsr88d/rda/level2_message.hpp> | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
|  | @ -11,7 +11,7 @@ namespace rda | |||
| 
 | ||||
| class RdaStatusDataImpl; | ||||
| 
 | ||||
| class RdaStatusData : public Message | ||||
| class RdaStatusData : public Level2Message | ||||
| { | ||||
| public: | ||||
|    explicit RdaStatusData(); | ||||
|  | @ -55,8 +55,8 @@ public: | |||
| 
 | ||||
|    bool Parse(std::istream& is); | ||||
| 
 | ||||
|    static std::shared_ptr<RdaStatusData> Create(MessageHeader&& header, | ||||
|                                                 std::istream&   is); | ||||
|    static std::shared_ptr<RdaStatusData> Create(Level2MessageHeader&& header, | ||||
|                                                 std::istream&         is); | ||||
| 
 | ||||
| private: | ||||
|    std::unique_ptr<RdaStatusDataImpl> p; | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <scwx/wsr88d/rda/message.hpp> | ||||
| #include <scwx/wsr88d/rda/level2_message.hpp> | ||||
| 
 | ||||
| #include <string> | ||||
| 
 | ||||
|  | @ -23,7 +23,7 @@ enum class WaveformType | |||
| 
 | ||||
| class VolumeCoveragePatternDataImpl; | ||||
| 
 | ||||
| class VolumeCoveragePatternData : public Message | ||||
| class VolumeCoveragePatternData : public Level2Message | ||||
| { | ||||
| public: | ||||
|    explicit VolumeCoveragePatternData(); | ||||
|  | @ -90,7 +90,7 @@ public: | |||
|    bool Parse(std::istream& is); | ||||
| 
 | ||||
|    static std::shared_ptr<VolumeCoveragePatternData> | ||||
|    Create(MessageHeader&& header, std::istream& is); | ||||
|    Create(Level2MessageHeader&& header, std::istream& is); | ||||
| 
 | ||||
| private: | ||||
|    std::unique_ptr<VolumeCoveragePatternDataImpl> p; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat