NMEA: changed type of talker id from 'std::string' to its own type.
[marnav.git] / src / marnav / nmea / talker_id.cpp
blob5a96773f7d2aceea84167d2adb1fe32b8b740bca
1 #include "talker_id.hpp"
2 #include <algorithm>
3 #include <array>
4 #include <string>
6 namespace marnav
8 namespace nmea
10 talker make_talker(const std::string & s)
12 static const std::array<talker, 65> talkers = {{talker_id::none,
13 talker_id::integrated_instrumentation, talker_id::global_positioning_system,
14 talker_id::autopilot_general, talker_id::autopilot_magnetic, talker_id::beidou_2,
15 talker_id::computer_calculator, talker_id::communications_dsc,
16 talker_id::computer_memory, talker_id::communications_satellite,
17 talker_id::communications_mfhf, talker_id::communications_vhf,
18 talker_id::communications_scanning_receiver, talker_id::decca_navigation,
19 talker_id::direction_finder, talker_id::electronic_chart_display,
20 talker_id::emergency_position_indicating_beacon,
21 talker_id::engine_room_monitoring_systems, talker_id::galileo, talker_id::beidou_1,
22 talker_id::glonass, talker_id::mixed_gps_glonass, talker_id::magnetic_compass,
23 talker_id::north_seeking_gyro, talker_id::non_north_seeking_gyro,
24 talker_id::integrated_navigation, talker_id::loran_a, talker_id::loran_c,
25 talker_id::microwave_positioning_system, talker_id::omega_navigation_system,
26 talker_id::distress_alarm_system, talker_id::qzss_gps_augmentation_system,
27 talker_id::radar, talker_id::sounder_depth, talker_id::electronic_positioning_system,
28 talker_id::sounder_scanning, talker_id::turn_rate_indicator,
29 talker_id::transit_navigation_system, talker_id::velocity_sensor_doppler,
30 talker_id::velocity_sensor_water_magnetic, talker_id::velocity_sensor_water_mechanical,
31 talker_id::weather_instruments, talker_id::transducer_temperature,
32 talker_id::transducer_displacement, talker_id::transducer_frequency,
33 talker_id::transducer_level, talker_id::transducer_pressure,
34 talker_id::transducer_flow_rate, talker_id::transducer_tachometer,
35 talker_id::transducer_volume, talker_id::transducer, talker_id::timekeeper_atomic_clock,
36 talker_id::timekeeper_chronometer, talker_id::timekeeper_quartz,
37 talker_id::timekeeper_radio_update, talker_id::ais_base_station,
38 talker_id::ais_dependent_base_station, talker_id::ais_mobile_station,
39 talker_id::ais_aid_to_navigation_station, talker_id::ais_receiving_station,
40 talker_id::ais_limited_base_station, talker_id::ais_transmitting_station,
41 talker_id::ais_repeater_ais_station, talker_id::ais_base_station_obsolete,
42 talker_id::ais_physical_shore_station}};
44 const auto i = std::find_if(
45 std::begin(talkers), std::end(talkers), [&](const talker & t) { return s == t.str(); });
46 if (i == std::end(talkers))
47 throw std::runtime_error{"invalid talker in make_talker: " + s};
48 return *i;