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

Method DecomposeOh

libs/routing/opening_hours_serdes.cpp:176–270  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

174}
175
176std::vector<osmoh::RuleSequence> OpeningHoursSerDes::DecomposeOh(osmoh::OpeningHours const & oh)
177{
178 auto const apply = [&](auto & rules, auto const & ranges, auto const & rangeSetter)
179 {
180 if (ranges.empty())
181 return;
182
183 std::vector<osmoh::RuleSequence> originalRules = std::move(rules);
184 if (originalRules.empty())
185 originalRules.emplace_back();
186
187 rules.clear();
188 for (auto const & range : ranges)
189 {
190 auto const toDo = [&range, &rangeSetter](auto & rule) { rangeSetter(range, rule); };
191 for (auto const & originalRule : originalRules)
192 {
193 auto rule = originalRule;
194 toDo(rule);
195 rules.emplace_back(std::move(rule));
196 }
197 }
198 };
199
200 std::vector<osmoh::RuleSequence> finalRules;
201 for (auto const & rule : oh.GetRule())
202 {
203 std::vector<osmoh::RuleSequence> rules;
204
205 if (rule.IsTwentyFourHours())
206 {
207 static auto const kTwentyFourHourRule = GetTwentyFourHourRule();
208 finalRules.emplace_back(kTwentyFourHourRule);
209 break;
210 }
211
212 // Ir rule has just modifier (opening hours: "closed") it is empty but has a useful modifier.
213 if (rule.IsEmpty() && UselessModifier(rule))
214 continue;
215
216 bool badRule = false;
217 apply(rules, rule.GetYears(), [&](osmoh::YearRange const & range, osmoh::RuleSequence & item)
218 {
219 if (ShouldSkipYear(range, m_currentYear))
220 badRule = true;
221
222 item.SetYears({range});
223 });
224
225 apply(rules, rule.GetMonths(), [&](osmoh::MonthdayRange const & range, osmoh::RuleSequence & item)
226 {
227 if (ShouldSkipYear(range, m_currentYear))
228 badRule = true;
229
230 item.SetMonths({range});
231 });
232
233 if (badRule)

Callers

nothing calls this directly

Calls 15

GetTwentyFourHourRuleFunction · 0.85
UselessModifierFunction · 0.85
applyFunction · 0.85
ShouldSkipYearFunction · 0.85
SetYearsMethod · 0.80
SetMonthsMethod · 0.80
SetWeekdayRangesMethod · 0.80
SetWeekdaysMethod · 0.80
SetHolidaysMethod · 0.80
SetTimesMethod · 0.80
GetModifierMethod · 0.80
SetModifierMethod · 0.80

Tested by

no test coverage detected