rlm@1
|
1 // StreamObjects.h
|
rlm@1
|
2
|
rlm@1
|
3 #ifndef __STREAMOBJECTS_H
|
rlm@1
|
4 #define __STREAMOBJECTS_H
|
rlm@1
|
5
|
rlm@1
|
6 #include "../../Common/DynamicBuffer.h"
|
rlm@1
|
7 #include "../../Common/MyCom.h"
|
rlm@1
|
8 #include "../IStream.h"
|
rlm@1
|
9
|
rlm@1
|
10 class CSequentialInStreamImp:
|
rlm@1
|
11 public ISequentialInStream,
|
rlm@1
|
12 public CMyUnknownImp
|
rlm@1
|
13 {
|
rlm@1
|
14 const Byte *_dataPointer;
|
rlm@1
|
15 size_t _size;
|
rlm@1
|
16 size_t _pos;
|
rlm@1
|
17
|
rlm@1
|
18 public:
|
rlm@1
|
19 void Init(const Byte *dataPointer, size_t size)
|
rlm@1
|
20 {
|
rlm@1
|
21 _dataPointer = dataPointer;
|
rlm@1
|
22 _size = size;
|
rlm@1
|
23 _pos = 0;
|
rlm@1
|
24 }
|
rlm@1
|
25
|
rlm@1
|
26 MY_UNKNOWN_IMP
|
rlm@1
|
27
|
rlm@1
|
28 STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
|
rlm@1
|
29 };
|
rlm@1
|
30
|
rlm@1
|
31
|
rlm@1
|
32 class CWriteBuffer
|
rlm@1
|
33 {
|
rlm@1
|
34 CByteDynamicBuffer _buffer;
|
rlm@1
|
35 size_t _size;
|
rlm@1
|
36 public:
|
rlm@1
|
37 CWriteBuffer(): _size(0) {}
|
rlm@1
|
38 void Init() { _size = 0; }
|
rlm@1
|
39 void Write(const void *data, size_t size);
|
rlm@1
|
40 size_t GetSize() const { return _size; }
|
rlm@1
|
41 const CByteDynamicBuffer& GetBuffer() const { return _buffer; }
|
rlm@1
|
42 };
|
rlm@1
|
43
|
rlm@1
|
44 class CSequentialOutStreamImp:
|
rlm@1
|
45 public ISequentialOutStream,
|
rlm@1
|
46 public CMyUnknownImp
|
rlm@1
|
47 {
|
rlm@1
|
48 CWriteBuffer _writeBuffer;
|
rlm@1
|
49 public:
|
rlm@1
|
50 void Init() { _writeBuffer.Init(); }
|
rlm@1
|
51 size_t GetSize() const { return _writeBuffer.GetSize(); }
|
rlm@1
|
52 const CByteDynamicBuffer& GetBuffer() const { return _writeBuffer.GetBuffer(); }
|
rlm@1
|
53
|
rlm@1
|
54 MY_UNKNOWN_IMP
|
rlm@1
|
55
|
rlm@1
|
56 STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
|
rlm@1
|
57 };
|
rlm@1
|
58
|
rlm@1
|
59 class CSequentialOutStreamImp2:
|
rlm@1
|
60 public ISequentialOutStream,
|
rlm@1
|
61 public CMyUnknownImp
|
rlm@1
|
62 {
|
rlm@1
|
63 Byte *_buffer;
|
rlm@1
|
64 size_t _size;
|
rlm@1
|
65 size_t _pos;
|
rlm@1
|
66 public:
|
rlm@1
|
67
|
rlm@1
|
68 void Init(Byte *buffer, size_t size)
|
rlm@1
|
69 {
|
rlm@1
|
70 _buffer = buffer;
|
rlm@1
|
71 _pos = 0;
|
rlm@1
|
72 _size = size;
|
rlm@1
|
73 }
|
rlm@1
|
74
|
rlm@1
|
75 size_t GetPos() const { return _pos; }
|
rlm@1
|
76
|
rlm@1
|
77 MY_UNKNOWN_IMP
|
rlm@1
|
78
|
rlm@1
|
79 STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
|
rlm@1
|
80 };
|
rlm@1
|
81
|
rlm@1
|
82 class CSequentialInStreamSizeCount:
|
rlm@1
|
83 public ISequentialInStream,
|
rlm@1
|
84 public CMyUnknownImp
|
rlm@1
|
85 {
|
rlm@1
|
86 CMyComPtr<ISequentialInStream> _stream;
|
rlm@1
|
87 UInt64 _size;
|
rlm@1
|
88 public:
|
rlm@1
|
89 void Init(ISequentialInStream *stream)
|
rlm@1
|
90 {
|
rlm@1
|
91 _stream = stream;
|
rlm@1
|
92 _size = 0;
|
rlm@1
|
93 }
|
rlm@1
|
94 UInt64 GetSize() const { return _size; }
|
rlm@1
|
95
|
rlm@1
|
96 MY_UNKNOWN_IMP
|
rlm@1
|
97
|
rlm@1
|
98 STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
|
rlm@1
|
99 };
|
rlm@1
|
100
|
rlm@1
|
101 class CSequentialOutStreamSizeCount:
|
rlm@1
|
102 public ISequentialOutStream,
|
rlm@1
|
103 public CMyUnknownImp
|
rlm@1
|
104 {
|
rlm@1
|
105 CMyComPtr<ISequentialOutStream> _stream;
|
rlm@1
|
106 UInt64 _size;
|
rlm@1
|
107 public:
|
rlm@1
|
108 void SetStream(ISequentialOutStream *stream) { _stream = stream; }
|
rlm@1
|
109 void Init() { _size = 0; }
|
rlm@1
|
110 UInt64 GetSize() const { return _size; }
|
rlm@1
|
111
|
rlm@1
|
112 MY_UNKNOWN_IMP
|
rlm@1
|
113
|
rlm@1
|
114 STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
|
rlm@1
|
115 };
|
rlm@1
|
116
|
rlm@1
|
117 #endif
|