#pragma once #include #include #include #include #include #include #include #include #include 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::vector ugcString_; Ugc ugc_; std::vector vtecString_; std::vector ugcNames_; std::string issuanceDateTime_; SegmentHeader() : ugcString_ {}, ugc_ {}, 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 header_; std::vector productContent_; std::optional codedLocation_; std::optional 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 { public: explicit TextProductMessage(); ~TextProductMessage(); TextProductMessage(const TextProductMessage&) = delete; TextProductMessage& operator=(const TextProductMessage&) = delete; TextProductMessage(TextProductMessage&&) noexcept; TextProductMessage& operator=(TextProductMessage&&) noexcept; std::string message_content() const; std::shared_ptr wmo_header() const; std::vector mnd_header() const; std::vector overview_block() const; size_t segment_count() const; std::vector> segments() const; std::shared_ptr segment(size_t s) const; size_t data_size() const; bool Parse(std::istream& is) override; static std::shared_ptr Create(std::istream& is); private: std::unique_ptr p; }; } // namespace awips } // namespace scwx