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;
|
||||
|
||||
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 & IgnoreContacts ) ? Flags::IgnoreContacts : Flags::NoFlags;
|
||||
|
||||
|
|
|
@ -1286,6 +1286,13 @@ namespace Katana {
|
|||
if (nextState == DataNegociate::Minimize) {
|
||||
if (isFullBlocked() and not segment->isTerminal()) {
|
||||
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;
|
||||
break;
|
||||
}
|
||||
|
@ -1388,7 +1395,8 @@ namespace Katana {
|
|||
<< ((manipulator.getEvent())
|
||||
? manipulator.getEvent()->getConstraints() : "(no event yet)") << endl;
|
||||
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) ) {
|
||||
moveUpFlags |= Manipulator::AllowTerminalMoveUp;
|
||||
} else {
|
||||
|
|
|
@ -14,9 +14,7 @@
|
|||
// +-----------------------------------------------------------------+
|
||||
|
||||
|
||||
#ifndef KATANA_SEGMENT_FSM_H
|
||||
#define KATANA_SEGMENT_FSM_H
|
||||
|
||||
#pragma once
|
||||
#include "katana/TrackCost.h"
|
||||
|
||||
namespace Katana {
|
||||
|
@ -240,5 +238,3 @@ namespace Katana {
|
|||
}
|
||||
|
||||
} // Katana namespace.
|
||||
|
||||
#endif // KATANA_SEGMENT_FSM_H
|
||||
|
|
Loading…
Reference in New Issue