Dev: preparation script added for code coverage.
[marnav.git] / src / marnav / ais / message_19.cpp
blob1d23c27ee1231a5f1c885b8155e175d2a362524d
1 #include "message_19.hpp"
2 #include <marnav/ais/angle.hpp>
4 namespace marnav
6 namespace ais
8 MARNAV_AIS_DEFINE_MESSAGE_PARSE_FUNC(message_19)
10 message_19::message_19()
11 : message_19(ID)
15 message_19::message_19(message_id id)
16 : message(id)
17 , shipname("@@@@@@@@@@@@@@@@@@@@")
21 message_19::message_19(const raw & bits)
22 : message_19(ID)
24 if (bits.size() != SIZE_BITS)
25 throw std::invalid_argument{"invalid number of bits in message_19"};
26 read_data(bits);
29 void message_19::read_data(const raw & bits)
31 get(bits, repeat_indicator);
32 get(bits, mmsi);
33 get(bits, sog);
34 get(bits, position_accuracy);
35 get(bits, longitude_minutes);
36 get(bits, latitude_minutes);
37 get(bits, cog);
38 get(bits, hdg);
39 get(bits, timestamp);
40 get(bits, shipname);
41 get(bits, shiptype);
42 get(bits, to_bow);
43 get(bits, to_stern);
44 get(bits, to_port);
45 get(bits, to_starboard);
46 get(bits, epfd_fix);
47 get(bits, raim);
48 get(bits, dte);
49 get(bits, assigned);
52 raw message_19::get_data() const
54 raw bits{SIZE_BITS};
56 bits.set(type(), 0, 6);
57 set(bits, repeat_indicator);
58 set(bits, mmsi);
59 set(bits, sog);
60 set(bits, position_accuracy);
61 set(bits, longitude_minutes);
62 set(bits, latitude_minutes);
63 set(bits, cog);
64 set(bits, hdg);
65 set(bits, timestamp);
66 set(bits, shipname);
67 set(bits, shiptype);
68 set(bits, to_bow);
69 set(bits, to_stern);
70 set(bits, to_port);
71 set(bits, to_starboard);
72 set(bits, epfd_fix);
73 set(bits, raim);
74 set(bits, dte);
75 set(bits, assigned);
77 return bits;
80 utils::optional<geo::longitude> message_19::get_longitude() const
82 if (longitude_minutes == longitude_not_available)
83 return utils::make_optional<geo::longitude>();
84 return to_geo_longitude(longitude_minutes);
87 utils::optional<geo::latitude> message_19::get_latitude() const
89 if (latitude_minutes == latitude_not_available)
90 return utils::make_optional<geo::latitude>();
91 return to_geo_latitude(latitude_minutes);
94 void message_19::set_longitude(const utils::optional<geo::longitude> & t)
96 longitude_minutes = t ? to_longitude_minutes(t.value()) : longitude_not_available;
99 void message_19::set_latitude(const utils::optional<geo::latitude> & t)
101 latitude_minutes = t ? to_latitude_minutes(t.value()) : latitude_not_available;