X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Fapi%2Finternal%2Fio%2FRollingBuffer_p.cpp;h=c3f709d6fdf5ad1a13ac998b80ef95bdac7da95b;hb=e4cb7afa9b8774b4db39db1c60607460676419d3;hp=ab29253370036d0fb69f836d8c0e798b6d251fda;hpb=d619466092e2d1b2c89c346f69d863875fd8ff8d;p=bamtools.git diff --git a/src/api/internal/io/RollingBuffer_p.cpp b/src/api/internal/io/RollingBuffer_p.cpp index ab29253..c3f709d 100644 --- a/src/api/internal/io/RollingBuffer_p.cpp +++ b/src/api/internal/io/RollingBuffer_p.cpp @@ -1,9 +1,20 @@ +// *************************************************************************** +// RollingBuffer_p.cpp (c) 2011 Derek Barnett +// Marth Lab, Department of Biology, Boston College +// --------------------------------------------------------------------------- +// Last modified: 10 November 2011 (DB) +// --------------------------------------------------------------------------- +// Provides a dynamic I/O FIFO byte queue, which removes bytes as they are +// read from the front of the buffer and grows to accept bytes being written +// to buffer end. +// +// implementation note: basically a 'smart' wrapper around 1..* ByteArrays +// *************************************************************************** + #include "api/internal/io/RollingBuffer_p.h" using namespace BamTools; using namespace BamTools::Internal; -#include // for debug - #include #include #include @@ -231,42 +242,6 @@ size_t RollingBuffer::ReadLine(char* dest, size_t max) { return bytesReadSoFar; } -string RollingBuffer::ReadLine(size_t max) { - - ByteArray result; - result.Resize(max); - - size_t numBytesRead = 0; - - // if max not provided, we need to read incrementally - if ( max == 0 ) { - max = UINT_MAX; - - // make sure we leave room for null terminator - result.Resize(1); - - size_t readResult; - do { - result.Resize(std::min(max, result.Size()+m_bufferGrowth)); - readResult = ReadLine(result.Data() + numBytesRead, result.Size() - numBytesRead); - if ( readResult > 0 || numBytesRead == 0 ) - numBytesRead += readResult; - } while ( readResult == m_bufferGrowth && result[numBytesRead-1] != '\n'); - } - - // otherwise read line with provided max - else numBytesRead = ReadLine(result.Data(), result.Size()); - - // adjust byte array depending on numBytesRead - if ( numBytesRead == 0 ) - result.Clear(); - else - result.Resize(numBytesRead); - - // return string from byte array - return string(result.ConstData(), result.Size()); -} - const char* RollingBuffer::ReadPointer(void) const { // return null if empty buffer