List<HighlightedPosition> oldPositions = _positions;
int newSize = (_positions.size() + addedPositions.length)
- removedPositions.length;
List<HighlightedPosition> newPositions = new ArrayList<HighlightedPosition>(
newSize);
HighlightedPosition position = null;
HighlightedPosition addedPosition = null;
for (int i = 0, j = 0, n = oldPositions.size(), m = addedPositions.length; (i < n)
|| (position != null)
|| (j < m)
|| (addedPosition != null);) {
while ((position == null) && (i < n)) {
position = oldPositions.get(i++);
if (position.isDeleted()
|| _contain(removedPositionsList, position)) {
document.removePosition(positionCategory, position);
position = null;
}
}
if ((addedPosition == null) && (j < m)) {
addedPosition = addedPositions[j++];
document.addPosition(positionCategory, addedPosition);
}
if (position != null) {
if (addedPosition != null) {
if (position.getOffset() <= addedPosition
.getOffset()) {
newPositions.add(position);
position = null;
} else {
newPositions.add(addedPosition);