annotate src/win32/7zip/7z/CPP/7zip/Common/StreamObjects.cpp @ 1:f9f4f1b99eed

importing src directory
author Robert McIntyre <rlm@mit.edu>
date Sat, 03 Mar 2012 10:31:27 -0600
parents
children
rev   line source
rlm@1 1 // StreamObjects.cpp
rlm@1 2
rlm@1 3 #include "StdAfx.h"
rlm@1 4
rlm@1 5 #include "StreamObjects.h"
rlm@1 6 #include "../../Common/Defs.h"
rlm@1 7
rlm@1 8
rlm@1 9 STDMETHODIMP CSequentialInStreamImp::Read(void *data, UInt32 size, UInt32 *processedSize)
rlm@1 10 {
rlm@1 11 size_t rem = _size - _pos;
rlm@1 12 if (size < rem)
rlm@1 13 rem = (size_t)size;
rlm@1 14 memcpy(data, _dataPointer + _pos, rem);
rlm@1 15 _pos += rem;
rlm@1 16 if (processedSize != NULL)
rlm@1 17 *processedSize = (UInt32)rem;
rlm@1 18 return S_OK;
rlm@1 19 }
rlm@1 20
rlm@1 21
rlm@1 22 void CWriteBuffer::Write(const void *data, size_t size)
rlm@1 23 {
rlm@1 24 size_t newCapacity = _size + size;
rlm@1 25 _buffer.EnsureCapacity(newCapacity);
rlm@1 26 memcpy(_buffer + _size, data, size);
rlm@1 27 _size += size;
rlm@1 28 }
rlm@1 29
rlm@1 30 STDMETHODIMP CSequentialOutStreamImp::Write(const void *data, UInt32 size, UInt32 *processedSize)
rlm@1 31 {
rlm@1 32 _writeBuffer.Write(data, (size_t)size);
rlm@1 33 if(processedSize != NULL)
rlm@1 34 *processedSize = size;
rlm@1 35 return S_OK;
rlm@1 36 }
rlm@1 37
rlm@1 38 STDMETHODIMP CSequentialOutStreamImp2::Write(const void *data, UInt32 size, UInt32 *processedSize)
rlm@1 39 {
rlm@1 40 size_t rem = _size - _pos;
rlm@1 41 if (size < rem)
rlm@1 42 rem = (size_t)size;
rlm@1 43 memcpy(_buffer + _pos, data, rem);
rlm@1 44 _pos += rem;
rlm@1 45 if (processedSize != NULL)
rlm@1 46 *processedSize = (UInt32)rem;
rlm@1 47 return (rem == size ? S_OK : E_FAIL);
rlm@1 48 }
rlm@1 49
rlm@1 50 STDMETHODIMP CSequentialInStreamSizeCount::Read(void *data, UInt32 size, UInt32 *processedSize)
rlm@1 51 {
rlm@1 52 UInt32 realProcessedSize;
rlm@1 53 HRESULT result = _stream->Read(data, size, &realProcessedSize);
rlm@1 54 _size += realProcessedSize;
rlm@1 55 if (processedSize != 0)
rlm@1 56 *processedSize = realProcessedSize;
rlm@1 57 return result;
rlm@1 58 }
rlm@1 59
rlm@1 60 STDMETHODIMP CSequentialOutStreamSizeCount::Write(const void *data, UInt32 size, UInt32 *processedSize)
rlm@1 61 {
rlm@1 62 UInt32 realProcessedSize;
rlm@1 63 HRESULT result = _stream->Write(data, size, &realProcessedSize);
rlm@1 64 _size += realProcessedSize;
rlm@1 65 if (processedSize != 0)
rlm@1 66 *processedSize = realProcessedSize;
rlm@1 67 return result;
rlm@1 68 }