- /**
- * removes intersection of position,length ranges in deletions
- * from the start,end regions marked in intervals.
- * @param deletions
- * @param intervals
- * @return
- */
- private boolean pruneIntervalVector(Vector deletions, Vector intervals) {
- boolean pruned=false;
- int i=0,j=intervals.size()-1, s=0, t=deletions.size()-1;
- int hr[]=(int[]) intervals.elementAt(i);
- int sr[]=(int[]) deletions.elementAt(s);
- while (i<=j && s<=t) {
- boolean trailinghn=hr[1]>=sr[0];
- if (!trailinghn) {
- if (i<j)
- hr=(int[]) intervals.elementAt(++i);
- else
- i++;
- continue;
- }
- int endshift=sr[0]+sr[1]; // deletion ranges - -ve means an insert
- if (endshift<hr[0] || endshift<sr[0]) { // leadinghc disjoint or not a deletion
- if (s<t)
- sr=(int[]) deletions.elementAt(++s);
- else
- s++;
- continue;
- }
- boolean leadinghn=hr[0]>=sr[0];
- boolean leadinghc=hr[0]<endshift;
- boolean trailinghc=hr[1]<endshift;
- if (leadinghn) {
- if (trailinghc) {// deleted hidden region.
- intervals.removeElementAt(i);
- pruned=true;
- j--;
- if (i<=j)
- hr=(int[]) intervals.elementAt(i);
- continue;
- }
- if (leadinghc) {
- hr[0]=endshift; // clip c terminal region
- leadinghn=!leadinghn;
- pruned=true;
- }
- }
- if (!leadinghn) {
- if (trailinghc) {
- if (trailinghn) {
- hr[1]=sr[0]-1;
- pruned=true;
- }
- } else {
- // sr contained in hr
- if (s<t)
- sr=(int[]) deletions.elementAt(++s);
- else
- s++;
- continue;
- }
- }
- }
- return pruned; // true if any interval was removed or modified by operations.
- }
- private boolean pruneColumnList(Vector deletion, Vector list) {
- int s=0,t=deletion.size();
- int[] sr=(int[])list.get(s++);
- boolean pruned=false;
- int i=0, j=list.size();
- while (i<j && s<=t) {
- int c=((Integer)list.elementAt(i++)).intValue();
- if (sr[0]<=c) {
- if (sr[1]+sr[0]>=c) { // sr[1] -ve means inseriton.
- list.removeElementAt(--i);
- j--;
- } else {
- if (s<t)
- sr = (int[])deletion.elementAt(s);
- s++;
- }
- }
- }
- return pruned;