NAVTOR SDK  v.3.0
Software Development Kit for fast and efficient development of ECDIS, ECS and generic marine applications
parsed_nmea_sentence_data_interface.h
Go to the documentation of this file.
1 #ifndef SDK_ECDIS_NMEA_PARSER_PARSED_NMEA_SENTENCE_DATA_INTERFACE_H_
11 #define SDK_ECDIS_NMEA_PARSER_PARSED_NMEA_SENTENCE_DATA_INTERFACE_H_
12 #pragma once
13 
14 #include <base/inc/platform.h>
15 #include <base/inc/sdk_results.h>
16 #include <base/inc/base_types.h>
21 
22 SDK_ECDISLAYER_BEGIN_NAMESPACE
23 
24 namespace nmea {
25 
26 FWD_DECL_INTERFACE(IParsedNMEASentenceData);
27 
31 {
32  public:
34  virtual SDKResult SDK_CALLTYPE GetRawValue(
35  const NMEASentenceValueID& nmea_sentence_value_id,
36  SDKAny& nmea_sentence_value) const throw() = 0;
37 
38  template< typename T >
39  SDKResult GetRawValueT(const NMEASentenceValueID& id, T& out) const throw()
40  {
41  try
42  {
43  ScopedAny value;
44  SDKResult res = GetRawValue(id, value);
45  if (SDK_FAILED(res))
46  return res;
47  if (ANY_IS_EMPTY(&value))
48  return Err_NotExist;
49  return value.GetAs< T >(out) ? Ok : Err_InvalidArg;
50  }
51  catch (...) {}
52 
53  return Err_UnknownError;
54  }
55 
58  const NMEASentenceValueID& id) const throw()
59  {
60  try
61  {
62  const NMEASentenceValueID state_id = IsDataFieldStateID(id)
63  ? id : ValueID2DataFieldStateID(id);
64 
65  SDKUInt32 val = kDataFieldState_Unknown;
66  if (SDK_FAILED(GetRawValueT<SDKUInt32>(state_id, val)))
68 
69  return static_cast<DataFieldState>(val);
70  }
71  catch (...) {}
72 
74  }
75 
76  inline bool IsValueValid(const NMEASentenceValueID& id) const
77  { return kDataFieldState_Valid == GetValueState(id); }
78 
79  inline bool IsValueInvalid(const NMEASentenceValueID& id) const
81 
82  inline bool IsValueAbsent(const NMEASentenceValueID& id) const
83  { return kDataFieldState_Absent == GetValueState(id); }
84 
85  inline bool IsValueInvalidFormat(const NMEASentenceValueID& id) const
87 
89  template< typename T >
90  inline SDKResult GetValidValue(const NMEASentenceValueID& id, T& out) const
91  {
92  if (IsValueID(id))
93  {
94  // Checking value state
95  const DataFieldState state = GetValueState(id);
96  if (kDataFieldState_Valid != state && kDataFieldState_Unknown != state)
97  return Err_EmptyValue;
98  }
99 
100  return GetRawValueT<T>(id, out);
101  }
102 
104  template< typename T >
106  const NMEASentenceValueID& id, T& out) const
107  {
108  if (IsValueID(id))
109  {
110  // Checking value state
111  const DataFieldState state = GetValueState(id);
112  if (kDataFieldState_Valid != state && kDataFieldState_Unknown != state &&
114  return Err_EmptyValue;
115  }
116 
117  return GetRawValueT<T>(id, out);
118  }
119 
121  template< typename T >
123  const NMEASentenceValueID& id, T& out, bool& is_valid,
124  bool& is_absent) const
125  {
126  is_absent = true;
127  is_valid = false;
128  if (IsValueID(id))
129  {
130  // Checking value state
131  const DataFieldState state = GetValueState(id);
132  is_absent = (kDataFieldState_Absent == state) ||
133  (kDataFieldState_Unknown == state);
134  is_valid = kDataFieldState_Valid == state;
135  if (is_absent)
136  is_valid = false;
137  return GetRawValueT<T>(id, out);
138  }
139  return Err_NotExist;
140  }
141 
145  const NMEASentenceValueID& nmea_sentence_value_id,
146  SDKAny& nmea_sentence_value) const
147  {
148  if (IsValueID(nmea_sentence_value_id))
149  {
150  // Checking value state
151  const DataFieldState state = GetValueState(nmea_sentence_value_id);
152  if (kDataFieldState_Valid != state
153  && kDataFieldState_Unknown != state)
154  return Err_EmptyValue;
155  }
156 
157  return GetRawValue(nmea_sentence_value_id, nmea_sentence_value);
158  }
159 
161  template< typename T >
163  const NMEASentenceValueID& id, T& out) const
164  { return GetValidValue(id, out); }
165 
166  SDK_IMPLEMENT_IID(IParsedNMEASentenceData)
167  SDK_END_INTERFACE(IParsedNMEASentenceData)
168 };
169 SDK_DECLARE_IID(IParsedNMEASentenceData)
170 
171 } // namespace nmea
172 
173 SDK_ECDISLAYER_END_NAMESPACE
174 
175 #endif // SDK_ECDIS_NMEA_PARSER_PARSED_NMEA_SENTENCE_DATA_INTERFACE_H_
nmea::IParsedNMEASentenceData::GetRawValue
virtual SDKResult SDK_CALLTYPE GetRawValue(const NMEASentenceValueID &nmea_sentence_value_id, SDKAny &nmea_sentence_value) const =0
Returns appropriate NMEA sentence data value, if exists.
nmea::kDataFieldState_InvalidValue
@ kDataFieldState_InvalidValue
Data field with invalid value (value is out of range)
Definition: parsed_nmea_sentence_value_ids.h:157
nmea::DataFieldState
DataFieldState
Different states for one of sentence data fields.
Definition: parsed_nmea_sentence_value_ids.h:148
sdk_results.h
A list of SDK error/return results.
base_types.h
SDK base types.
sdk::Err_EmptyValue
@ Err_EmptyValue
An empty value.
Definition: sdk_results_enum.h:48
nmea::kDataFieldState_Unknown
@ kDataFieldState_Unknown
Data field state is unknown due of parsing was not performed.
Definition: parsed_nmea_sentence_value_ids.h:159
sdk::Ok
@ Ok
Operation completed successfully.
Definition: sdk_results_enum.h:22
nmea::kDataFieldState_InvalidFormat
@ kDataFieldState_InvalidFormat
Data field with wrongly formatted data.
Definition: parsed_nmea_sentence_value_ids.h:155
nmea::NMEASentenceValueID
SDKUInt32 NMEASentenceValueID
NMEA sentence value ID.
Definition: parsed_nmea_sentence_value_ids.h:559
ecdislayer_const.h
The ecdislayer constants.
SDKResult
SDKInt32 SDKResult
Type of all error or return codes which SDK functions can end with.
Definition: sdk_results.h:17
nmea::IParsedNMEASentenceData::GetNMEASentenceValueT
SDKResult GetNMEASentenceValueT(const NMEASentenceValueID &id, T &out) const
DEPRECATED, BACKWARD COMPABILITY ONLY.
Definition: parsed_nmea_sentence_data_interface.h:162
sdk::Err_InvalidArg
@ Err_InvalidArg
Wrong argument passed to function.
Definition: sdk_results_enum.h:27
nmea::IParsedNMEASentenceData
A container for parsed NMEA sentence(s) data values.
Definition: parsed_nmea_sentence_data_interface.h:30
sdk::Err_UnknownError
@ Err_UnknownError
Unknown error.
Definition: sdk_results_enum.h:52
nmea::IParsedNMEASentenceData::GetValueState
DataFieldState GetValueState(const NMEASentenceValueID &id) const
Returns given value state (valid/absent/etc)
Definition: parsed_nmea_sentence_data_interface.h:57
nmea::IParsedNMEASentenceData::GetValueAndStateT
SDKResult GetValueAndStateT(const NMEASentenceValueID &id, T &out, bool &is_valid, bool &is_absent) const
Returns the raw value and validation state.
Definition: parsed_nmea_sentence_data_interface.h:122
nmea::IParsedNMEASentenceData::GetNMEASentenceValue
SDKResult GetNMEASentenceValue(const NMEASentenceValueID &nmea_sentence_value_id, SDKAny &nmea_sentence_value) const
Returns appropriate NMEA sentence data value, if exists DEPRECATED, BACKWARD COMPABILITY ONLY.
Definition: parsed_nmea_sentence_data_interface.h:144
sdk_component_interface.h
Common base SDK interfaces.
SDK_FAILED
#define SDK_FAILED(res)
Checks failed result.
Definition: sdk_results_enum.h:69
platform.h
Describes the platform constants.
nmea::IsDataFieldStateID
bool IsDataFieldStateID(const NMEASentenceValueID &id)
Set of useful Value ID/Data field state ID routines.
Definition: parsed_nmea_sentence_value_ids.h:566
nmea::kDataFieldState_Absent
@ kDataFieldState_Absent
Data field with empty data.
Definition: parsed_nmea_sentence_value_ids.h:153
nmea::IParsedNMEASentenceData::GetValidOrInvalidValue
SDKResult GetValidOrInvalidValue(const NMEASentenceValueID &id, T &out) const
Returns value itself, only in case value marked as valid or invalid.
Definition: parsed_nmea_sentence_data_interface.h:105
ISDKComponent
Base interface for all SDK interfaces.
Definition: sdk_component_interface.h:41
sdk::Err_NotExist
@ Err_NotExist
Not exist.
Definition: sdk_results_enum.h:26
parsed_nmea_sentence_value_ids.h
List of appropriate IDs for each of parsed items in NMEA sentence.
nmea::kDataFieldState_Valid
@ kDataFieldState_Valid
Data field with correctly formatted and within range value.
Definition: parsed_nmea_sentence_value_ids.h:151
FWD_DECL_INTERFACE
FWD_DECL_INTERFACE(ILWEParserWrapper)
Provides a wrapper around the message parser to get, add or remove the.
sdk_any_handler.h
Wrappers for work with SDKAny instance.
nmea::IParsedNMEASentenceData::GetValidValue
SDKResult GetValidValue(const NMEASentenceValueID &id, T &out) const
Returns value itself, only in case value marked as valid.
Definition: parsed_nmea_sentence_data_interface.h:90