Mercurial > vba-linux
annotate src/win32/7zip/7z/CPP/7zip/Common/OffsetStream.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 // OffsetStream.cpp |
rlm@1 | 2 |
rlm@1 | 3 #include "StdAfx.h" |
rlm@1 | 4 |
rlm@1 | 5 #include "Common/Defs.h" |
rlm@1 | 6 #include "OffsetStream.h" |
rlm@1 | 7 |
rlm@1 | 8 HRESULT COffsetOutStream::Init(IOutStream *stream, UInt64 offset) |
rlm@1 | 9 { |
rlm@1 | 10 _offset = offset; |
rlm@1 | 11 _stream = stream; |
rlm@1 | 12 return _stream->Seek(offset, STREAM_SEEK_SET, NULL); |
rlm@1 | 13 } |
rlm@1 | 14 |
rlm@1 | 15 STDMETHODIMP COffsetOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize) |
rlm@1 | 16 { |
rlm@1 | 17 return _stream->Write(data, size, processedSize); |
rlm@1 | 18 } |
rlm@1 | 19 |
rlm@1 | 20 STDMETHODIMP COffsetOutStream::Seek(Int64 offset, UInt32 seekOrigin, |
rlm@1 | 21 UInt64 *newPosition) |
rlm@1 | 22 { |
rlm@1 | 23 UInt64 absoluteNewPosition; |
rlm@1 | 24 if (seekOrigin == STREAM_SEEK_SET) |
rlm@1 | 25 offset += _offset; |
rlm@1 | 26 HRESULT result = _stream->Seek(offset, seekOrigin, &absoluteNewPosition); |
rlm@1 | 27 if (newPosition != NULL) |
rlm@1 | 28 *newPosition = absoluteNewPosition - _offset; |
rlm@1 | 29 return result; |
rlm@1 | 30 } |
rlm@1 | 31 |
rlm@1 | 32 STDMETHODIMP COffsetOutStream::SetSize(Int64 newSize) |
rlm@1 | 33 { |
rlm@1 | 34 return _stream->SetSize(_offset + newSize); |
rlm@1 | 35 } |