mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 04:50:06 +00:00 
			
		
		
		
	Parse Clutter Filter Map (Message 15)
This commit is contained in:
		
							parent
							
								
									f36d57b71d
								
							
						
					
					
						commit
						3ab4ec4b9b
					
				
					 15 changed files with 682 additions and 22 deletions
				
			
		
							
								
								
									
										27
									
								
								wxdata/include/scwx/util/vectorbuf.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								wxdata/include/scwx/util/vectorbuf.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <streambuf> | ||||
| #include <vector> | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
| namespace util | ||||
| { | ||||
| 
 | ||||
| class vectorbuf : public std::streambuf | ||||
| { | ||||
| public: | ||||
|    vectorbuf(std::vector<char>& v); | ||||
|    ~vectorbuf() = default; | ||||
| 
 | ||||
|    vectorbuf(const vectorbuf&) = delete; | ||||
|    vectorbuf& operator=(const vectorbuf&) = delete; | ||||
| 
 | ||||
|    void update_read_pointers(size_t size); | ||||
| 
 | ||||
| private: | ||||
|    std::vector<char>& v_; | ||||
| }; | ||||
| 
 | ||||
| } // namespace util
 | ||||
| } // namespace scwx
 | ||||
|  | @ -25,7 +25,7 @@ public: | |||
|    Ar2vFile& operator=(const Ar2vFile&) = delete; | ||||
| 
 | ||||
|    Ar2vFile(Ar2vFile&&) noexcept; | ||||
|    Ar2vFile& operator=(Ar2vFile&&); | ||||
|    Ar2vFile& operator=(Ar2vFile&&) noexcept; | ||||
| 
 | ||||
|    bool LoadFile(const std::string& filename); | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										46
									
								
								wxdata/include/scwx/wsr88d/rda/clutter_filter_map.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								wxdata/include/scwx/wsr88d/rda/clutter_filter_map.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,46 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <scwx/wsr88d/rda/message.hpp> | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
| namespace wsr88d | ||||
| { | ||||
| namespace rda | ||||
| { | ||||
| 
 | ||||
| class ClutterFilterMapImpl; | ||||
| 
 | ||||
| class ClutterFilterMap : public Message | ||||
| { | ||||
| public: | ||||
|    explicit ClutterFilterMap(); | ||||
|    ~ClutterFilterMap(); | ||||
| 
 | ||||
|    ClutterFilterMap(const Message&) = delete; | ||||
|    ClutterFilterMap& operator=(const ClutterFilterMap&) = delete; | ||||
| 
 | ||||
|    ClutterFilterMap(ClutterFilterMap&&) noexcept; | ||||
|    ClutterFilterMap& operator=(ClutterFilterMap&&) noexcept; | ||||
| 
 | ||||
|    uint16_t map_generation_date() const; | ||||
|    uint16_t map_generation_time() const; | ||||
|    uint16_t number_of_elevation_segments() const; | ||||
|    uint16_t number_of_range_zones(uint16_t e, uint16_t a) const; | ||||
|    uint16_t op_code(uint16_t e, uint16_t a, uint16_t z) const; | ||||
|    uint16_t end_range(uint16_t e, uint16_t a, uint16_t z) const; | ||||
| 
 | ||||
|    bool Parse(std::istream& is); | ||||
| 
 | ||||
|    static std::unique_ptr<ClutterFilterMap> Create(MessageHeader&& header, | ||||
|                                                    std::istream&   is); | ||||
| 
 | ||||
|    static const size_t NUM_AZIMUTH_SEGMENTS = 360u; | ||||
| 
 | ||||
| private: | ||||
|    std::unique_ptr<ClutterFilterMapImpl> p; | ||||
| }; | ||||
| 
 | ||||
| } // namespace rda
 | ||||
| } // namespace wsr88d
 | ||||
| } // namespace scwx
 | ||||
							
								
								
									
										42
									
								
								wxdata/include/scwx/wsr88d/rda/message.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								wxdata/include/scwx/wsr88d/rda/message.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,42 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <scwx/wsr88d/rda/message_header.hpp> | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
| namespace wsr88d | ||||
| { | ||||
| namespace rda | ||||
| { | ||||
| 
 | ||||
| class MessageImpl; | ||||
| 
 | ||||
| class Message | ||||
| { | ||||
| protected: | ||||
|    explicit Message(); | ||||
| 
 | ||||
|    Message(const Message&) = delete; | ||||
|    Message& operator=(const Message&) = delete; | ||||
| 
 | ||||
|    Message(Message&&) noexcept; | ||||
|    Message& operator=(Message&&) noexcept; | ||||
| 
 | ||||
|    bool ValidateSize(std::istream& is, size_t bytesRead) const; | ||||
| 
 | ||||
| public: | ||||
|    virtual ~Message(); | ||||
| 
 | ||||
|    const MessageHeader& header() const; | ||||
| 
 | ||||
|    void set_header(MessageHeader&& header); | ||||
| 
 | ||||
|    virtual bool Parse(std::istream& is) = 0; | ||||
| 
 | ||||
| private: | ||||
|    std::unique_ptr<MessageImpl> p; | ||||
| }; | ||||
| 
 | ||||
| } // namespace rda
 | ||||
| } // namespace wsr88d
 | ||||
| } // namespace scwx
 | ||||
							
								
								
									
										39
									
								
								wxdata/include/scwx/wsr88d/rda/message_factory.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								wxdata/include/scwx/wsr88d/rda/message_factory.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,39 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <scwx/wsr88d/rda/message.hpp> | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
| namespace wsr88d | ||||
| { | ||||
| namespace rda | ||||
| { | ||||
| 
 | ||||
| struct MessageInfo | ||||
| { | ||||
|    std::unique_ptr<Message> message; | ||||
|    bool                     headerValid; | ||||
|    bool                     messageValid; | ||||
| 
 | ||||
|    MessageInfo() : message(nullptr), headerValid(false), messageValid(false) {} | ||||
| }; | ||||
| 
 | ||||
| class MessageFactory | ||||
| { | ||||
| private: | ||||
|    explicit MessageFactory() = delete; | ||||
|    ~MessageFactory()         = delete; | ||||
| 
 | ||||
|    MessageFactory(const Message&) = 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,3 +1,5 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <cstdint> | ||||
| #include <memory> | ||||
| 
 | ||||
|  | @ -20,7 +22,7 @@ public: | |||
|    MessageHeader& operator=(const MessageHeader&) = delete; | ||||
| 
 | ||||
|    MessageHeader(MessageHeader&&) noexcept; | ||||
|    MessageHeader& operator=(MessageHeader&&); | ||||
|    MessageHeader& operator=(MessageHeader&&) noexcept; | ||||
| 
 | ||||
|    uint16_t message_size() const; | ||||
|    uint8_t  rda_redundant_channel() const; | ||||
|  | @ -31,6 +33,8 @@ public: | |||
|    uint16_t number_of_message_segments() const; | ||||
|    uint16_t message_segment_number() const; | ||||
| 
 | ||||
|    void set_message_size(uint16_t messageSize); | ||||
| 
 | ||||
|    bool Parse(std::istream& is); | ||||
| 
 | ||||
|    static const size_t SIZE = 16u; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat