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() {
return hangers.size() - 1;
//return hangers.size() - 1;
return isEmpty() ? 0 : hangers.size() - 1;
}
protected int getOffset(GenomeLoc loc) {
@ -101,6 +102,10 @@ public class RefHanger<T> {
return hangers.get(getRightOffset()).loc;
}
public GenomeLoc getLoc(int i) {
return hangers.get(i).loc;
}
public boolean hasLocation(GenomeLoc loc) {
return !isEmpty() && loc.isBetween(getLeftLoc(), getRightLoc());
}
@ -160,6 +165,14 @@ public class RefHanger<T> {
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
@ -178,6 +191,10 @@ public class RefHanger<T> {
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) {
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) {
ensurePos(loc);
extendData(loc, datum);