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

@ -34,6 +34,12 @@ size_t TextProductFile::message_count() const
return p->messages_.size();
}
std::vector<std::shared_ptr<TextProductMessage>>
TextProductFile::messages() const
{
return p->messages_;
}
std::shared_ptr<TextProductMessage> TextProductFile::message(size_t i) const
{
return p->messages_[i];

View file

@ -1,7 +1,4 @@
#include <scwx/awips/text_product_message.hpp>
#include <scwx/awips/coded_location.hpp>
#include <scwx/awips/coded_time_motion_location.hpp>
#include <scwx/awips/pvtec.hpp>
#include <scwx/common/characters.hpp>
#include <scwx/util/streams.hpp>
@ -24,58 +21,6 @@ static const std::string logPrefix_ = "scwx::awips::text_product_message";
// Look for hhmm (xM|UTC) to key the date/time string
static const std::regex reDateTimeString {"^[0-9]{3,4} ([AP]M|UTC)"};
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;
};
static void ParseCodedInformation(std::shared_ptr<Segment> segment,
const std::string& wfo);
static std::vector<std::string> ParseProductContent(std::istream& is);
@ -113,6 +58,33 @@ std::shared_ptr<WmoHeader> TextProductMessage::wmo_header() const
return p->wmoHeader_;
}
std::vector<std::string> TextProductMessage::mnd_header() const
{
return p->mndHeader_;
}
std::vector<std::string> TextProductMessage::overview_block() const
{
return p->overviewBlock_;
}
size_t TextProductMessage::segment_count() const
{
return p->segments_.size();
}
std::vector<std::shared_ptr<const Segment>> TextProductMessage::segments() const
{
std::vector<std::shared_ptr<const Segment>> segments(p->segments_.cbegin(),
p->segments_.cend());
return segments;
}
std::shared_ptr<const Segment> TextProductMessage::segment(size_t s) const
{
return p->segments_[s];
}
size_t TextProductMessage::data_size() const
{
return 0;