ManagingReferenceOrderedView optimization: don't allow a fresh RefMetaDataTracker in the frequent case where there's no reference meta data

This commit is contained in:
Mark DePristo 2013-01-13 20:44:28 -05:00
parent 7eea6b8f92
commit b8b2b9b2de
2 changed files with 10 additions and 5 deletions

View File

@ -77,13 +77,17 @@ public class ManagingReferenceOrderedView implements ReferenceOrderedView {
* @return A tracker containing information about this locus. * @return A tracker containing information about this locus.
*/ */
public RefMetaDataTracker getReferenceOrderedDataAtLocus( GenomeLoc loc, ReferenceContext referenceContext ) { public RefMetaDataTracker getReferenceOrderedDataAtLocus( GenomeLoc loc, ReferenceContext referenceContext ) {
List<RODRecordList> bindings = states.isEmpty() ? Collections.<RODRecordList>emptyList() : new ArrayList<RODRecordList>(states.size()); if ( states.isEmpty() )
return RefMetaDataTracker.EMPTY_TRACKER;
else {
List<RODRecordList> bindings = new ArrayList<RODRecordList>(states.size());
for ( ReferenceOrderedDataState state: states ) for ( ReferenceOrderedDataState state: states )
// todo -- warning, I removed the reference to the name from states // todo -- warning, I removed the reference to the name from states
bindings.add( state.iterator.seekForward(loc) ); bindings.add( state.iterator.seekForward(loc) );
return new RefMetaDataTracker(bindings); return new RefMetaDataTracker(bindings);
}
} }
/** /**

View File

@ -61,6 +61,7 @@ public class RefMetaDataTracker {
final Map<String, RODRecordList> bindings; final Map<String, RODRecordList> bindings;
final protected static Logger logger = Logger.getLogger(RefMetaDataTracker.class); final protected static Logger logger = Logger.getLogger(RefMetaDataTracker.class);
public final static RefMetaDataTracker EMPTY_TRACKER = new RefMetaDataTracker();
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
// //