package jetbrains.mps.ide.dataFlow.presentation; /*Generated by MPS */ public class FreeZone { private FreeZone myNext; private FreeZone myPrev; private int myFirstIndex; private int myLastIndex; private boolean myIsDeleted = false; public FreeZone(int firstIndex, int lastIndex) { this.myFirstIndex = firstIndex; this.myLastIndex = lastIndex; } public boolean insert(int first, int last) { if (this.myIsDeleted) { return false; } if (first < this.myFirstIndex) { return false; } if (last > this.myLastIndex) { return false; } FreeZone before; FreeZone after; int wasFirstIndex = this.myFirstIndex; int wasLastIndex = this.myLastIndex; if (this.myPrev == null) { before = this; } else { before = new FreeZone(-1, -1); before.myNext = this; before.myPrev = this.myPrev; if (this.myPrev != null) { this.myPrev.myNext = before; } this.myPrev = before; } before.myFirstIndex = wasFirstIndex; before.myLastIndex = first - 1; if (first == wasFirstIndex) { before.delete(); } if (this.myNext == null && before != this) { after = this; } else { after = new FreeZone(-1, -1); after.myPrev = this; after.myNext = this.myNext; if (this.myNext != null) { this.myNext.myPrev = after; } this.myNext = after; } after.myFirstIndex = last + 1; after.myLastIndex = wasLastIndex; if (last == wasLastIndex) { after.delete(); } return true; } public boolean canBeAdded(int first, int last) { FreeZone current = this; while (current != null) { if (current.insert(first, last)) { return true; } current = current.myNext; } return false; } private void delete() { if (this.myPrev != null) { this.myPrev.myNext = this.myNext; } if (this.myNext != null) { this.myNext.myPrev = this.myPrev; } this.myIsDeleted = true; } }