In Katana, Adjust the moveUp cases in SegmentFsm/Manipulator.
* Change: In SegmentFsm::_slackenLocal(), in the Minimize state, when the segment is fully blocked *and* has *lot* of candidate tracks, that means that it is up against a *massive* blockage (i.e. a macro block). In that case, try to move up (to go *over* it). Previous behavior was to go straight to Inimplemented state. * Change: In SegmentFsm::_slackenGlobal(), manage fully blocked global segments. But finally, this configuration didn't arise. * Change: In Manipulator::moveUp(), restore the management of the AllowLocalMoveUp flag, to be able to move up local segments (needed by SegmentFsm::_slackenLocal()).
This commit is contained in:
parent
79f5b3db08
commit
496cc00304
|
@ -1176,7 +1176,7 @@ namespace Katana {
|
||||||
cdebug_log(159,0) << "Manipulator::moveUp() " << _segment << endl;
|
cdebug_log(159,0) << "Manipulator::moveUp() " << _segment << endl;
|
||||||
|
|
||||||
Flags kflags = Flags::WithNeighbors;
|
Flags kflags = Flags::WithNeighbors;
|
||||||
//kflags |= (flags & AllowLocalMoveUp ) ? Flags::AutoSegment::AllowLocal : 0;
|
kflags |= (flags & AllowLocalMoveUp ) ? Flags::AllowLocal : Flags::NoFlags;
|
||||||
kflags |= (flags & AllowTerminalMoveUp) ? Flags::AllowTerminal : Flags::NoFlags;
|
kflags |= (flags & AllowTerminalMoveUp) ? Flags::AllowTerminal : Flags::NoFlags;
|
||||||
kflags |= (flags & IgnoreContacts ) ? Flags::IgnoreContacts : Flags::NoFlags;
|
kflags |= (flags & IgnoreContacts ) ? Flags::IgnoreContacts : Flags::NoFlags;
|
||||||
|
|
||||||
|
|
|
@ -1286,6 +1286,13 @@ namespace Katana {
|
||||||
if (nextState == DataNegociate::Minimize) {
|
if (nextState == DataNegociate::Minimize) {
|
||||||
if (isFullBlocked() and not segment->isTerminal()) {
|
if (isFullBlocked() and not segment->isTerminal()) {
|
||||||
cdebug_log(159,0) << "Is Fully blocked." << endl;
|
cdebug_log(159,0) << "Is Fully blocked." << endl;
|
||||||
|
if (_costs.size() > 7) {
|
||||||
|
success = manipulator.moveUp( Manipulator::AllowLocalMoveUp );
|
||||||
|
if (success) {
|
||||||
|
cdebug_log(159,0) << "Was able to move up." << endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
nextState = DataNegociate::Unimplemented;
|
nextState = DataNegociate::Unimplemented;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1388,7 +1395,8 @@ namespace Katana {
|
||||||
<< ((manipulator.getEvent())
|
<< ((manipulator.getEvent())
|
||||||
? manipulator.getEvent()->getConstraints() : "(no event yet)") << endl;
|
? manipulator.getEvent()->getConstraints() : "(no event yet)") << endl;
|
||||||
if ( manipulator.getEvent()
|
if ( manipulator.getEvent()
|
||||||
and manipulator.getEvent()->getConstraints().isPonctual()
|
and ( manipulator.getEvent()->getConstraints().isPonctual()
|
||||||
|
or (isFullBlocked() and (_costs.size() > 7)))
|
||||||
and segment->canMoveUp(1.0,Flags::CheckLowUpDensity|Flags::AllowTerminal) ) {
|
and segment->canMoveUp(1.0,Flags::CheckLowUpDensity|Flags::AllowTerminal) ) {
|
||||||
moveUpFlags |= Manipulator::AllowTerminalMoveUp;
|
moveUpFlags |= Manipulator::AllowTerminalMoveUp;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -14,9 +14,7 @@
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
#ifndef KATANA_SEGMENT_FSM_H
|
#pragma once
|
||||||
#define KATANA_SEGMENT_FSM_H
|
|
||||||
|
|
||||||
#include "katana/TrackCost.h"
|
#include "katana/TrackCost.h"
|
||||||
|
|
||||||
namespace Katana {
|
namespace Katana {
|
||||||
|
@ -240,5 +238,3 @@ namespace Katana {
|
||||||
}
|
}
|
||||||
|
|
||||||
} // Katana namespace.
|
} // Katana namespace.
|
||||||
|
|
||||||
#endif // KATANA_SEGMENT_FSM_H
|
|
||||||
|
|
Loading…
Reference in New Issue