/** * relative seek **/ ::std::streampos seekoff(::std::streamoff off, ::std::ios_base::seekdir way, ::std::ios_base::openmode which) { // absolute seek if ( way == ::std::ios_base::beg ) { return seekpos(off,which); } // seek relative to current position else if ( way == ::std::ios_base::cur ) { if ( which == std::ios_base::in ) { return seekpos(readpos + (gptr()-eback()),which); } else if ( which == std::ios_base::out ) { return seekpos(writepos + (pptr()-pbase()),which); } else { return -1; } } // seek relative to end of file else if ( way == ::std::ios_base::end ) { off_t const endoff = fd->getFileSize(); return seekpos(endoff+off,which); } else { return -1; } }
MemoryInputStreamBuffer( std::string const & rfn, int64_t const rblocksize, uint64_t const rputbackspace = 0 ) : fd(doOpen(rfn)), filesize(fd->getFileSize()), blocksize((rblocksize < 0) ? getDefaultBlockSize() : rblocksize), putbackspace(rputbackspace), buffer(putbackspace + blocksize,false), symsread(0) { init(false); }