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 }
|