+ if(region[0]<0)\r
+ region[0] = 0;\r
+ if(region[1] <0)\r
+ region[1] = 0;\r
+ }\r
+ }\r
+ }\r
+ /**\r
+ * Adjust hidden column boundaries based on a series of column\r
+ * additions or deletions in visible regions.\r
+ * @param shiftrecord\r
+ * @return\r
+ */\r
+ public ShiftList compensateForEdits(ShiftList shiftrecord) {\r
+ if (shiftrecord!=null) {\r
+ Vector shifts = shiftrecord.shifts;\r
+ if (shifts!=null && shifts.size()>0) {\r
+ int shifted=0;\r
+ for (int i=0,j=shifts.size(); i<j; i++) {\r
+ int[] sh = (int[]) shifts.elementAt(i);\r
+ //compensateForEdit(shifted+sh[0], sh[1]);\r
+ compensateForDelEdits(shifted+sh[0], sh[1]);\r
+ shifted-=sh[1];\r
+ }\r
+ }\r
+ return shiftrecord.getInverse();\r
+ }\r
+ return null;\r
+ }\r
+ /**\r
+ * removes intersection of position,length ranges in deletions\r
+ * from the start,end regions marked in intervals.\r
+ * @param deletions\r
+ * @param intervals\r
+ * @return\r
+ */\r
+ private boolean pruneIntervalVector(Vector deletions, Vector intervals) {\r
+ boolean pruned=false;\r
+ int i=0,j=intervals.size()-1, s=0, t=deletions.size()-1;\r
+ int hr[]=(int[]) intervals.elementAt(i);\r
+ int sr[]=(int[]) deletions.elementAt(s);\r
+ while (i<=j && s<=t) {\r
+ boolean trailinghn=hr[1]>=sr[0];\r
+ if (!trailinghn) {\r
+ if (i<j)\r
+ hr=(int[]) intervals.elementAt(++i);\r
+ else\r
+ i++;\r
+ continue;\r
+ }\r
+ int endshift=sr[0]+sr[1]; // deletion ranges - -ve means an insert\r
+ if (endshift<hr[0] || endshift<sr[0]) { // leadinghc disjoint or not a deletion\r
+ if (s<t)\r
+ sr=(int[]) deletions.elementAt(++s);\r
+ else\r
+ s++;\r
+ continue;\r
+ }\r
+ boolean leadinghn=hr[0]>=sr[0];\r
+ boolean leadinghc=hr[0]<endshift;\r
+ boolean trailinghc=hr[1]<endshift;\r
+ if (leadinghn) {\r
+ if (trailinghc) {// deleted hidden region.\r
+ intervals.removeElementAt(i);\r
+ pruned=true;\r
+ j--;\r
+ if (i<=j)\r
+ hr=(int[]) intervals.elementAt(i);\r
+ continue;\r
+ }\r
+ if (leadinghc) {\r
+ hr[0]=endshift; // clip c terminal region\r
+ leadinghn=!leadinghn;\r
+ pruned=true;\r
+ }\r
+ }\r
+ if (!leadinghn) {\r
+ if (trailinghc) {\r
+ if (trailinghn) {\r
+ hr[1]=sr[0]-1;\r
+ pruned=true;\r