Uses zlibex
Procedure varianttostream (const V: olevariant; stream: tstream );
VaR
P: pointer;
Begin
Stream. Position: = 0;
Stream. Size: = vararrayhighbound (V, 1)-vararraylowbound (V, 1) + 1;
P: = vararraylock (v );
Stream. Write (P ^, stream. size );
Vararrayunlock (v );
Stream. Position: = 0;
End;
Procedure streamtovariant (Stream: tstream; var V: olevariant );
VaR
P: pointer;
Begin
V: = vararraycreate ([0, stream. Size-1], varbyte );
P: = vararraylock (v );
Stream. Position: = 0;
Stream. Read (P ^, stream. size );
Vararrayunlock (v );
End;
Function compressdata (V: olevariant): olevariant;
VaR
M, M0: tmemorystream;
Begin
M: = tmemorystream. Create;
M0: = tmemorystream. Create;
Try
If v = NULL then exit;
Varianttostream (v, m); // convert to stream
M. Position: = 0;
Zcompressstream (M, M0); // compressed stream
Streamtovariant (M0, V); // convert to the variant Return Value
Finally
M. Free;
M0.free
End;
Result: = V;
End;
Function decompressdata (V: olevariant): olevariant;
VaR
M, M0: tmemorystream;
Begin
M: = tmemorystream. Create;
M0: = tmemorystream. Create;
Try
If v = NULL then exit;
Varianttostream (v, m); // convert to stream
M. Position: = 0;
Zdecompressstream (M, M0); // compressed stream
Streamtovariant (M0, V); // convert to the variant Return Value
Finally
M. Free;
M0.free
End;
Result: = V;
End;