Refactoring, making level 2 message classes more explicitly named

This commit is contained in:
Dan Paulat 2021-12-23 11:55:26 -06:00
parent cae04fad37
commit a280f37289
23 changed files with 236 additions and 155 deletions

View file

@ -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

View file

@ -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;

View file

@ -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;

View 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

View 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

View file

@ -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

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;