1 #include <marnav/nmea/stalk.hpp>
2 #include <marnav/nmea/io.hpp>
9 constexpr sentence_id
stalk::ID
;
10 constexpr const char * stalk::TAG
;
12 constexpr int stalk::MIN_FIELDS
;
13 constexpr int stalk::MAX_FIELDS
;
16 : sentence(ID
, TAG
, talker::none
)
20 stalk::stalk(talker talk
, fields::const_iterator first
, fields::const_iterator last
)
21 : sentence(ID
, TAG
, talk
)
23 const auto d
= std::distance(first
, last
);
24 if ((d
< MIN_FIELDS
) || (d
> MAX_FIELDS
))
25 throw std::invalid_argument
{"invalid number of fields in stalk"};
29 for (int i
= 0; i
< d
; ++i
) {
30 const auto & s
= *(first
+ i
);
32 throw std::invalid_argument
{"invalid format of payload"};
34 read(s
, b
, data_format::hex
);
39 void stalk::append_data_to(std::string
& s
) const
42 throw std::runtime_error
{"invalid number of bytes in data"};
43 for (const auto a
: data_
)
44 append(s
, format(a
, 2, data_format::hex
));
47 void stalk::set_data(const raw
& t
)
49 if ((t
.size() < MIN_FIELDS
) || (t
.size() > MAX_FIELDS
))
50 throw std::invalid_argument
{"invalid number of bytes in data"};