1 #include <marnav/nmea/vlw.hpp>
2 #include <marnav/nmea/io.hpp>
9 constexpr sentence_id
vlw::ID
;
10 constexpr const char * vlw::TAG
;
13 : sentence(ID
, TAG
, talker::integrated_instrumentation
)
17 vlw::vlw(talker talk
, fields::const_iterator first
, fields::const_iterator last
)
18 : sentence(ID
, TAG
, talk
)
20 if (std::distance(first
, last
) != 4)
21 throw std::invalid_argument
{"invalid number of fields in vlw"};
23 utils::optional
<unit::distance
> distance_cum_unit
;
24 utils::optional
<unit::distance
> distance_reset_unit
;
26 read(*(first
+ 0), distance_cum_
);
27 read(*(first
+ 1), distance_cum_unit
);
28 read(*(first
+ 2), distance_reset_
);
29 read(*(first
+ 3), distance_reset_unit
);
31 check_value(distance_cum_unit
, {unit::distance::nm
}, "distance_cum_unit");
32 check_value(distance_reset_unit
, {unit::distance::nm
}, "distance_reset_unit");
35 void vlw::set_distance_cum_nm(units::length t
) noexcept
37 distance_cum_
= t
.get
<units::nautical_miles
>();
40 void vlw::set_distance_reset_nm(units::length t
) noexcept
42 distance_reset_
= t
.get
<units::nautical_miles
>();
45 utils::optional
<units::length
> vlw::get_distance_cum() const
49 return {*distance_cum_
};
52 utils::optional
<units::length
> vlw::get_distance_reset() const
56 return {*distance_reset_
};
59 void vlw::append_data_to(std::string
& s
) const
61 append(s
, to_string(distance_cum_
));
62 append(s
, to_string_if(unit::distance::nm
, distance_cum_
));
63 append(s
, to_string(distance_reset_
));
64 append(s
, to_string_if(unit::distance::nm
, distance_reset_
));