diff --git a/core/src/container.cpp b/core/src/container.cpp index 57623b5d..4c556806 100644 --- a/core/src/container.cpp +++ b/core/src/container.cpp @@ -109,29 +109,6 @@ void ContainerBasePrivate::compute() { static_cast(me_)->compute(); } -void ContainerBasePrivate::onNewFailure(const Stage& child, const InterfaceState* from, const InterfaceState* to) { - ROS_DEBUG_STREAM_NAMED("Pruning", "'" << child.name() << "' generated a failure"); - switch (child.pimpl()->interfaceFlags()) { - case GENERATE: - // just ignore: the pair of (new) states isn't known to us anyway - // TODO: If child is a container, from and to might have associated solutions already! - break; - - case PROPAGATE_FORWARDS: // mark from as failed (backwards) - setStatus(nullptr, nullptr, from, InterfaceState::Status::FAILED); - break; - case PROPAGATE_BACKWARDS: // mark to as failed (forwards) - setStatus(nullptr, nullptr, to, InterfaceState::Status::FAILED); - break; - - case CONNECT: - setStatus(&child, to, from, InterfaceState::Status::FAILED); - setStatus(&child, from, to, InterfaceState::Status::FAILED); - break; - } - // printChildrenInterfaces(*this, false, child); -} - template void ContainerBasePrivate::setStatus(const Stage* creator, const InterfaceState* source, const InterfaceState* target, InterfaceState::Status status) { @@ -189,6 +166,29 @@ void ContainerBasePrivate::setStatus(const Stage* creator, const InterfaceState* setStatus(successor->creator(), target, state(*successor), status); } +void ContainerBasePrivate::onNewFailure(const Stage& child, const InterfaceState* from, const InterfaceState* to) { + ROS_DEBUG_STREAM_NAMED("Pruning", "'" << child.name() << "' generated a failure"); + switch (child.pimpl()->interfaceFlags()) { + case GENERATE: + // just ignore: the pair of (new) states isn't known to us anyway + // TODO: If child is a container, from and to might have associated solutions already! + break; + + case PROPAGATE_FORWARDS: // mark from as failed (backwards) + setStatus(nullptr, nullptr, from, InterfaceState::Status::FAILED); + break; + case PROPAGATE_BACKWARDS: // mark to as failed (forwards) + setStatus(nullptr, nullptr, to, InterfaceState::Status::FAILED); + break; + + case CONNECT: + setStatus(&child, to, from, InterfaceState::Status::FAILED); + setStatus(&child, from, to, InterfaceState::Status::FAILED); + break; + } + // printChildrenInterfaces(*this, false, child); +} + template void ContainerBasePrivate::copyState(Interface::iterator external, const InterfacePtr& target, bool updated) { if (updated) { // propagate external state update to internal copies