int interv[] = getSearchInterval(ass);
if (interv == null)
return false;
RasterCollection raster = conflictMatrix.getConflictingRaster(ass);
int duration = ass.getEvent().getDuration();
// doMove() could have become possible, if we moved some events while previous injections!
for (int startTime = raster.getNextFree(interv[0], duration);
startTime >= 0 && startTime < interv[1];
startTime = raster.getNextFree(startTime + 1, duration)) {
if (doMove(ass, startTime))
return true;
}
// If we will go deeper with injectAt(), the result will always be -1, so we
// don't need to collect colliding events for this
if (depth < 1)
return false;
// 1. Calculate the colliding events if we would injectAt
// currentEvent into startTime and save the moved events to stack
boolean includeEventRaster = false;
for (int startTime = raster.getNextFree(interv[0], duration, includeEventRaster);
startTime >= 0 && startTime < interv[1];
startTime = raster.getNextFree(startTime + 1, duration, includeEventRaster)) {
if (lastStackSize != stack.size())
throw new IllegalStateException(" nodes:" + processedNodes
+ " pointer:" + lastStackSize + " stack.size:" + stack.size() + " " + stack);