1 #include "lz4.h"
2
3 namespace Upp {
4
5 void sCompressStreamCopy_(Stream& out, Stream& in, Gate<int64, int64> progress, Stream& orig_in, int64 insz);
6
sLZ4Compress(Stream & out,Stream & in,int64 size,Gate<int64,int64> progress,bool co)7 static int64 sLZ4Compress(Stream& out, Stream& in, int64 size, Gate<int64, int64> progress, bool co)
8 {
9 LZ4CompressStream outs(out);
10 if(co)
11 outs.Co();
12 sCompressStreamCopy_(outs, in, progress, in, size);
13 outs.Close();
14 if(!out.IsError() && !outs.IsError())
15 return out.GetSize();
16 return -1;
17 }
18
sLZ4Decompress(Stream & out,Stream & in,int64 size,Gate<int64,int64> progress,bool co)19 static int64 sLZ4Decompress(Stream& out, Stream& in, int64 size, Gate<int64, int64> progress, bool co)
20 {
21 LZ4DecompressStream ins(in);
22 if(co)
23 ins.Co();
24 sCompressStreamCopy_(out, ins, progress, in, size);
25 ins.Close();
26 if(!out.IsError() && !ins.IsError())
27 return out.GetSize();
28 return -1;
29 }
30
LZ4Compress(Stream & out,Stream & in,Gate<int64,int64> progress)31 int64 LZ4Compress(Stream& out, Stream& in, Gate<int64, int64> progress)
32 {
33 return sLZ4Compress(out, in, in.GetLeft(), progress, false);
34 }
35
LZ4Decompress(Stream & out,Stream & in,Gate<int64,int64> progress)36 int64 LZ4Decompress(Stream& out, Stream& in, Gate<int64, int64> progress)
37 {
38 return sLZ4Decompress(out, in, in.GetLeft(), progress, false);
39 }
40
LZ4Compress(Stream & in,Gate<int64,int64> progress)41 String LZ4Compress(Stream& in, Gate<int64, int64> progress)
42 {
43 StringStream out;
44 return LZ4Compress(out, in, progress) < 0 ? String::GetVoid() : out.GetResult();
45 }
46
LZ4Decompress(Stream & in,Gate<int64,int64> progress)47 String LZ4Decompress(Stream& in, Gate<int64, int64> progress)
48 {
49 StringStream out;
50 return LZ4Decompress(out, in, progress) < 0 ? String::GetVoid() : out.GetResult();
51 }
52
LZ4Compress(const void * data,int64 len,Gate<int64,int64> progress)53 String LZ4Compress(const void *data, int64 len, Gate<int64, int64> progress)
54 {
55 MemReadStream in(data, len);
56 return LZ4Compress(in, progress);
57 }
58
LZ4Compress(const String & s,Gate<int64,int64> progress)59 String LZ4Compress(const String& s, Gate<int64, int64> progress)
60 {
61 return LZ4Compress(~s, s.GetLength(), progress);
62 }
63
LZ4Decompress(const void * data,int64 len,Gate<int64,int64> progress)64 String LZ4Decompress(const void *data, int64 len, Gate<int64, int64> progress)
65 {
66 MemReadStream in(data, len);
67 return LZ4Decompress(in, progress);
68 }
69
LZ4Decompress(const String & s,Gate<int64,int64> progress)70 String LZ4Decompress(const String& s, Gate<int64, int64> progress)
71 {
72 return LZ4Decompress(~s, s.GetLength(), progress);
73 }
74
CoLZ4Compress(Stream & out,Stream & in,Gate<int64,int64> progress)75 int64 CoLZ4Compress(Stream& out, Stream& in, Gate<int64, int64> progress)
76 {
77 return sLZ4Compress(out, in, in.GetLeft(), progress, true);
78 }
79
CoLZ4Decompress(Stream & out,Stream & in,Gate<int64,int64> progress)80 int64 CoLZ4Decompress(Stream& out, Stream& in, Gate<int64, int64> progress)
81 {
82 return sLZ4Decompress(out, in, in.GetLeft(), progress, true);
83 }
84
CoLZ4Compress(Stream & in,Gate<int64,int64> progress)85 String CoLZ4Compress(Stream& in, Gate<int64, int64> progress)
86 {
87 StringStream out;
88 return CoLZ4Compress(out, in, progress) < 0 ? String::GetVoid() : out.GetResult();
89 }
90
CoLZ4Decompress(Stream & in,Gate<int64,int64> progress)91 String CoLZ4Decompress(Stream& in, Gate<int64, int64> progress)
92 {
93 StringStream out;
94 return CoLZ4Decompress(out, in, progress) < 0 ? String::GetVoid() : out.GetResult();
95 }
96
CoLZ4Compress(const void * data,int64 len,Gate<int64,int64> progress)97 String CoLZ4Compress(const void *data, int64 len, Gate<int64, int64> progress)
98 {
99 StringStream out;
100 MemReadStream in(data, len);
101 return CoLZ4Compress(out, in, progress) < 0 ? String::GetVoid() : out.GetResult();
102 }
103
CoLZ4Compress(const String & s,Gate<int64,int64> progress)104 String CoLZ4Compress(const String& s, Gate<int64, int64> progress)
105 {
106 return CoLZ4Compress(~s, s.GetLength(), progress);
107 }
108
CoLZ4Decompress(const void * data,int64 len,Gate<int64,int64> progress)109 String CoLZ4Decompress(const void *data, int64 len, Gate<int64, int64> progress)
110 {
111 StringStream out;
112 MemReadStream in(data, len);
113 return CoLZ4Decompress(out, in, progress) < 0 ? String::GetVoid() : out.GetResult();
114 }
115
CoLZ4Decompress(const String & s,Gate<int64,int64> progress)116 String CoLZ4Decompress(const String& s, Gate<int64, int64> progress)
117 {
118 return CoLZ4Decompress(~s, s.GetLength(), progress);
119 }
120
121 };