Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(54)

Side by Side Diff: third_party/lzma/v4_65/files/CS/7zip/Compress/LZ/LzOutWindow.cs

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // LzOutWindow.cs
2
3 namespace SevenZip.Compression.LZ
4 {
5 public class OutWindow
6 {
7 byte[] _buffer = null;
8 uint _pos;
9 uint _windowSize = 0;
10 uint _streamPos;
11 System.IO.Stream _stream;
12
13 public uint TrainSize = 0;
14
15 public void Create(uint windowSize)
16 {
17 if (_windowSize != windowSize)
18 {
19 // System.GC.Collect();
20 _buffer = new byte[windowSize];
21 }
22 _windowSize = windowSize;
23 _pos = 0;
24 _streamPos = 0;
25 }
26
27 public void Init(System.IO.Stream stream, bool solid)
28 {
29 ReleaseStream();
30 _stream = stream;
31 if (!solid)
32 {
33 _streamPos = 0;
34 _pos = 0;
35 TrainSize = 0;
36 }
37 }
38
39 public bool Train(System.IO.Stream stream)
40 {
41 long len = stream.Length;
42 uint size = (len < _windowSize) ? (uint)len : _windowSiz e;
43 TrainSize = size;
44 stream.Position = len - size;
45 _streamPos = _pos = 0;
46 while (size > 0)
47 {
48 uint curSize = _windowSize - _pos;
49 if (size < curSize)
50 curSize = size;
51 int numReadBytes = stream.Read(_buffer, (int)_po s, (int)curSize);
52 if (numReadBytes == 0)
53 return false;
54 size -= (uint)numReadBytes;
55 _pos += (uint)numReadBytes;
56 _streamPos += (uint)numReadBytes;
57 if (_pos == _windowSize)
58 _streamPos = _pos = 0;
59 }
60 return true;
61 }
62
63 public void ReleaseStream()
64 {
65 Flush();
66 _stream = null;
67 }
68
69 public void Flush()
70 {
71 uint size = _pos - _streamPos;
72 if (size == 0)
73 return;
74 _stream.Write(_buffer, (int)_streamPos, (int)size);
75 if (_pos >= _windowSize)
76 _pos = 0;
77 _streamPos = _pos;
78 }
79
80 public void CopyBlock(uint distance, uint len)
81 {
82 uint pos = _pos - distance - 1;
83 if (pos >= _windowSize)
84 pos += _windowSize;
85 for (; len > 0; len--)
86 {
87 if (pos >= _windowSize)
88 pos = 0;
89 _buffer[_pos++] = _buffer[pos++];
90 if (_pos >= _windowSize)
91 Flush();
92 }
93 }
94
95 public void PutByte(byte b)
96 {
97 _buffer[_pos++] = b;
98 if (_pos >= _windowSize)
99 Flush();
100 }
101
102 public byte GetByte(uint distance)
103 {
104 uint pos = _pos - distance - 1;
105 if (pos >= _windowSize)
106 pos += _windowSize;
107 return _buffer[pos];
108 }
109 }
110 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698