package htsjdk.tribble;
import htsjdk.samtools.util.CloserUtil;
import htsjdk.samtools.util.LocationAware;
import htsjdk.tribble.readers.PositionalBufferedStream;
import java.io.IOException;
import java.io.InputStream;
/**
* Implements common methods of {@link FeatureCodec}s that read from {@link htsjdk.tribble.readers.PositionalBufferedStream}s.
* @author mccowan
*/
abstract public class BinaryFeatureCodec<T extends Feature> implements FeatureCodec<T, PositionalBufferedStream> {
@Override
public PositionalBufferedStream makeSourceFromStream(final InputStream bufferedInputStream) {
if (bufferedInputStream instanceof PositionalBufferedStream)
return (PositionalBufferedStream) bufferedInputStream;
else
return new PositionalBufferedStream(bufferedInputStream);
}
/** {@link PositionalBufferedStream} is already {@link LocationAware}. */
@Override
public LocationAware makeIndexableSourceFromStream(final InputStream bufferedInputStream) {
return makeSourceFromStream(bufferedInputStream);
}
@Override
public void close(final PositionalBufferedStream source) {
CloserUtil.close(source);
}
@Override
public boolean isDone(final PositionalBufferedStream source) {
try {
return source.isDone();
} catch (final IOException e) {
throw new RuntimeException("Failure reading from stream.", e);
}
}
}