Exposing additional data from text products and messages

This commit is contained in:
Dan Paulat 2022-10-12 00:12:53 -05:00
parent 917926a0ec
commit 3ae001c3b9
4 changed files with 100 additions and 60 deletions

View file

@ -18,14 +18,15 @@ public:
explicit TextProductFile();
~TextProductFile();
TextProductFile(const TextProductFile&) = delete;
TextProductFile(const TextProductFile&) = delete;
TextProductFile& operator=(const TextProductFile&) = delete;
TextProductFile(TextProductFile&&) noexcept;
TextProductFile& operator=(TextProductFile&&) noexcept;
size_t message_count() const;
std::shared_ptr<TextProductMessage> message(size_t i) const;
size_t message_count() const;
std::vector<std::shared_ptr<TextProductMessage>> messages() const;
std::shared_ptr<TextProductMessage> message(size_t i) const;
bool LoadFile(const std::string& filename);
bool LoadData(std::istream& is);

View file

@ -1,16 +1,72 @@
#pragma once
#include <scwx/awips/coded_location.hpp>
#include <scwx/awips/coded_time_motion_location.hpp>
#include <scwx/awips/pvtec.hpp>
#include <scwx/awips/message.hpp>
#include <scwx/awips/wmo_header.hpp>
#include <cstdint>
#include <memory>
#include <string>
namespace scwx
{
namespace awips
{
struct Vtec
{
PVtec pVtec_;
std::string hVtec_;
Vtec() : pVtec_ {}, hVtec_ {} {}
Vtec(const Vtec&) = delete;
Vtec& operator=(const Vtec&) = delete;
Vtec(Vtec&&) noexcept = default;
Vtec& operator=(Vtec&&) noexcept = default;
};
struct SegmentHeader
{
std::string ugcString_;
std::vector<Vtec> vtecString_;
std::vector<std::string> ugcNames_;
std::string issuanceDateTime_;
SegmentHeader() :
ugcString_ {}, vtecString_ {}, ugcNames_ {}, issuanceDateTime_ {}
{
}
SegmentHeader(const SegmentHeader&) = delete;
SegmentHeader& operator=(const SegmentHeader&) = delete;
SegmentHeader(SegmentHeader&&) noexcept = default;
SegmentHeader& operator=(SegmentHeader&&) noexcept = default;
};
struct Segment
{
std::optional<SegmentHeader> header_;
std::vector<std::string> productContent_;
std::optional<CodedLocation> codedLocation_;
std::optional<CodedTimeMotionLocation> codedMotion_;
Segment() :
header_ {}, productContent_ {}, codedLocation_ {}, codedMotion_ {}
{
}
Segment(const Segment&) = delete;
Segment& operator=(const Segment&) = delete;
Segment(Segment&&) noexcept = default;
Segment& operator=(Segment&&) noexcept = default;
};
class TextProductMessageImpl;
class TextProductMessage : public Message
@ -19,13 +75,18 @@ public:
explicit TextProductMessage();
~TextProductMessage();
TextProductMessage(const TextProductMessage&) = delete;
TextProductMessage(const TextProductMessage&) = delete;
TextProductMessage& operator=(const TextProductMessage&) = delete;
TextProductMessage(TextProductMessage&&) noexcept;
TextProductMessage& operator=(TextProductMessage&&) noexcept;
std::shared_ptr<WmoHeader> wmo_header() const;
std::shared_ptr<WmoHeader> wmo_header() const;
std::vector<std::string> mnd_header() const;
std::vector<std::string> overview_block() const;
size_t segment_count() const;
std::vector<std::shared_ptr<const Segment>> segments() const;
std::shared_ptr<const Segment> segment(size_t s) const;
size_t data_size() const;