⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bytesrc.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
CFileSourceCollector::CFileSourceCollector(CConstRef<CFileByteSource> s,                                           TFilePos start,                                           CRef<CSubSourceCollector> parent)    : CSubSourceCollector(parent),      m_FileSource(s),      m_Start(start),      m_Length(0){}CFileSourceCollector::~CFileSourceCollector(void){}void CFileSourceCollector::AddChunk(const char* buffer,                                    size_t bufferLength){    CSubSourceCollector::AddChunk(buffer, bufferLength);    m_Length += TFileOff(bufferLength);}CRef<CByteSource> CFileSourceCollector::GetSource(void){    return CRef<CByteSource>(new CSubFileByteSource(*m_FileSource,                                  m_Start, m_Length));}/////////////////////////////////////////////////////////////////////////////// CMemoryChunk/////////////////////////////////////////////////////////////////////////////CMemoryChunk::CMemoryChunk(const char* data, size_t dataSize,                           CRef<CMemoryChunk> prevChunk)    : m_Data(new char[dataSize]),      m_DataSize(dataSize){    memcpy(m_Data, data, dataSize);    if ( prevChunk ) {        prevChunk->m_NextChunk = this;    }    prevChunk = this;}CMemoryChunk::~CMemoryChunk(void){    delete m_Data;}/////////////////////////////////////////////////////////////////////////////// CMemoryByteSource/////////////////////////////////////////////////////////////////////////////CMemoryByteSource::CMemoryByteSource(CConstRef<CMemoryChunk> bytes)    : m_Bytes(bytes){}CMemoryByteSource::~CMemoryByteSource(void){}CRef<CByteSourceReader> CMemoryByteSource::Open(void){    return CRef<CByteSourceReader>(new CMemoryByteSourceReader(m_Bytes));}/////////////////////////////////////////////////////////////////////////////// CMemoryByteSourceReader/////////////////////////////////////////////////////////////////////////////CMemoryByteSourceReader::CMemoryByteSourceReader(CConstRef<CMemoryChunk> bytes)    : m_CurrentChunk(bytes), m_CurrentChunkOffset(0){}CMemoryByteSourceReader::~CMemoryByteSourceReader(void){}size_t CMemoryByteSourceReader::GetCurrentChunkAvailable(void) const{    return m_CurrentChunk->GetDataSize() - m_CurrentChunkOffset;}size_t CMemoryByteSourceReader::Read(char* buffer, size_t bufferLength){    while ( m_CurrentChunk ) {        size_t avail = GetCurrentChunkAvailable();        if ( avail == 0 ) {            // End of current chunk            CConstRef<CMemoryChunk> rest = m_CurrentChunk->GetNextChunk();            m_CurrentChunk = rest;            m_CurrentChunkOffset = 0;        }        else {            size_t c = min(bufferLength, avail);            memcpy(buffer, m_CurrentChunk->GetData(m_CurrentChunkOffset), c);            m_CurrentChunkOffset += c;            return c;        }    }    return 0;}bool CMemoryByteSourceReader::EndOfData(void) const{    return !m_CurrentChunk;}/////////////////////////////////////////////////////////////////////////////// CMemorySourceCollector/////////////////////////////////////////////////////////////////////////////CMemorySourceCollector::CMemorySourceCollector(CRef<CSubSourceCollector>                                               parent)    : CSubSourceCollector(parent){}CMemorySourceCollector::~CMemorySourceCollector(void){}void CMemorySourceCollector::AddChunk(const char* buffer,                                      size_t bufferLength){    CSubSourceCollector::AddChunk(buffer, bufferLength);    m_LastChunk = new CMemoryChunk(buffer, bufferLength, m_LastChunk);    if ( !m_FirstChunk ) {        m_FirstChunk = m_LastChunk;    }}CRef<CByteSource> CMemorySourceCollector::GetSource(void){    return CRef<CByteSource>(new CMemoryByteSource(m_FirstChunk));}/////////////////////////////////////////////////////////////////////////////// CWriterSourceCollector/////////////////////////////////////////////////////////////////////////////CWriterSourceCollector::CWriterSourceCollector(IWriter*    writer,                                                EOwnership  own,                                        CRef<CSubSourceCollector>  parent)    : CSubSourceCollector(parent),      m_Writer(writer),      m_Own(own){    return;}CWriterSourceCollector::~CWriterSourceCollector(){    if ( m_Own ) {        delete m_Writer;    }}void CWriterSourceCollector::SetWriter(IWriter*   writer,                                        EOwnership own){    if ( m_Own ) {        delete m_Writer;    }    m_Writer = writer;    m_Own = own;    }void CWriterSourceCollector::AddChunk(const char* buffer, size_t bufferLength){    size_t written;    m_Writer->Write(buffer, bufferLength, &written);}CRef<CByteSource> CWriterSourceCollector::GetSource(void){    // Return NULL byte source, this happens because we cannot derive    // any readers from IWriter (one way interface)    return CRef<CByteSource>();}/////////////////////////////////////////////////////////////////////////////// CWriterByteSourceReader/////////////////////////////////////////////////////////////////////////////CWriterByteSourceReader::CWriterByteSourceReader(CNcbiIstream* stream,                                                 IWriter* writer)    : CStreamByteSourceReader(0 /* CByteSource* */, stream),      m_Writer(writer){    _ASSERT(writer);}CWriterByteSourceReader::~CWriterByteSourceReader(void){}CRef<CSubSourceCollector> CWriterByteSourceReader::SubSource(size_t /*prepend*/,                                   CRef<CSubSourceCollector> parent){    return         CRef<CSubSourceCollector>(            new CWriterSourceCollector(m_Writer, eNoOwnership, parent));}/////////////////////////////////////////////////////////////////////////////// CWriterCopyByteSourceReader/////////////////////////////////////////////////////////////////////////////CWriterCopyByteSourceReader::CWriterCopyByteSourceReader(CByteSourceReader* reader, IWriter* writer)    : m_Reader(reader),      m_Writer(writer){    _ASSERT(reader);    _ASSERT(writer);}CWriterCopyByteSourceReader::~CWriterCopyByteSourceReader(void){}size_t CWriterCopyByteSourceReader::Read(char* buffer, size_t bufferLength){    return m_Reader->Read(buffer, bufferLength);}bool CWriterCopyByteSourceReader::EndOfData(void) const{    return m_Reader->EndOfData();}CRef<CSubSourceCollector>CWriterCopyByteSourceReader::SubSource(size_t /*prepend*/,                                       CRef<CSubSourceCollector> parent){    return         CRef<CSubSourceCollector>(            new CWriterSourceCollector(m_Writer, eNoOwnership, parent));}END_NCBI_SCOPE/* * =========================================================================== * $Log: bytesrc.cpp,v $ * Revision 1000.3  2004/06/01 19:39:53  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.33 * * Revision 1.33  2004/05/17 21:06:02  gorelenk * Added include of PCH ncbi_pch.hpp * * Revision 1.32  2003/12/31 20:51:33  gouriano * added possibility to seek (when possible) in CByteSourceReader * * Revision 1.31  2003/11/19 15:40:09  vasilche * Added possibility to pushback data to CByteSourceReader. * * Revision 1.30  2003/10/20 21:18:18  ivanov * Get rid of compilation warning * * Revision 1.29  2003/10/14 18:28:33  vasilche * Added full set of explicit constructors/destructors to all readers and sources. * Added CWriterCopyByteSourceReader for copying data from another reader object. * * Revision 1.28  2003/10/01 21:14:55  ivanov * Formal code rearrangement * * Revision 1.27  2003/10/01 19:27:57  kuznets * Fixed compilation bug with CIRByteSourceReader::m_EOF * * Revision 1.26  2003/10/01 18:45:33  kuznets * +CIRByteSourceReader * * Revision 1.25  2003/09/30 20:37:54  kuznets * Class names clean up (Removed I from CI prefix for classes based in * interfaces) * * Revision 1.24  2003/09/30 20:24:03  kuznets * +CIWriterByteSourceReader * * Revision 1.23  2003/09/30 20:08:02  kuznets * +CStreamRedirectByteSourceReader implementation * * Revision 1.22  2003/09/25 16:38:03  kuznets * + IWriter based sub source collector * * Revision 1.21  2003/09/25 13:59:40  ucko * Pass C(Const)Ref by value, not reference! * * Revision 1.20  2003/09/25 12:47:36  kuznets * Added subsource chaining * * Revision 1.19  2003/02/26 21:32:00  gouriano * modify C++ exceptions thrown by this library * * Revision 1.18  2002/11/27 21:08:52  lavr * Take advantage of CStreamUtils::Readsome() in CStreamByteSource::Read() * * Revision 1.17  2002/11/04 21:29:22  grichenk * Fixed usage of const CRef<> and CRef<> constructor * * Revision 1.16  2002/01/17 17:57:14  vakatov * [GCC > 3.0]  CStreamByteSourceReader::Read() -- use "readsome()", thus * avoid blocking on timeout at EOF for non-blocking input stream. * * Revision 1.15  2001/08/15 18:43:34  lavr * FIXED CStreamByteSourceReader::Read: * ios::clear() has to have no arguments in order to clear EOF state. * * Revision 1.14  2001/05/30 19:55:35  grichenk * Fixed one more non-blocking stream reading bug, added comments * * Revision 1.13  2001/05/29 19:35:23  grichenk * Fixed non-blocking stream reading for GCC * * Revision 1.12  2001/05/17 15:07:15  lavr * Typos corrected * * Revision 1.11  2001/05/16 17:55:40  grichenk * Redesigned support for non-blocking stream read operations * * Revision 1.10  2001/05/11 20:41:19  grichenk * Added support for non-blocking stream reading * * Revision 1.9  2001/05/11 14:00:21  grichenk * CStreamByteSourceReader::Read() -- use readsome() instead of read() * * Revision 1.8  2001/01/05 20:09:05  vasilche * Added util directory for various algorithms and utility classes. * * Revision 1.7  2000/11/01 20:38:37  vasilche * Removed ECanDelete enum and related constructors. * * Revision 1.6  2000/09/01 13:16:14  vasilche * Implemented class/container/choice iterators. * Implemented CObjectStreamCopier for copying data without loading into memory * * Revision 1.5  2000/07/03 18:42:42  vasilche * Added interface to typeinfo via CObjectInfo and CConstObjectInfo. * Reduced header dependency. * * Revision 1.4  2000/06/22 16:13:48  thiessen * change IFStreamFlags to macro * * Revision 1.3  2000/05/03 14:38:13  vasilche * SERIAL: added support for delayed reading to generated classes. * DATATOOL: added code generation for delayed reading. * * Revision 1.2  2000/04/28 19:14:37  vasilche * Fixed stream position and offset typedefs. * * Revision 1.1  2000/04/28 16:58:11  vasilche * Added classes CByteSource and CByteSourceReader for generic reading. * Added delayed reading of choice variants. * * =========================================================================== */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -