Source code

Revision control

Copy as Markdown

Other Tools

// LZ.OutWindow↩
package SevenZip.Compression.LZ;↩
import java.io.IOException;↩
public class OutWindow↩
{↩
byte[] _buffer;↩
int _pos;↩
int _windowSize = 0;↩
int _streamPos;↩
java.io.OutputStream _stream;↩
public void Create(int windowSize)↩
{↩
if (_buffer == null || _windowSize != windowSize)↩
_buffer = new byte[windowSize];↩
_windowSize = windowSize;↩
_pos = 0;↩
_streamPos = 0;↩
}↩
public void SetStream(java.io.OutputStream stream) throws IOException↩
{↩
ReleaseStream();↩
_stream = stream;↩
}↩
public void ReleaseStream() throws IOException↩
{↩
Flush();↩
_stream = null;↩
}↩
public void Init(boolean solid)↩
{↩
if (!solid)↩
{↩
_streamPos = 0;↩
_pos = 0;↩
}↩
}↩
public void Flush() throws IOException↩
{↩
int size = _pos - _streamPos;↩
if (size == 0)↩
return;↩
_stream.write(_buffer, _streamPos, size);↩
if (_pos >= _windowSize)↩
_pos = 0;↩
_streamPos = _pos;↩
}↩
public void CopyBlock(int distance, int len) throws IOException↩
{↩
int pos = _pos - distance - 1;↩
if (pos < 0)↩
pos += _windowSize;↩
for (; len != 0; len--)↩
{↩
if (pos >= _windowSize)↩
pos = 0;↩
_buffer[_pos++] = _buffer[pos++];↩
if (_pos >= _windowSize)↩
Flush();↩
}↩
}↩
public void PutByte(byte b) throws IOException↩
{↩
_buffer[_pos++] = b;↩
if (_pos >= _windowSize)↩
Flush();↩
}↩
public byte GetByte(int distance)↩
{↩
int pos = _pos - distance - 1;↩
if (pos < 0)↩
pos += _windowSize;↩
return _buffer[pos];↩
}↩
}↩