mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 20:40:04 +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,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,123 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include <scwx/wsr88d/rda/message_header.hpp>
|
||||
|
||||
#include <array>
|
||||
#include <execution>
|
||||
#include <istream>
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
#ifdef WIN32
|
||||
# include <WinSock2.h>
|
||||
#else
|
||||
# include <arpa/inet.h>
|
||||
#endif
|
||||
|
||||
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 ValidateMessage(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;
|
||||
|
||||
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, ' ');
|
||||
is.read(reinterpret_cast<char*>(&data[0]), 4);
|
||||
value = (data.at(0) == 'T');
|
||||
}
|
||||
|
||||
static void ReadChar(std::istream& is, char& value)
|
||||
{
|
||||
std::string data(4, ' ');
|
||||
is.read(reinterpret_cast<char*>(&data[0]), 4);
|
||||
value = data.at(0);
|
||||
}
|
||||
|
||||
static float SwapFloat(float f)
|
||||
{
|
||||
return ntohf(*reinterpret_cast<uint32_t*>(&f));
|
||||
}
|
||||
|
||||
template<size_t _Size>
|
||||
static void SwapArray(std::array<float, _Size>& arr, size_t size = _Size)
|
||||
{
|
||||
std::transform(std::execution::par_unseq,
|
||||
arr.begin(),
|
||||
arr.begin() + size,
|
||||
arr.begin(),
|
||||
[](float f) { return SwapFloat(f); });
|
||||
}
|
||||
|
||||
template<size_t _Size>
|
||||
static void SwapArray(std::array<uint16_t, _Size>& arr, size_t size = _Size)
|
||||
{
|
||||
std::transform(std::execution::par_unseq,
|
||||
arr.begin(),
|
||||
arr.begin() + size,
|
||||
arr.begin(),
|
||||
[](uint16_t u) { return ntohs(u); });
|
||||
}
|
||||
|
||||
template<size_t _Size>
|
||||
static void SwapArray(std::array<uint32_t, _Size>& arr, size_t size = _Size)
|
||||
{
|
||||
std::transform(std::execution::par_unseq,
|
||||
arr.begin(),
|
||||
arr.begin() + size,
|
||||
arr.begin(),
|
||||
[](uint32_t u) { return ntohl(u); });
|
||||
}
|
||||
|
||||
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);
|
||||
});
|
||||
}
|
||||
|
||||
static void SwapVector(std::vector<uint16_t>& v)
|
||||
{
|
||||
std::transform(std::execution::par_unseq,
|
||||
v.begin(),
|
||||
v.end(),
|
||||
v.begin(),
|
||||
[](uint16_t u) { return ntohs(u); });
|
||||
}
|
||||
|
||||
private:
|
||||
std::unique_ptr<MessageImpl> p;
|
||||
};
|
||||
|
||||
} // namespace rda
|
||||
} // namespace wsr88d
|
||||
} // namespace scwx
|
||||
|
|
@ -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