mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 13:30: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
|
|
@ -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