package algvis.ds.dynamicarray;
import algvis.core.*;
import algvis.ui.view.REL;
import java.awt.*;
abstract class DynamicArrayAlg extends Algorithm {
DynamicArray D;
public DynamicArrayAlg(DynamicArray D) {
super(D.panel);
this.D = D;
}
public void createNewArray(int capacity) {
for(DynamicArrayCoin coin : D.coinsForArray) coin.setColor(NodeColor.RED);
addStep((Node)D.coinsForArray.get(D.coinsForArray.size()/2), REL.TOP, "dynamicarray-use-coin");
pause();
for(DynamicArrayCoin coin : D.coinsForArray) coin.setState(Node.UP);
D.newarray = new Array<>(0, D.array.tox, D.array.toy + 150);
D.capacity = capacity;
for(int i=0; i < D.capacity; i++) {
D.newarray.add(new ArrayNode(D, 0));
}
addStep((Node)D.newarray.get(0), REL.TOPRIGHT, "dynamicarray-new");
if(capacity >= 4) {
D.newdelimiter4 = new DynamicArrayDelimiter(D, D.newarray.get(capacity/4), Color.GREEN );
D.newdelimiter2 = new DynamicArrayDelimiter(D, D.newarray.get(capacity/2), Color.RED );
}
pause();
if(D.size > 0) {
addStep((Node) D.newarray.get(0), REL.TOPRIGHT, "dynamicarray-copy");
}
for(int i = 0; i < D.size; i++) {
D.coinsForCopy.get(i).setColor(NodeColor.RED);
D.newarray.get(i).setKey(D.array.get(i).getKey());
D.array.get(i).setKey(Node.NOKEY);
pause();
D.coinsForCopy.get(i).setState(Node.UP);
}
addStep(D.array.get(0), REL.TOPRIGHT, "dynamicarray-erase");
pause();
D.newarray.moveTo(D.newarray.x, D.newarray.y - 150);
D.array = D.newarray;
D.delimiter4 = D.newdelimiter4;
D.delimiter2 = D.newdelimiter2;
D.coinsForArray.clear();
D.coinsForCopy.clear();
for(int i=0; i < capacity; i++) {
D.coinsForArray.add(new DynamicArrayCoin(D, D.invisible, 0, 0));
D.coinsForArray.get(i).setState(Node.INVISIBLE);
D.coinsForCopy.add(new DynamicArrayCoin(D, D.invisible, 0, 0));
D.coinsForCopy.get(i).setState(Node.INVISIBLE);
}
return;
}
}