summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/lzma/CPP/7zip/Common/LimitedStreams.h
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/lzma/CPP/7zip/Common/LimitedStreams.h')
-rw-r--r--3rdparty/lzma/CPP/7zip/Common/LimitedStreams.h135
1 files changed, 52 insertions, 83 deletions
diff --git a/3rdparty/lzma/CPP/7zip/Common/LimitedStreams.h b/3rdparty/lzma/CPP/7zip/Common/LimitedStreams.h
index fb1ac3cd6bd..69fcdcdb0e5 100644
--- a/3rdparty/lzma/CPP/7zip/Common/LimitedStreams.h
+++ b/3rdparty/lzma/CPP/7zip/Common/LimitedStreams.h
@@ -1,17 +1,19 @@
// LimitedStreams.h
-#ifndef __LIMITED_STREAMS_H
-#define __LIMITED_STREAMS_H
+#ifndef ZIP7_INC_LIMITED_STREAMS_H
+#define ZIP7_INC_LIMITED_STREAMS_H
#include "../../Common/MyBuffer.h"
#include "../../Common/MyCom.h"
#include "../../Common/MyVector.h"
#include "../IStream.h"
-class CLimitedSequentialInStream:
- public ISequentialInStream,
- public CMyUnknownImp
-{
+#include "StreamUtils.h"
+
+Z7_CLASS_IMP_COM_1(
+ CLimitedSequentialInStream
+ , ISequentialInStream
+)
CMyComPtr<ISequentialInStream> _stream;
UInt64 _size;
UInt64 _pos;
@@ -25,26 +27,22 @@ public:
_pos = 0;
_wasFinished = false;
}
-
- MY_UNKNOWN_IMP1(ISequentialInStream)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
UInt64 GetSize() const { return _pos; }
UInt64 GetRem() const { return _size - _pos; }
bool WasFinished() const { return _wasFinished; }
};
-class CLimitedInStream:
- public IInStream,
- public CMyUnknownImp
-{
+
+Z7_CLASS_IMP_IInStream(
+ CLimitedInStream
+)
CMyComPtr<IInStream> _stream;
UInt64 _virtPos;
UInt64 _physPos;
UInt64 _size;
UInt64 _startOffset;
- HRESULT SeekToPhys() { return _stream->Seek(_physPos, STREAM_SEEK_SET, NULL); }
+ HRESULT SeekToPhys() { return InStream_SeekSet(_stream, _physPos); }
public:
void SetStream(IInStream *stream) { _stream = stream; }
HRESULT InitAndSeek(UInt64 startOffset, UInt64 size)
@@ -55,21 +53,15 @@ public:
_size = size;
return SeekToPhys();
}
-
- MY_UNKNOWN_IMP2(ISequentialInStream, IInStream)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
-
HRESULT SeekToStart() { return Seek(0, STREAM_SEEK_SET, NULL); }
};
HRESULT CreateLimitedInStream(IInStream *inStream, UInt64 pos, UInt64 size, ISequentialInStream **resStream);
-class CClusterInStream:
- public IInStream,
- public CMyUnknownImp
-{
+
+Z7_CLASS_IMP_IInStream(
+ CClusterInStream
+)
UInt64 _virtPos;
UInt64 _physPos;
UInt32 _curRem;
@@ -80,7 +72,7 @@ public:
CRecordVector<UInt32> Vector;
UInt64 StartOffset;
- HRESULT SeekToPhys() { return Stream->Seek(_physPos, STREAM_SEEK_SET, NULL); }
+ HRESULT SeekToPhys() { return InStream_SeekSet(Stream, _physPos); }
HRESULT InitAndSeek()
{
@@ -94,57 +86,52 @@ public:
}
return S_OK;
}
+};
- MY_UNKNOWN_IMP2(ISequentialInStream, IInStream)
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
-};
+
+const UInt64 k_SeekExtent_Phy_Type_ZeroFill = (UInt64)(Int64)-1;
struct CSeekExtent
{
- UInt64 Phy;
UInt64 Virt;
-};
+ UInt64 Phy;
-class CExtentsStream:
- public IInStream,
- public CMyUnknownImp
-{
- UInt64 _phyPos;
- UInt64 _virtPos;
- bool _needStartSeek;
+ void SetAs_ZeroFill() { Phy = k_SeekExtent_Phy_Type_ZeroFill; }
+ bool Is_ZeroFill() const { return Phy == k_SeekExtent_Phy_Type_ZeroFill; }
+};
- HRESULT SeekToPhys() { return Stream->Seek(_phyPos, STREAM_SEEK_SET, NULL); }
+Z7_CLASS_IMP_IInStream(
+ CExtentsStream
+)
+ UInt64 _virtPos;
+ UInt64 _phyPos;
+ unsigned _prevExtentIndex;
public:
CMyComPtr<IInStream> Stream;
CRecordVector<CSeekExtent> Extents;
- MY_UNKNOWN_IMP2(ISequentialInStream, IInStream)
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
void ReleaseStream() { Stream.Release(); }
-
void Init()
{
_virtPos = 0;
- _phyPos = 0;
- _needStartSeek = true;
+ _phyPos = (UInt64)0 - 1; // we need Seek() for Stream
+ _prevExtentIndex = 0;
}
};
-class CLimitedSequentialOutStream:
- public ISequentialOutStream,
- public CMyUnknownImp
-{
+
+
+Z7_CLASS_IMP_COM_1(
+ CLimitedSequentialOutStream
+ , ISequentialOutStream
+)
CMyComPtr<ISequentialOutStream> _stream;
UInt64 _size;
bool _overflow;
bool _overflowIsAllowed;
public:
- MY_UNKNOWN_IMP1(ISequentialOutStream)
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
void SetStream(ISequentialOutStream *stream) { _stream = stream; }
void ReleaseStream() { _stream.Release(); }
void Init(UInt64 size, bool overflowIsAllowed = false)
@@ -158,10 +145,9 @@ public:
};
-class CTailInStream:
- public IInStream,
- public CMyUnknownImp
-{
+Z7_CLASS_IMP_IInStream(
+ CTailInStream
+)
UInt64 _virtPos;
public:
CMyComPtr<IInStream> Stream;
@@ -171,19 +157,13 @@ public:
{
_virtPos = 0;
}
-
- MY_UNKNOWN_IMP2(ISequentialInStream, IInStream)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
-
- HRESULT SeekToStart() { return Stream->Seek(Offset, STREAM_SEEK_SET, NULL); }
+ HRESULT SeekToStart() { return InStream_SeekSet(Stream, Offset); }
};
-class CLimitedCachedInStream:
- public IInStream,
- public CMyUnknownImp
-{
+
+Z7_CLASS_IMP_IInStream(
+ CLimitedCachedInStream
+)
CMyComPtr<IInStream> _stream;
UInt64 _virtPos;
UInt64 _physPos;
@@ -194,8 +174,7 @@ class CLimitedCachedInStream:
size_t _cacheSize;
size_t _cachePhyPos;
-
- HRESULT SeekToPhys() { return _stream->Seek(_physPos, STREAM_SEEK_SET, NULL); }
+ HRESULT SeekToPhys() { return InStream_SeekSet(_stream, _physPos); }
public:
CByteBuffer Buffer;
@@ -216,37 +195,27 @@ public:
return SeekToPhys();
}
- MY_UNKNOWN_IMP2(ISequentialInStream, IInStream)
-
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
-
HRESULT SeekToStart() { return Seek(0, STREAM_SEEK_SET, NULL); }
};
-class CTailOutStream:
+
+class CTailOutStream Z7_final :
public IOutStream,
public CMyUnknownImp
{
+ Z7_IFACES_IMP_UNK_2(ISequentialOutStream, IOutStream)
+
UInt64 _virtPos;
UInt64 _virtSize;
public:
CMyComPtr<IOutStream> Stream;
UInt64 Offset;
- virtual ~CTailOutStream() {}
-
- MY_UNKNOWN_IMP2(ISequentialOutStream, IOutStream)
-
void Init()
{
_virtPos = 0;
_virtSize = 0;
}
-
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
- STDMETHOD(SetSize)(UInt64 newSize);
};
#endif