Added convenience functions for RefHanger

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@585 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
depristo 2009-05-01 21:14:40 +00:00
parent 7ed496b859
commit fd496159a8
1 changed files with 29 additions and 1 deletions

View File

@ -85,7 +85,8 @@ public class RefHanger<T> {
} }
protected int getRightOffset() { protected int getRightOffset() {
return hangers.size() - 1; //return hangers.size() - 1;
return isEmpty() ? 0 : hangers.size() - 1;
} }
protected int getOffset(GenomeLoc loc) { protected int getOffset(GenomeLoc loc) {
@ -101,6 +102,10 @@ public class RefHanger<T> {
return hangers.get(getRightOffset()).loc; return hangers.get(getRightOffset()).loc;
} }
public GenomeLoc getLoc(int i) {
return hangers.get(i).loc;
}
public boolean hasLocation(GenomeLoc loc) { public boolean hasLocation(GenomeLoc loc) {
return !isEmpty() && loc.isBetween(getLeftLoc(), getRightLoc()); return !isEmpty() && loc.isBetween(getLeftLoc(), getRightLoc());
} }
@ -160,6 +165,14 @@ public class RefHanger<T> {
return hangers.size(); return hangers.size();
} }
public String toString() {
StringBuilder s = new StringBuilder();
for ( int i = 0; i < size(); i++) {
s.append(String.format("%s => %s%n", getLoc(i), Utils.join(",", getHanger(i).data)));
}
return s.toString();
}
// ----------------------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------------------
// //
// Adding data to the left and right // Adding data to the left and right
@ -178,6 +191,10 @@ public class RefHanger<T> {
hangers.add(0, new Hanger(pos, data)); hangers.add(0, new Hanger(pos, data));
} }
public void pushLeft(GenomeLoc pos, List<T> data) {
hangers.add(0, new Hanger(pos, new ArrayList<T>(data)));
}
public void pushRight(GenomeLoc pos) { public void pushRight(GenomeLoc pos) {
pushRight(pos, new ArrayList<T>()); pushRight(pos, new ArrayList<T>());
} }
@ -213,6 +230,17 @@ public class RefHanger<T> {
} }
} }
public void addDataList(List<GenomeLoc> positions, List<List<T>> dataByPos) {
assert (positions.size() == dataByPos.size());
for (int i = 0; i < positions.size(); i++) {
GenomeLoc pos = positions.get(i);
for ( T datum : dataByPos.get(i) ) {
expandingPut1(pos, datum);
}
}
}
public void expandingPut1(final GenomeLoc loc, T datum) { public void expandingPut1(final GenomeLoc loc, T datum) {
ensurePos(loc); ensurePos(loc);
extendData(loc, datum); extendData(loc, datum);