nmealib 0.0.4
NMEA 0183/NMEA 2000 parsing library
Loading...
Searching...
No Matches
messageRegistry.cpp
Go to the documentation of this file.
1#include "messageRegistry.hpp"
23
24namespace nmealib {
25namespace nmea0183 {
26
28 static MessageRegistry registry;
29 return registry;
30}
31
32std::unique_ptr<Message0183> MessageRegistry::create(const std::string& sentenceType,
33 std::unique_ptr<Message0183> baseMessage) {
34 // TODO: Consider using a map of string to function pointer for better scalability if many sentence types are supported
35 if (sentenceType == "APB") {
36 return APB::create(std::move(baseMessage));
37 } else if (sentenceType == "DBT") {
38 return DBT::create(std::move(baseMessage));
39 } else if (sentenceType == "DPT") {
40 return DPT::create(std::move(baseMessage));
41 } else if (sentenceType == "GGA") {
42 return GGA::create(std::move(baseMessage));
43 } else if (sentenceType == "GLL") {
44 return GLL::create(std::move(baseMessage));
45 } else if (sentenceType == "GSA") {
46 return GSA::create(std::move(baseMessage));
47 } else if (sentenceType == "GSV") {
48 return GSV::create(std::move(baseMessage));
49 } else if (sentenceType == "HDG") {
50 return HDG::create(std::move(baseMessage));
51 } else if (sentenceType == "HDM") {
52 return HDM::create(std::move(baseMessage));
53 } else if (sentenceType == "MTW") {
54 return MTW::create(std::move(baseMessage));
55 } else if (sentenceType == "MWV") {
56 return MWV::create(std::move(baseMessage));
57 } else if (sentenceType == "RMB") {
58 return RMB::create(std::move(baseMessage));
59 } else if (sentenceType == "RMA") {
60 return RMA::create(std::move(baseMessage));
61 } else if (sentenceType == "RMC") {
62 return RMC::create(std::move(baseMessage));
63 } else if (sentenceType == "VHW") {
64 return VHW::create(std::move(baseMessage));
65 } else if (sentenceType == "VLW") {
66 return VLW::create(std::move(baseMessage));
67 } else if (sentenceType == "VTG") {
68 return VTG::create(std::move(baseMessage));
69 } else if (sentenceType == "VWR") {
70 return VWR::create(std::move(baseMessage));
71 } else if (sentenceType == "XDR") {
72 return XDR::create(std::move(baseMessage));
73 } else if (sentenceType == "XTE") {
74 return XTE::create(std::move(baseMessage));
75 } else if (sentenceType == "ZDA") {
76 return ZDA::create(std::move(baseMessage));
77 } else {
78 // Return generic Message0183 if type not registered
79 return baseMessage;
80 }
81}
82
83} // namespace nmea0183
84} // namespace nmealib
Registry for message type creators.
static MessageRegistry & instance()
Get the singleton instance of the MessageRegistry.
std::unique_ptr< Message0183 > create(const std::string &sentenceType, std::unique_ptr< Message0183 > baseMessage)
Create a typed message from a generic Message0183.