NMEA: remove deprecated type talker_id
[marnav.git] / src / marnav / nmea / vlw.cpp
blobc51534e637b224d4a4b3bb3b840e8e940c7fef71
1 #include <marnav/nmea/vlw.hpp>
2 #include <marnav/nmea/io.hpp>
3 #include "checks.hpp"
5 namespace marnav
7 namespace nmea
9 constexpr sentence_id vlw::ID;
10 constexpr const char * vlw::TAG;
12 vlw::vlw()
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
47 if (!distance_cum_)
48 return {};
49 return {*distance_cum_};
52 utils::optional<units::length> vlw::get_distance_reset() const
54 if (!distance_reset_)
55 return {};
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_));