fast action list modifications

This commit is contained in:
honfika@gmail.com
2015-11-17 16:01:58 +01:00
parent 61917dad6d
commit c096cd4c84
2 changed files with 30 additions and 5 deletions

View File

@@ -57,12 +57,12 @@ public class FastActionList implements Collection<ActionItem> {
getJumps(actions, actionItemMap);
}
final ActionItem insertItemAfter(ActionItem item, Action action) {
public final ActionItem insertItemAfter(ActionItem item, Action action) {
ActionItem newItem = new ActionItem(action);
return insertItemAfter(item, newItem);
}
final ActionItem insertItemBefore(ActionItem item, ActionItem newItem) {
public final ActionItem insertItemBefore(ActionItem item, ActionItem newItem) {
insertItemAfter(item.prev, newItem);
if (item == firstItem) {
firstItem = newItem;
@@ -71,7 +71,7 @@ public class FastActionList implements Collection<ActionItem> {
return newItem;
}
final ActionItem insertItemAfter(ActionItem item, ActionItem newItem) {
public final ActionItem insertItemAfter(ActionItem item, ActionItem newItem) {
if (item == null && firstItem == null) {
firstItem = newItem;
newItem.next = newItem;
@@ -95,7 +95,7 @@ public class FastActionList implements Collection<ActionItem> {
return newItem;
}
ActionItem removeItem(ActionItem item) {
public ActionItem removeItem(ActionItem item) {
ActionItem next = null;
if (item == firstItem) {
if (item.next == item) {
@@ -135,6 +135,19 @@ public class FastActionList implements Collection<ActionItem> {
return next;
}
public void removeItem(int index, int count) {
FastActionListIterator iterator = new FastActionListIterator(this, index);
for (int i = 0; i < count; i++) {
iterator.next();
iterator.remove();
}
}
public ActionItem get(int index) {
FastActionListIterator iterator = new FastActionListIterator(this, index);
return iterator.next();
}
public void replaceJumpTargets(ActionItem target, ActionItem newTarget) {
if (target.jumpsHere != null) {
for (ActionItem item : new ArrayList<>(target.jumpsHere)) {

View File

@@ -23,7 +23,7 @@ import java.util.Iterator;
*
* @author JPEXS
*/
public class FastActionListIterator implements Iterator<ActionItem> {
public final class FastActionListIterator implements Iterator<ActionItem> {
private ActionItem item;
@@ -36,6 +36,18 @@ public class FastActionListIterator implements Iterator<ActionItem> {
this.list = list;
}
FastActionListIterator(FastActionList list, int index) {
item = list.first();
this.list = list;
for (int i = 0; i < index; i++) {
if (!hasNext()) {
throw new Error("Invalid index");
}
next();
}
}
@Override
public boolean hasNext() {
return item != null && (!started || item != list.first());