mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 15: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;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#include <scwx/wsr88d/ar2v_file.hpp>
|
||||
#include <scwx/wsr88d/rda/message_factory.hpp>
|
||||
#include <scwx/wsr88d/rda/level2_message_factory.hpp>
|
||||
#include <scwx/wsr88d/rda/types.hpp>
|
||||
#include <scwx/util/rangebuf.hpp>
|
||||
#include <scwx/util/time.hpp>
|
||||
|
|
@ -35,7 +35,7 @@ public:
|
|||
index_ {} {};
|
||||
~Ar2vFileImpl() = default;
|
||||
|
||||
void HandleMessage(std::shared_ptr<rda::Message>& message);
|
||||
void HandleMessage(std::shared_ptr<rda::Level2Message>& message);
|
||||
void IndexFile();
|
||||
void LoadLDMRecords(std::ifstream& f);
|
||||
void ParseLDMRecords();
|
||||
|
|
@ -291,7 +291,7 @@ void Ar2vFileImpl::ParseLDMRecords()
|
|||
|
||||
while (!ss.eof())
|
||||
{
|
||||
rda::MessageInfo msgInfo = rda::MessageFactory::Create(ss);
|
||||
rda::Level2MessageInfo msgInfo = rda::Level2MessageFactory::Create(ss);
|
||||
if (!msgInfo.headerValid)
|
||||
{
|
||||
// Invalid message
|
||||
|
|
@ -329,7 +329,7 @@ void Ar2vFileImpl::ParseLDMRecords()
|
|||
rawRecords_.clear();
|
||||
}
|
||||
|
||||
void Ar2vFileImpl::HandleMessage(std::shared_ptr<rda::Message>& message)
|
||||
void Ar2vFileImpl::HandleMessage(std::shared_ptr<rda::Level2Message>& message)
|
||||
{
|
||||
switch (message->header().message_type())
|
||||
{
|
||||
|
|
|
|||
24
wxdata/source/scwx/wsr88d/message.cpp
Normal file
24
wxdata/source/scwx/wsr88d/message.cpp
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
#include <scwx/wsr88d/message.hpp>
|
||||
|
||||
namespace scwx
|
||||
{
|
||||
namespace wsr88d
|
||||
{
|
||||
|
||||
static const std::string logPrefix_ = "[scwx::wsr88d::message] ";
|
||||
|
||||
class MessageImpl
|
||||
{
|
||||
public:
|
||||
explicit MessageImpl() {};
|
||||
~MessageImpl() = default;
|
||||
};
|
||||
|
||||
Message::Message() : p(std::make_unique<MessageImpl>()) {}
|
||||
Message::~Message() = default;
|
||||
|
||||
Message::Message(Message&&) noexcept = default;
|
||||
Message& Message::operator=(Message&&) noexcept = default;
|
||||
|
||||
} // namespace wsr88d
|
||||
} // namespace scwx
|
||||
|
|
@ -34,7 +34,7 @@ public:
|
|||
};
|
||||
|
||||
ClutterFilterMap::ClutterFilterMap() :
|
||||
Message(), p(std::make_unique<ClutterFilterMapImpl>())
|
||||
Level2Message(), p(std::make_unique<ClutterFilterMapImpl>())
|
||||
{
|
||||
}
|
||||
ClutterFilterMap::~ClutterFilterMap() = default;
|
||||
|
|
@ -187,7 +187,7 @@ bool ClutterFilterMap::Parse(std::istream& is)
|
|||
}
|
||||
|
||||
std::shared_ptr<ClutterFilterMap>
|
||||
ClutterFilterMap::Create(MessageHeader&& header, std::istream& is)
|
||||
ClutterFilterMap::Create(Level2MessageHeader&& header, std::istream& is)
|
||||
{
|
||||
std::shared_ptr<ClutterFilterMap> message =
|
||||
std::make_shared<ClutterFilterMap>();
|
||||
|
|
|
|||
|
|
@ -540,7 +540,7 @@ public:
|
|||
};
|
||||
|
||||
DigitalRadarData::DigitalRadarData() :
|
||||
Message(), p(std::make_unique<DigitalRadarDataImpl>())
|
||||
Level2Message(), p(std::make_unique<DigitalRadarDataImpl>())
|
||||
{
|
||||
}
|
||||
DigitalRadarData::~DigitalRadarData() = default;
|
||||
|
|
@ -787,7 +787,7 @@ bool DigitalRadarData::Parse(std::istream& is)
|
|||
}
|
||||
|
||||
std::shared_ptr<DigitalRadarData>
|
||||
DigitalRadarData::Create(MessageHeader&& header, std::istream& is)
|
||||
DigitalRadarData::Create(Level2MessageHeader&& header, std::istream& is)
|
||||
{
|
||||
std::shared_ptr<DigitalRadarData> message =
|
||||
std::make_shared<DigitalRadarData>();
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#include <scwx/wsr88d/rda/message.hpp>
|
||||
#include <scwx/wsr88d/rda/level2_message.hpp>
|
||||
|
||||
#include <boost/log/trivial.hpp>
|
||||
|
||||
|
|
@ -9,24 +9,27 @@ namespace wsr88d
|
|||
namespace rda
|
||||
{
|
||||
|
||||
static const std::string logPrefix_ = "[scwx::wsr88d::rda::message] ";
|
||||
static const std::string logPrefix_ = "[scwx::wsr88d::rda::level2_message] ";
|
||||
|
||||
class MessageImpl
|
||||
class Level2MessageImpl
|
||||
{
|
||||
public:
|
||||
explicit MessageImpl() : header_() {};
|
||||
~MessageImpl() = default;
|
||||
explicit Level2MessageImpl() : header_() {};
|
||||
~Level2MessageImpl() = default;
|
||||
|
||||
MessageHeader header_;
|
||||
Level2MessageHeader header_;
|
||||
};
|
||||
|
||||
Message::Message() : p(std::make_unique<MessageImpl>()) {}
|
||||
Message::~Message() = default;
|
||||
Level2Message::Level2Message() :
|
||||
Message(), p(std::make_unique<Level2MessageImpl>())
|
||||
{
|
||||
}
|
||||
Level2Message::~Level2Message() = default;
|
||||
|
||||
Message::Message(Message&&) noexcept = default;
|
||||
Message& Message::operator=(Message&&) noexcept = default;
|
||||
Level2Message::Level2Message(Level2Message&&) noexcept = default;
|
||||
Level2Message& Level2Message::operator=(Level2Message&&) noexcept = default;
|
||||
|
||||
bool Message::ValidateMessage(std::istream& is, size_t bytesRead) const
|
||||
bool Level2Message::ValidateMessage(std::istream& is, size_t bytesRead) const
|
||||
{
|
||||
bool messageValid = true;
|
||||
size_t dataSize = header().message_size() * 2 - header().SIZE;
|
||||
|
|
@ -66,12 +69,12 @@ bool Message::ValidateMessage(std::istream& is, size_t bytesRead) const
|
|||
return messageValid;
|
||||
}
|
||||
|
||||
const MessageHeader& Message::header() const
|
||||
const Level2MessageHeader& Level2Message::header() const
|
||||
{
|
||||
return p->header_;
|
||||
}
|
||||
|
||||
void Message::set_header(MessageHeader&& header)
|
||||
void Level2Message::set_header(Level2MessageHeader&& header)
|
||||
{
|
||||
p->header_ = std::move(header);
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#include <scwx/wsr88d/rda/message_factory.hpp>
|
||||
#include <scwx/wsr88d/rda/level2_message_factory.hpp>
|
||||
|
||||
#include <scwx/util/vectorbuf.hpp>
|
||||
#include <scwx/wsr88d/rda/clutter_filter_map.hpp>
|
||||
|
|
@ -20,12 +20,14 @@ namespace wsr88d
|
|||
namespace rda
|
||||
{
|
||||
|
||||
static const std::string logPrefix_ = "[scwx::wsr88d::rda::message_factory] ";
|
||||
static const std::string logPrefix_ =
|
||||
"[scwx::wsr88d::rda::level2_message_factory] ";
|
||||
|
||||
typedef std::function<std::shared_ptr<Message>(MessageHeader&&, std::istream&)>
|
||||
CreateMessageFunction;
|
||||
typedef std::function<std::shared_ptr<Level2Message>(Level2MessageHeader&&,
|
||||
std::istream&)>
|
||||
CreateLevel2MessageFunction;
|
||||
|
||||
static const std::unordered_map<uint8_t, CreateMessageFunction> create_ {
|
||||
static const std::unordered_map<uint8_t, CreateLevel2MessageFunction> create_ {
|
||||
{2, RdaStatusData::Create},
|
||||
{3, PerformanceMaintenanceData::Create},
|
||||
{5, VolumeCoveragePatternData::Create},
|
||||
|
|
@ -38,10 +40,10 @@ static size_t bufferedSize_;
|
|||
static util::vectorbuf messageBuffer_(messageData_);
|
||||
static std::istream messageBufferStream_(&messageBuffer_);
|
||||
|
||||
MessageInfo MessageFactory::Create(std::istream& is)
|
||||
Level2MessageInfo Level2MessageFactory::Create(std::istream& is)
|
||||
{
|
||||
MessageInfo info;
|
||||
MessageHeader header;
|
||||
Level2MessageInfo info;
|
||||
Level2MessageHeader header;
|
||||
info.headerValid = header.Parse(is);
|
||||
info.messageValid = info.headerValid;
|
||||
|
||||
|
|
@ -58,7 +60,7 @@ MessageInfo MessageFactory::Create(std::istream& is)
|
|||
uint16_t segment = header.message_segment_number();
|
||||
uint16_t totalSegments = header.number_of_message_segments();
|
||||
uint8_t messageType = header.message_type();
|
||||
size_t dataSize = header.message_size() * 2 - MessageHeader::SIZE;
|
||||
size_t dataSize = header.message_size() * 2 - Level2MessageHeader::SIZE;
|
||||
|
||||
std::istream* messageStream = nullptr;
|
||||
|
||||
|
|
@ -110,8 +112,8 @@ MessageInfo MessageFactory::Create(std::istream& is)
|
|||
else if (segment == totalSegments)
|
||||
{
|
||||
messageBuffer_.update_read_pointers(bufferedSize_);
|
||||
header.set_message_size(
|
||||
static_cast<uint16_t>(bufferedSize_ / 2 + MessageHeader::SIZE));
|
||||
header.set_message_size(static_cast<uint16_t>(
|
||||
bufferedSize_ / 2 + Level2MessageHeader::SIZE));
|
||||
|
||||
messageStream = &messageBufferStream_;
|
||||
}
|
||||
|
|
@ -129,7 +131,7 @@ MessageInfo MessageFactory::Create(std::istream& is)
|
|||
else if (info.headerValid)
|
||||
{
|
||||
// Seek to the end of the current message
|
||||
is.seekg(header.message_size() * 2 - rda::MessageHeader::SIZE,
|
||||
is.seekg(header.message_size() * 2 - rda::Level2MessageHeader::SIZE,
|
||||
std::ios_base::cur);
|
||||
}
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#include <scwx/wsr88d/rda/message_header.hpp>
|
||||
#include <scwx/wsr88d/rda/level2_message_header.hpp>
|
||||
|
||||
#include <istream>
|
||||
#include <string>
|
||||
|
|
@ -18,12 +18,13 @@ namespace wsr88d
|
|||
namespace rda
|
||||
{
|
||||
|
||||
static const std::string logPrefix_ = "[scwx::wsr88d::rda::message_header] ";
|
||||
static const std::string logPrefix_ =
|
||||
"[scwx::wsr88d::rda::level2_message_header] ";
|
||||
|
||||
class MessageHeaderImpl
|
||||
class Level2MessageHeaderImpl
|
||||
{
|
||||
public:
|
||||
explicit MessageHeaderImpl() :
|
||||
explicit Level2MessageHeaderImpl() :
|
||||
messageSize_(),
|
||||
rdaRedundantChannel_(),
|
||||
messageType_(),
|
||||
|
|
@ -32,7 +33,7 @@ public:
|
|||
millisecondsOfDay_(),
|
||||
numberOfMessageSegments_(),
|
||||
messageSegmentNumber_() {};
|
||||
~MessageHeaderImpl() = default;
|
||||
~Level2MessageHeaderImpl() = default;
|
||||
|
||||
uint16_t messageSize_;
|
||||
uint8_t rdaRedundantChannel_;
|
||||
|
|
@ -44,58 +45,63 @@ public:
|
|||
uint16_t messageSegmentNumber_;
|
||||
};
|
||||
|
||||
MessageHeader::MessageHeader() : p(std::make_unique<MessageHeaderImpl>()) {}
|
||||
MessageHeader::~MessageHeader() = default;
|
||||
Level2MessageHeader::Level2MessageHeader() :
|
||||
p(std::make_unique<Level2MessageHeaderImpl>())
|
||||
{
|
||||
}
|
||||
Level2MessageHeader::~Level2MessageHeader() = default;
|
||||
|
||||
MessageHeader::MessageHeader(MessageHeader&&) noexcept = default;
|
||||
MessageHeader& MessageHeader::operator=(MessageHeader&&) noexcept = default;
|
||||
Level2MessageHeader::Level2MessageHeader(Level2MessageHeader&&) noexcept =
|
||||
default;
|
||||
Level2MessageHeader&
|
||||
Level2MessageHeader::operator=(Level2MessageHeader&&) noexcept = default;
|
||||
|
||||
uint16_t MessageHeader::message_size() const
|
||||
uint16_t Level2MessageHeader::message_size() const
|
||||
{
|
||||
return p->messageSize_;
|
||||
}
|
||||
|
||||
uint8_t MessageHeader::rda_redundant_channel() const
|
||||
uint8_t Level2MessageHeader::rda_redundant_channel() const
|
||||
{
|
||||
return p->rdaRedundantChannel_;
|
||||
}
|
||||
|
||||
uint8_t MessageHeader::message_type() const
|
||||
uint8_t Level2MessageHeader::message_type() const
|
||||
{
|
||||
return p->messageType_;
|
||||
}
|
||||
|
||||
uint16_t MessageHeader::id_sequence_number() const
|
||||
uint16_t Level2MessageHeader::id_sequence_number() const
|
||||
{
|
||||
return p->idSequenceNumber_;
|
||||
}
|
||||
|
||||
uint16_t MessageHeader::julian_date() const
|
||||
uint16_t Level2MessageHeader::julian_date() const
|
||||
{
|
||||
return p->julianDate_;
|
||||
}
|
||||
|
||||
uint32_t MessageHeader::milliseconds_of_day() const
|
||||
uint32_t Level2MessageHeader::milliseconds_of_day() const
|
||||
{
|
||||
return p->millisecondsOfDay_;
|
||||
}
|
||||
|
||||
uint16_t MessageHeader::number_of_message_segments() const
|
||||
uint16_t Level2MessageHeader::number_of_message_segments() const
|
||||
{
|
||||
return p->numberOfMessageSegments_;
|
||||
}
|
||||
|
||||
uint16_t MessageHeader::message_segment_number() const
|
||||
uint16_t Level2MessageHeader::message_segment_number() const
|
||||
{
|
||||
return p->messageSegmentNumber_;
|
||||
}
|
||||
|
||||
void MessageHeader::set_message_size(uint16_t messageSize)
|
||||
void Level2MessageHeader::set_message_size(uint16_t messageSize)
|
||||
{
|
||||
p->messageSize_ = messageSize;
|
||||
}
|
||||
|
||||
bool MessageHeader::Parse(std::istream& is)
|
||||
bool Level2MessageHeader::Parse(std::istream& is)
|
||||
{
|
||||
bool headerValid = true;
|
||||
|
||||
|
|
@ -550,7 +550,7 @@ public:
|
|||
};
|
||||
|
||||
PerformanceMaintenanceData::PerformanceMaintenanceData() :
|
||||
Message(), p(std::make_unique<PerformanceMaintenanceDataImpl>())
|
||||
Level2Message(), p(std::make_unique<PerformanceMaintenanceDataImpl>())
|
||||
{
|
||||
}
|
||||
PerformanceMaintenanceData::~PerformanceMaintenanceData() = default;
|
||||
|
|
@ -2469,7 +2469,8 @@ bool PerformanceMaintenanceData::Parse(std::istream& is)
|
|||
}
|
||||
|
||||
std::shared_ptr<PerformanceMaintenanceData>
|
||||
PerformanceMaintenanceData::Create(MessageHeader&& header, std::istream& is)
|
||||
PerformanceMaintenanceData::Create(Level2MessageHeader&& header,
|
||||
std::istream& is)
|
||||
{
|
||||
std::shared_ptr<PerformanceMaintenanceData> message =
|
||||
std::make_shared<PerformanceMaintenanceData>();
|
||||
|
|
|
|||
|
|
@ -369,7 +369,7 @@ public:
|
|||
};
|
||||
|
||||
RdaAdaptationData::RdaAdaptationData() :
|
||||
Message(), p(std::make_unique<RdaAdaptationDataImpl>())
|
||||
Level2Message(), p(std::make_unique<RdaAdaptationDataImpl>())
|
||||
{
|
||||
}
|
||||
RdaAdaptationData::~RdaAdaptationData() = default;
|
||||
|
|
@ -1747,7 +1747,7 @@ bool RdaAdaptationData::Parse(std::istream& is)
|
|||
}
|
||||
|
||||
std::shared_ptr<RdaAdaptationData>
|
||||
RdaAdaptationData::Create(MessageHeader&& header, std::istream& is)
|
||||
RdaAdaptationData::Create(Level2MessageHeader&& header, std::istream& is)
|
||||
{
|
||||
std::shared_ptr<RdaAdaptationData> message =
|
||||
std::make_shared<RdaAdaptationData>();
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ public:
|
|||
};
|
||||
|
||||
RdaStatusData::RdaStatusData() :
|
||||
Message(), p(std::make_unique<RdaStatusDataImpl>())
|
||||
Level2Message(), p(std::make_unique<RdaStatusDataImpl>())
|
||||
{
|
||||
}
|
||||
RdaStatusData::~RdaStatusData() = default;
|
||||
|
|
@ -322,8 +322,8 @@ bool RdaStatusData::Parse(std::istream& is)
|
|||
return messageValid;
|
||||
}
|
||||
|
||||
std::shared_ptr<RdaStatusData> RdaStatusData::Create(MessageHeader&& header,
|
||||
std::istream& is)
|
||||
std::shared_ptr<RdaStatusData>
|
||||
RdaStatusData::Create(Level2MessageHeader&& header, std::istream& is)
|
||||
{
|
||||
std::shared_ptr<RdaStatusData> message = std::make_shared<RdaStatusData>();
|
||||
message->set_header(std::move(header));
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ public:
|
|||
};
|
||||
|
||||
VolumeCoveragePatternData::VolumeCoveragePatternData() :
|
||||
Message(), p(std::make_unique<VolumeCoveragePatternDataImpl>())
|
||||
Level2Message(), p(std::make_unique<VolumeCoveragePatternDataImpl>())
|
||||
{
|
||||
}
|
||||
VolumeCoveragePatternData::~VolumeCoveragePatternData() = default;
|
||||
|
|
@ -503,7 +503,8 @@ bool VolumeCoveragePatternData::Parse(std::istream& is)
|
|||
}
|
||||
|
||||
std::shared_ptr<VolumeCoveragePatternData>
|
||||
VolumeCoveragePatternData::Create(MessageHeader&& header, std::istream& is)
|
||||
VolumeCoveragePatternData::Create(Level2MessageHeader&& header,
|
||||
std::istream& is)
|
||||
{
|
||||
std::shared_ptr<VolumeCoveragePatternData> message =
|
||||
std::make_shared<VolumeCoveragePatternData>();
|
||||
|
|
|
|||
|
|
@ -21,13 +21,15 @@ set(SRC_UTIL source/scwx/util/rangebuf.cpp
|
|||
source/scwx/util/streams.cpp
|
||||
source/scwx/util/time.cpp
|
||||
source/scwx/util/vectorbuf.cpp)
|
||||
set(HDR_WSR88D include/scwx/wsr88d/ar2v_file.hpp)
|
||||
set(SRC_WSR88D source/scwx/wsr88d/ar2v_file.cpp)
|
||||
set(HDR_WSR88D include/scwx/wsr88d/ar2v_file.hpp
|
||||
include/scwx/wsr88d/message.hpp)
|
||||
set(SRC_WSR88D source/scwx/wsr88d/ar2v_file.cpp
|
||||
source/scwx/wsr88d/message.cpp)
|
||||
set(HDR_WSR88D_RDA include/scwx/wsr88d/rda/clutter_filter_map.hpp
|
||||
include/scwx/wsr88d/rda/digital_radar_data.hpp
|
||||
include/scwx/wsr88d/rda/message.hpp
|
||||
include/scwx/wsr88d/rda/message_factory.hpp
|
||||
include/scwx/wsr88d/rda/message_header.hpp
|
||||
include/scwx/wsr88d/rda/level2_message.hpp
|
||||
include/scwx/wsr88d/rda/level2_message_factory.hpp
|
||||
include/scwx/wsr88d/rda/level2_message_header.hpp
|
||||
include/scwx/wsr88d/rda/performance_maintenance_data.hpp
|
||||
include/scwx/wsr88d/rda/rda_adaptation_data.hpp
|
||||
include/scwx/wsr88d/rda/rda_status_data.hpp
|
||||
|
|
@ -35,9 +37,9 @@ set(HDR_WSR88D_RDA include/scwx/wsr88d/rda/clutter_filter_map.hpp
|
|||
include/scwx/wsr88d/rda/volume_coverage_pattern_data.hpp)
|
||||
set(SRC_WSR88D_RDA source/scwx/wsr88d/rda/clutter_filter_map.cpp
|
||||
source/scwx/wsr88d/rda/digital_radar_data.cpp
|
||||
source/scwx/wsr88d/rda/message.cpp
|
||||
source/scwx/wsr88d/rda/message_factory.cpp
|
||||
source/scwx/wsr88d/rda/message_header.cpp
|
||||
source/scwx/wsr88d/rda/level2_message.cpp
|
||||
source/scwx/wsr88d/rda/level2_message_factory.cpp
|
||||
source/scwx/wsr88d/rda/level2_message_header.cpp
|
||||
source/scwx/wsr88d/rda/performance_maintenance_data.cpp
|
||||
source/scwx/wsr88d/rda/rda_adaptation_data.cpp
|
||||
source/scwx/wsr88d/rda/rda_status_data.cpp
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue