126 if (source ==
NULL || slen < 1) {
130 assert(Buffer !=
NULL);
146 if (BlockHeader.CompCount == 0xFFFF) {
147 int len = ((unsigned)slen < (
sizeof(BlockHeader)-Counter)) ? slen : (
sizeof(BlockHeader)-Counter);
148 memmove(&Buffer[Counter], source, len);
149 source = ((
char *)source) + len;
156 if (Counter ==
sizeof(BlockHeader)) {
157 memmove(&BlockHeader, Buffer,
sizeof(BlockHeader));
167 int len = (slen < (BlockHeader.CompCount-Counter)) ? slen : (BlockHeader.CompCount-Counter);
169 memmove(&Buffer[Counter], source, len);
171 source = ((
char *)source) + len;
178 if (Counter == BlockHeader.CompCount) {
179 unsigned int length =
sizeof (Buffer2);
180 lzo1x_decompress ((
unsigned char*)Buffer, BlockHeader.CompCount, (
unsigned char*)Buffer2, &length,
NULL);
181 total +=
Pipe::Put(Buffer2, BlockHeader.UncompCount);
183 BlockHeader.CompCount = 0xFFFF;
195 int tocopy = (slen < (BlockSize-Counter)) ? slen : (BlockSize-Counter);
196 memmove(&Buffer[Counter], source, tocopy);
197 source = ((
char *)source) + tocopy;
201 if (Counter == BlockSize) {
202 unsigned int len =
sizeof (Buffer2);
203 char *dictionary =
new char [64*1024];
204 lzo1x_1_compress ((
unsigned char*)Buffer, BlockSize, (
unsigned char*)Buffer2, &len, dictionary);
205 delete [] dictionary;
206 BlockHeader.CompCount = (
unsigned short)len;
207 BlockHeader.UncompCount = (
unsigned short)BlockSize;
208 total +=
Pipe::Put(&BlockHeader,
sizeof(BlockHeader));
218 while (slen >= BlockSize) {
219 unsigned int len =
sizeof (Buffer2);
220 char *dictionary =
new char [64*1024];
221 lzo1x_1_compress ((
unsigned char*)source, BlockSize, (
unsigned char*)Buffer2, &len, dictionary);
222 delete [] dictionary;
223 source = ((
char *)source) + BlockSize;
226 BlockHeader.CompCount = (
unsigned short)len;
227 BlockHeader.UncompCount = (
unsigned short)BlockSize;
228 total +=
Pipe::Put(&BlockHeader,
sizeof(BlockHeader));
237 memmove(Buffer, source, slen);
267 assert(Buffer !=
NULL);
282 if (BlockHeader.CompCount == 0xFFFF) {
294 total +=
Pipe::Put(&BlockHeader,
sizeof(BlockHeader));
297 BlockHeader.CompCount = 0xFFFF;
306 unsigned int len =
sizeof (Buffer2);
307 char *dictionary =
new char [64*1024];
308 lzo1x_1_compress ((
unsigned char*)Buffer, Counter, (
unsigned char *)Buffer2, &len, dictionary);
309 delete [] dictionary;
310 BlockHeader.CompCount = (
unsigned short)len;
311 BlockHeader.UncompCount = (
unsigned short)Counter;
312 total +=
Pipe::Put(&BlockHeader,
sizeof(BlockHeader));