)
49 #define CP CCompressionProcessor 50 #define CSP CCompressionStreamProcessor 62: m_Stream(stream), m_Reader(read_sp), m_Writer(write_sp), m_Buf(0)
72streamsize read_bufsize = 0, write_bufsize = 0;
119 #define msg_where "CCompressionStreambuf::~CCompressionStreambuf: " 120 #define msg_overflow "Overflow occurred, lost some processed data "\
121"through call Finalize()"
122 #define msg_error "Finalize() failed" 129sp->m_Processor->End(abandon);
130sp->m_State = CSP::eDone;
135 if( sp->m_State == CSP::eInit ||
136sp->m_State == CSP::eActive ) {
138 if( sp->m_LastStatus == CP::eStatus_Overflow ) {
141 if( sp->m_LastStatus == CP::eStatus_Error ) {
146sp->m_Processor->End();
147sp->m_State = CSP::eDone;
151sp->m_Processor->End(1
);
152sp->m_State = CSP::eDone;
172sp->m_State != CSP::eDone &&
173!(sp->m_State == CSP::eFinalize && sp->m_LastStatus == CP::eStatus_EndOfData)
180status +=
m_Stream->rdbuf()->PUBSYNC();
181 return(status < 0 ? -1 : 0);
193 if( sp->m_LastStatus == CP::eStatus_Error ) {
219 if( sp->m_LastStatus == CP::eStatus_Error ) {
223 if( sp->m_State == CSP::eFinalize ) {
233 if( sp->m_LastStatus == CP::eStatus_Error ) {
239sp->m_State = CSP::eFinalize;
249 if( sp->m_LastStatus == CP::eStatus_Error ) {
253 if( sp->m_LastStatus == CP::eStatus_EndOfData ) {
265 size_tout_size = 0, out_available = 0;
273out_size = sp->m_OutBuf + sp->m_OutBufSize -
buf;
277 if( sp->m_State == CSP::eFinalize ) {
279sp->m_LastStatus = sp->m_Processor->Finish(
buf, out_size, &out_available);
282 _VERIFY(sp->m_State == CSP::eActive);
283sp->m_LastStatus = sp->m_Processor->Flush(
buf, out_size, &out_available);
285 if( sp->m_LastStatus == CP::eStatus_EndOfData ) {
286sp->m_State = CSP::eFinalize;
290 if( sp->m_LastStatus == CP::eStatus_Error ) {
296setg(sp->m_OutBuf, gptr(), egptr() + out_available);
299sp->m_End += out_available;
306}
while(sp->m_LastStatus == CP::eStatus_Repeat ||
307(out_available && (sp->m_LastStatus == CP::eStatus_Success ||
308sp->m_LastStatus == CP::eStatus_Overflow))
364 size_tin_len, in_available, out_size, out_available;
390 #ifdef NCBI_COMPILER_WORKSHOP 412&in_available, &out_available);
420in_available = in_len;
441}
while( !out_available );
449 const char* in_buf = pbase();
450 const size_t count= pptr() - pbase();
451 size_tin_available =
count;
470 while( in_available ) {
472 size_tout_available = 0;
477&in_available, &out_available);
498pbump(-(
int)
count);
518 if( n_write != to_write ) {
551 size_tblock_size =
min(
size_t(
count-
done),
size_t(epptr()-pptr()+1));
553memcpy(pptr(),
buf+
done, block_size);
555pbump((
int)block_size);
584 size_tblock_size =
min(
size_t(
count-
done),
size_t(egptr()-gptr()));
587memcpy(
buf+
done, gptr(), block_size);
591 if( block_size ==
size_t(egptr() - gptr()) ) {
597gbump((
int)block_size);
element_type * get(void) const
Get pointer.
element_type * release(void)
Release will release ownership of pointer to caller.
CCompressionStreamProcessor * m_Writer
CT_CHAR_TYPE * m_OutBuf
Buffer of processed data.
int Finish(CCompressionStream::EDirection dir)
EState m_State
Stream processor state.
bool Process(CCompressionStream::EDirection dir)
int Flush(CCompressionStream::EDirection dir)
bool WriteOutBufToStream(bool force_write=false)
CCompressionStreamProcessor * m_Reader
streamsize m_OutBufSize
Processed data buffer size.
virtual CT_INT_TYPE underflow(void)
CT_CHAR_TYPE * m_Begin
Begin and end of the pre/post.
bool IsStreamProcessorOkay(CCompressionStream::EDirection dir) const
CCompressionStreamProcessor * GetStreamProcessor(CCompressionStream::EDirection dir) const
bool ProcessStreamRead(void)
virtual streamsize xsgetn(CT_CHAR_TYPE *buf, streamsize n)
void Init(void)
(Re)Initialize stream processor.
int Sync(CCompressionStream::EDirection dir)
int Finalize(CCompressionStream::EDirection dir=CCompressionStream::eReadWrite)
bool ProcessStreamWrite(void)
CCompressionStreambuf(CNcbiIos *stream, CCompressionStreamProcessor *read_stream_processor, CCompressionStreamProcessor *write_stream_processor)
virtual ~CCompressionStreambuf(void)
virtual streamsize xsputn(const CT_CHAR_TYPE *buf, streamsize count)
CCompressionProcessor::EStatus m_LastStatus
Last compressor status.
CCompressionProcessor * m_Processor
(De)compression processor.
virtual CT_INT_TYPE overflow(CT_INT_TYPE c)
bool IsStreamProcessorHaveData(CCompressionStream::EDirection dir) const
streamsize m_InBufSize
Unprocessed data buffer size.
EDirection
Stream processing direction.
CT_CHAR_TYPE * m_InBuf
Buffer of unprocessed data.
CT_CHAR_TYPE * m_End
processed data in the buffer.
@ eWrite
Writing into stream.
@ eRead
Reading from stream.
virtual EStatus Process(const char *in_buf, size_t in_len, char *out_buf, size_t out_size, size_t *in_avail, size_t *out_avail)=0
Compress/decompress as much data as possible, and stops when the input buffer becomes empty or the ou...
virtual EStatus Flush(char *out_buf, size_t out_size, size_t *out_avail)=0
Flush compressed/decompressed data from the output buffer.
virtual bool AllowEmptyData() const =0
Return TRUE if fAllowEmptyData flag is set for this compression.
#define ERR_COMPRESS(subcode, message)
Macro to report errors in compression API.
#define COMPRESS_HANDLE_EXCEPTIONS(subcode, message)
Macro to catch and handle exceptions (from streams in the destructor)
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
IO_PREFIX::ios CNcbiIos
Portable alias for ios.
Definition of all error codes used in util (xutil.lib).
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4