package aliview.sequences; import java.util.ArrayList; public class PositionsToPointer { ArrayList<PositionToPointer> posToPointerList = new ArrayList<PositionToPointer>(); private PositionToPointer cachedPosToPoint; public PositionsToPointer getCopy(){ PositionsToPointer copy = new PositionsToPointer(); // Make copy of list and content copy.posToPointerList = new ArrayList<PositionToPointer>(); for(PositionToPointer next: posToPointerList){ copy.posToPointerList.add(next.getCopy()); } return copy; } public void add(PositionToPointer posToPoint){ posToPointerList.add(posToPoint); } public long getPointerFromPos(int pos){ long pointer = -1; if(cachedPosToPoint != null){ pointer = cachedPosToPoint.getPointer(pos); } if(pointer == -1){ cachedPosToPoint = getPosToPointerContaining(pos); pointer = cachedPosToPoint.getPointer(pos); } return pointer; } private PositionToPointer getPosToPointerContaining(int pos) { for(PositionToPointer posPoint: posToPointerList){ if(posPoint.containsPos(pos)){ return posPoint; } } return null; } public int getMaxPosition() { PositionToPointer lastPosPoint = posToPointerList.get(posToPointerList.size() - 1); return lastPosPoint.getEndPos(); } public long getMaxPointer() { PositionToPointer lastPosPoint = posToPointerList.get(posToPointerList.size() - 1); return lastPosPoint.getEndPointer(); } }