While taking a look at #981, I noticed that the recent refactors around sonarcloud reports (see #984 #986) broke the RouteSplit operator altogether. TL;DR an object is moved from then re-used later on.
Fixing this is also a good opportunity to try and improve the current operator logic. Currently we store a std::vector<std::reference_wrapper<RawRoute>> to keep track of the empty routes that may receive parts of the splitted route. This is used down the line in RouteSplit::apply but is totally clumsy and we may as well compute and store only absolute ranks of the vehicles for those routes.
While taking a look at #981, I noticed that the recent refactors around sonarcloud reports (see #984 #986) broke the RouteSplit operator altogether. TL;DR an object is moved from then re-used later on.
Fixing this is also a good opportunity to try and improve the current operator logic. Currently we store a
std::vector<std::reference_wrapper<RawRoute>>to keep track of the empty routes that may receive parts of the splitted route. This is used down the line inRouteSplit::applybut is totally clumsy and we may as well compute and store only absolute ranks of the vehicles for those routes.