71 void apply(
const std::vector<ACellHolder*>& cellHolders,
73 std::vector<Path<ACellHolder> >& paths)
75 B2ASSERT(
"Expected the relations to be sorted",
76 std::is_sorted(cellHolderRelations.begin(), cellHolderRelations.end()));
80 for (ACellHolder* cellHolder : cellHolders) {
81 paths.push_back({cellHolder});
89 paths.push_back({cellHolderRelation.getFrom(), cellHolderRelation.getTo()});
96 B2WARNING(
"Unrecognised caMode parameter value " <<
m_param_caMode);
104 for (ACellHolder* cellHolder : cellHolders) {
105 cellHolder->unsetAndForwardMaskedFlag();
108 B2DEBUG(25,
"Apply multipass cellular automat");
112 auto lessStartCellState = [
this](ACellHolder * lhs, ACellHolder * rhs) {
128 auto itStartCellHolder =
129 std::max_element(cellHolders.begin(), cellHolders.end(), lessStartCellState);
130 if (itStartCellHolder == cellHolders.end())
break;
131 else if (not(*itStartCellHolder)->getAutomatonCell().hasStartFlag())
break;
132 else if ((*itStartCellHolder)->getAutomatonCell().getCellState() <
m_param_minState)
break;
134 const ACellHolder* highestCellHolder = *itStartCellHolder;
140 if (newPath.empty())
break;
143 for (ACellHolder* cellHolderPtr : newPath) {
144 cellHolderPtr->setAndForwardMaskedFlag();
148 for (ACellHolder* cellHolder : cellHolders) {
149 cellHolder->receiveMaskedFlag();
153 paths.push_back(std::move(newPath));