Mercurial > vba-linux
annotate src/win32/7zip/7z/CPP/7zip/Archive/Common/MultiStream.h @ 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 // MultiStream.h |
rlm@1 | 2 |
rlm@1 | 3 #ifndef __MULTISTREAM_H |
rlm@1 | 4 #define __MULTISTREAM_H |
rlm@1 | 5 |
rlm@1 | 6 #include "../../../Common/MyCom.h" |
rlm@1 | 7 #include "../../../Common/MyVector.h" |
rlm@1 | 8 #include "../../Archive/IArchive.h" |
rlm@1 | 9 |
rlm@1 | 10 class CMultiStream: |
rlm@1 | 11 public IInStream, |
rlm@1 | 12 public CMyUnknownImp |
rlm@1 | 13 { |
rlm@1 | 14 int _streamIndex; |
rlm@1 | 15 UInt64 _pos; |
rlm@1 | 16 UInt64 _seekPos; |
rlm@1 | 17 UInt64 _totalLength; |
rlm@1 | 18 public: |
rlm@1 | 19 struct CSubStreamInfo |
rlm@1 | 20 { |
rlm@1 | 21 CMyComPtr<IInStream> Stream; |
rlm@1 | 22 UInt64 Pos; |
rlm@1 | 23 UInt64 Size; |
rlm@1 | 24 }; |
rlm@1 | 25 CObjectVector<CSubStreamInfo> Streams; |
rlm@1 | 26 void Init() |
rlm@1 | 27 { |
rlm@1 | 28 _streamIndex = 0; |
rlm@1 | 29 _pos = 0; |
rlm@1 | 30 _seekPos = 0; |
rlm@1 | 31 _totalLength = 0; |
rlm@1 | 32 for (int i = 0; i < Streams.Size(); i++) |
rlm@1 | 33 _totalLength += Streams[i].Size; |
rlm@1 | 34 } |
rlm@1 | 35 |
rlm@1 | 36 MY_UNKNOWN_IMP1(IInStream) |
rlm@1 | 37 |
rlm@1 | 38 STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); |
rlm@1 | 39 STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); |
rlm@1 | 40 }; |
rlm@1 | 41 |
rlm@1 | 42 /* |
rlm@1 | 43 class COutMultiStream: |
rlm@1 | 44 public IOutStream, |
rlm@1 | 45 public CMyUnknownImp |
rlm@1 | 46 { |
rlm@1 | 47 int _streamIndex; // required stream |
rlm@1 | 48 UInt64 _offsetPos; // offset from start of _streamIndex index |
rlm@1 | 49 UInt64 _absPos; |
rlm@1 | 50 UInt64 _length; |
rlm@1 | 51 |
rlm@1 | 52 struct CSubStreamInfo |
rlm@1 | 53 { |
rlm@1 | 54 CMyComPtr<ISequentialOutStream> Stream; |
rlm@1 | 55 UInt64 Size; |
rlm@1 | 56 UInt64 Pos; |
rlm@1 | 57 }; |
rlm@1 | 58 CObjectVector<CSubStreamInfo> Streams; |
rlm@1 | 59 public: |
rlm@1 | 60 CMyComPtr<IArchiveUpdateCallback2> VolumeCallback; |
rlm@1 | 61 void Init() |
rlm@1 | 62 { |
rlm@1 | 63 _streamIndex = 0; |
rlm@1 | 64 _offsetPos = 0; |
rlm@1 | 65 _absPos = 0; |
rlm@1 | 66 _length = 0; |
rlm@1 | 67 } |
rlm@1 | 68 |
rlm@1 | 69 MY_UNKNOWN_IMP1(IOutStream) |
rlm@1 | 70 |
rlm@1 | 71 STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); |
rlm@1 | 72 STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); |
rlm@1 | 73 }; |
rlm@1 | 74 */ |
rlm@1 | 75 |
rlm@1 | 76 #endif |