Refactoring to unique product message types, in order to support more products

This commit is contained in:
Dan Paulat 2022-01-13 02:05:56 -06:00
parent 235c060b17
commit dc545f19e9
11 changed files with 742 additions and 177 deletions

View file

@ -1,7 +1,6 @@
#pragma once
#include <scwx/wsr88d/rpg/level3_message_header.hpp>
#include <scwx/wsr88d/rpg/product_symbology_block.hpp>
#include <scwx/wsr88d/rpg/level3_message.hpp>
#include <memory>
#include <string>
@ -25,8 +24,7 @@ public:
Level3File(Level3File&&) noexcept;
Level3File& operator=(Level3File&&) noexcept;
std::shared_ptr<rpg::Level3MessageHeader> message_header() const;
std::shared_ptr<rpg::ProductSymbologyBlock> product_symbology_block() const;
std::shared_ptr<rpg::Level3Message> message() const;
bool LoadFile(const std::string& filename);
bool LoadData(std::istream& is);

View file

@ -0,0 +1,49 @@
#pragma once
#include <scwx/wsr88d/rpg/graphic_alphanumeric_block.hpp>
#include <scwx/wsr88d/rpg/level3_message.hpp>
#include <scwx/wsr88d/rpg/product_description_block.hpp>
#include <scwx/wsr88d/rpg/product_symbology_block.hpp>
#include <scwx/wsr88d/rpg/tabular_alphanumeric_block.hpp>
#include <cstdint>
#include <memory>
namespace scwx
{
namespace wsr88d
{
namespace rpg
{
class GraphicProductMessageImpl;
class GraphicProductMessage : public Level3Message
{
public:
explicit GraphicProductMessage();
~GraphicProductMessage();
GraphicProductMessage(const GraphicProductMessage&) = delete;
GraphicProductMessage& operator=(const GraphicProductMessage&) = delete;
GraphicProductMessage(GraphicProductMessage&&) noexcept;
GraphicProductMessage& operator=(GraphicProductMessage&&) noexcept;
std::shared_ptr<ProductDescriptionBlock> description_block() const;
std::shared_ptr<ProductSymbologyBlock> symbology_block() const;
std::shared_ptr<GraphicAlphanumericBlock> graphic_block() const;
std::shared_ptr<TabularAlphanumericBlock> tabular_block() const;
bool Parse(std::istream& is) override;
static std::shared_ptr<GraphicProductMessage>
Create(Level3MessageHeader&& header, std::istream& is);
private:
std::unique_ptr<GraphicProductMessageImpl> p;
};
} // namespace rpg
} // namespace wsr88d
} // namespace scwx

View file

@ -0,0 +1,41 @@
#pragma once
#include <scwx/wsr88d/rpg/level3_message_header.hpp>
#include <scwx/wsr88d/message.hpp>
namespace scwx
{
namespace wsr88d
{
namespace rpg
{
class Level3MessageImpl;
class Level3Message : public Message
{
protected:
explicit Level3Message();
Level3Message(const Level3Message&) = delete;
Level3Message& operator=(const Level3Message&) = delete;
Level3Message(Level3Message&&) noexcept;
Level3Message& operator=(Level3Message&&) noexcept;
public:
virtual ~Level3Message();
size_t data_size() const override;
const Level3MessageHeader& header() const;
void set_header(Level3MessageHeader&& header);
private:
std::unique_ptr<Level3MessageImpl> p;
};
} // namespace rpg
} // namespace wsr88d
} // namespace scwx

View file

@ -0,0 +1,30 @@
#pragma once
#include <scwx/wsr88d/rpg/level3_message.hpp>
namespace scwx
{
namespace wsr88d
{
namespace rpg
{
class Level3MessageFactory
{
private:
explicit Level3MessageFactory() = delete;
~Level3MessageFactory() = delete;
Level3MessageFactory(const Level3MessageFactory&) = delete;
Level3MessageFactory& operator=(const Level3MessageFactory&) = delete;
Level3MessageFactory(Level3MessageFactory&&) noexcept = delete;
Level3MessageFactory& operator=(Level3MessageFactory&&) noexcept = delete;
public:
static std::shared_ptr<Level3Message> Create(std::istream& is);
};
} // namespace rpg
} // namespace wsr88d
} // namespace scwx

View file

@ -0,0 +1,45 @@
#pragma once
#include <scwx/wsr88d/rpg/level3_message.hpp>
#include <scwx/wsr88d/rpg/product_description_block.hpp>
#include <scwx/wsr88d/rpg/tabular_alphanumeric_block.hpp>
#include <cstdint>
#include <memory>
namespace scwx
{
namespace wsr88d
{
namespace rpg
{
class TabularProductMessageImpl;
class TabularProductMessage : public Level3Message
{
public:
explicit TabularProductMessage();
~TabularProductMessage();
TabularProductMessage(const TabularProductMessage&) = delete;
TabularProductMessage& operator=(const TabularProductMessage&) = delete;
TabularProductMessage(TabularProductMessage&&) noexcept;
TabularProductMessage& operator=(TabularProductMessage&&) noexcept;
std::shared_ptr<ProductDescriptionBlock> description_block() const;
std::shared_ptr<TabularAlphanumericBlock> tabular_block() const;
bool Parse(std::istream& is) override;
static std::shared_ptr<TabularProductMessage>
Create(Level3MessageHeader&& header, std::istream& is);
private:
std::unique_ptr<TabularProductMessageImpl> p;
};
} // namespace rpg
} // namespace wsr88d
} // namespace scwx