1 #include <marnav/nmea/stalk.hpp>
2 #include <marnav/nmea/io.hpp>
7 constexpr sentence_id
stalk::ID
;
8 constexpr const char * stalk::TAG
;
10 constexpr int stalk::MIN_FIELDS
;
11 constexpr int stalk::MAX_FIELDS
;
14 : sentence(ID
, TAG
, talker::none
)
18 stalk::stalk(talker talk
, fields::const_iterator first
, fields::const_iterator last
)
19 : sentence(ID
, TAG
, talk
)
21 const auto d
= std::distance(first
, last
);
22 if ((d
< MIN_FIELDS
) || (d
> MAX_FIELDS
))
23 throw std::invalid_argument
{"invalid number of fields in stalk"};
27 for (int i
= 0; i
< d
; ++i
) {
28 const auto & s
= *(first
+ i
);
30 throw std::invalid_argument
{"invalid format of payload"};
32 read(s
, b
, data_format::hex
);
37 void stalk::append_data_to(std::string
& s
, const version
&) const
40 throw std::runtime_error
{"invalid number of bytes in data"};
41 for (const auto a
: data_
)
42 append(s
, format(a
, 2, data_format::hex
));
45 void stalk::set_data(const raw
& t
)
47 if ((t
.size() < MIN_FIELDS
) || (t
.size() > MAX_FIELDS
))
48 throw std::invalid_argument
{"invalid number of bytes in data"};