tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

MultiStream.h (1860B)


      1 // MultiStream.h
      2 
      3 #ifndef __MULTI_STREAM_H
      4 #define __MULTI_STREAM_H
      5 
      6 #include "../../../Common/MyCom.h"
      7 #include "../../../Common/MyVector.h"
      8 
      9 #include "../../IStream.h"
     10 
     11 class CMultiStream:
     12  public IInStream,
     13  public CMyUnknownImp
     14 {
     15  UInt64 _pos;
     16  UInt64 _totalLength;
     17  unsigned _streamIndex;
     18 
     19 public:
     20 
     21  struct CSubStreamInfo
     22  {
     23    CMyComPtr<IInStream> Stream;
     24    UInt64 Size;
     25    UInt64 GlobalOffset;
     26    UInt64 LocalPos;
     27 
     28    CSubStreamInfo(): Size(0), GlobalOffset(0), LocalPos(0) {}
     29  };
     30  
     31  CObjectVector<CSubStreamInfo> Streams;
     32  
     33  HRESULT Init()
     34  {
     35    UInt64 total = 0;
     36    FOR_VECTOR (i, Streams)
     37    {
     38      CSubStreamInfo &s = Streams[i];
     39      s.GlobalOffset = total;
     40      total += Streams[i].Size;
     41      RINOK(s.Stream->Seek(0, STREAM_SEEK_CUR, &s.LocalPos));
     42    }
     43    _totalLength = total;
     44    _pos = 0;
     45    _streamIndex = 0;
     46    return S_OK;
     47  }
     48 
     49  MY_UNKNOWN_IMP1(IInStream)
     50 
     51  STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
     52  STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
     53 };
     54 
     55 /*
     56 class COutMultiStream:
     57  public IOutStream,
     58  public CMyUnknownImp
     59 {
     60  unsigned _streamIndex; // required stream
     61  UInt64 _offsetPos; // offset from start of _streamIndex index
     62  UInt64 _absPos;
     63  UInt64 _length;
     64 
     65  struct CSubStreamInfo
     66  {
     67    CMyComPtr<ISequentialOutStream> Stream;
     68    UInt64 Size;
     69    UInt64 Pos;
     70 };
     71  CObjectVector<CSubStreamInfo> Streams;
     72 public:
     73  CMyComPtr<IArchiveUpdateCallback2> VolumeCallback;
     74  void Init()
     75  {
     76    _streamIndex = 0;
     77    _offsetPos = 0;
     78    _absPos = 0;
     79    _length = 0;
     80  }
     81 
     82  MY_UNKNOWN_IMP1(IOutStream)
     83 
     84  STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
     85  STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
     86 };
     87 */
     88 
     89 #endif