package models.objectOrientedTransfer;
import java.util.ArrayList;
import java.util.List;
public class DeltaComplex {
private Delta frontierDelta;
private DeltaComplex subComplex = null;
public DeltaComplex(Delta delta) {
this.frontierDelta = delta;
}
public DeltaComplex(Delta frontierDelta, DeltaComplex subComplex) {
this.frontierDelta = frontierDelta;
this.subComplex = subComplex;
}
public void attach(Delta delta) {
this.subComplex = this.copy();
this.frontierDelta = delta;
}
public List<Delta> split() {
if (subComplex == null) {
List<Delta> deltaSequence = new ArrayList<>();
deltaSequence.add(frontierDelta);
return deltaSequence;
}
List<Delta> deltaSequence = subComplex.split();
deltaSequence.add(0, frontierDelta);
return deltaSequence;
}
public Delta collapse() {
Delta allDelta = null;
for (Delta delta: this.split()) {
if (allDelta == null) {
allDelta = delta;
} else {
allDelta = allDelta.combine(delta);
}
}
return allDelta;
}
public DeltaComplex copy() {
DeltaComplex newComplex = new DeltaComplex(frontierDelta.copy(), subComplex.copy());
return newComplex;
}
}