MCPcopy Create free account
hub / github.com/comaps/comaps / USRoadShieldParser

Class USRoadShieldParser

libs/indexer/road_shields_parser.cpp:186–244  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

184};
185
186class USRoadShieldParser : public RoadShieldParser
187{
188public:
189 explicit USRoadShieldParser(std::string const & baseRoadNumber) : RoadShieldParser(baseRoadNumber) {}
190 RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
191 {
192 std::string shieldText(rawText);
193
194 std::replace(shieldText.begin(), shieldText.end(), '-', ' ');
195 auto const shieldParts = strings::Tokenize(shieldText, " ");
196
197 // Process long road shield titles to skip invalid data.
198 if (shieldText.size() > kMaxRoadShieldBytesSize)
199 {
200 std::string lowerShieldText = shieldText;
201 strings::AsciiToLower(lowerShieldText);
202
203 bool modifierFound = false;
204 for (auto const & modifier : kModifiers)
205 {
206 if (lowerShieldText.find(modifier) != std::string::npos)
207 {
208 modifierFound = true;
209 break;
210 }
211 }
212 if (!modifierFound)
213 return RoadShield();
214 }
215
216 if (shieldParts.size() <= 1)
217 return RoadShield(RoadShieldType::Default, rawText);
218
219 std::string_view const roadType = shieldParts[0]; // 'I' for interstates and kFederalCode/kStatesCode for highways.
220 std::string roadNumber(shieldParts[1]);
221 std::string additionalInfo;
222 if (shieldParts.size() >= 3)
223 {
224 additionalInfo = shieldParts[2];
225 // Process cases like "US Loop 16".
226 if (!strings::IsASCIINumeric(shieldParts[1]) && strings::IsASCIINumeric(shieldParts[2]))
227 {
228 roadNumber = shieldParts[2];
229 additionalInfo = shieldParts[1];
230 }
231 }
232
233 if (roadType == "I")
234 return RoadShield(RoadShieldType::US_Interstate, roadNumber, additionalInfo);
235
236 if (base::IsExist(kFederalCode, shieldParts[0]))
237 return RoadShield(RoadShieldType::US_Highway, roadNumber, additionalInfo);
238
239 if (base::IsExist(kStatesCode, shieldParts[0]))
240 return RoadShield(RoadShieldType::Generic_White_Bordered, roadNumber, additionalInfo);
241
242 return RoadShield(RoadShieldType::Default, rawText);
243 }

Callers 1

GetRoadShieldsFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected