NMEA: remove deprecated type talker_id
[marnav.git] / src / marnav / nmea / zda.cpp
blobf5e1aa817054eeea573482f4635fa4a53e8fa880
1 #include <marnav/nmea/zda.hpp>
2 #include <marnav/nmea/io.hpp>
3 #include <stdexcept>
5 namespace marnav
7 namespace nmea
9 constexpr sentence_id zda::ID;
10 constexpr const char * zda::TAG;
12 zda::zda()
13 : sentence(ID, TAG, talker::global_positioning_system)
17 zda::zda(talker talk, fields::const_iterator first, fields::const_iterator last)
18 : sentence(ID, TAG, talk)
20 if (std::distance(first, last) != 6)
21 throw std::invalid_argument{"invalid number of fields in zda"};
23 utils::optional<uint32_t> d;
24 utils::optional<uint32_t> m;
25 utils::optional<uint32_t> y;
27 read(*(first + 0), time_utc_);
28 read(*(first + 1), d);
29 read(*(first + 2), m);
30 read(*(first + 3), y);
31 read(*(first + 4), local_zone_hours_);
32 read(*(first + 5), local_zone_minutes_);
34 if (d && m && y)
35 date_ = nmea::date{*y, to_month(*m), *d};
38 void zda::append_data_to(std::string & s) const
40 utils::optional<uint32_t> d;
41 utils::optional<uint32_t> m;
42 utils::optional<uint32_t> y;
44 if (date_) {
45 d = date_->day();
46 m = to_numeric(date_->mon());
47 y = date_->year();
50 append(s, to_string(time_utc_));
51 append(s, format(d, 2));
52 append(s, format(m, 2));
53 append(s, format(y, 4));
54 append(s, format(local_zone_hours_, 2));
55 append(s, format(local_zone_minutes_, 2));