/src/lzma-fuzz/sdk/C/Delta.c
Line | Count | Source |
1 | | /* Delta.c -- Delta converter |
2 | | 2009-05-26 : Igor Pavlov : Public domain */ |
3 | | |
4 | | #include "Precomp.h" |
5 | | |
6 | | #include "Delta.h" |
7 | | |
8 | | void Delta_Init(Byte *state) |
9 | 8.54k | { |
10 | 8.54k | unsigned i; |
11 | 2.19M | for (i = 0; i < DELTA_STATE_SIZE; i++) |
12 | 2.18M | state[i] = 0; |
13 | 8.54k | } |
14 | | |
15 | | static void MyMemCpy(Byte *dest, const Byte *src, unsigned size) |
16 | 62.8k | { |
17 | 62.8k | unsigned i; |
18 | 1.00M | for (i = 0; i < size; i++) |
19 | 939k | dest[i] = src[i]; |
20 | 62.8k | } |
21 | | |
22 | | void Delta_Encode(Byte *state, unsigned delta, Byte *data, SizeT size) |
23 | 4.48k | { |
24 | 4.48k | Byte buf[DELTA_STATE_SIZE]; |
25 | 4.48k | unsigned j = 0; |
26 | 4.48k | MyMemCpy(buf, state, delta); |
27 | 4.48k | { |
28 | 4.48k | SizeT i; |
29 | 28.9M | for (i = 0; i < size;) |
30 | 28.9M | { |
31 | 119M | for (j = 0; j < delta && i < size; i++, j++) |
32 | 90.6M | { |
33 | 90.6M | Byte b = data[i]; |
34 | 90.6M | data[i] = (Byte)(b - buf[j]); |
35 | 90.6M | buf[j] = b; |
36 | 90.6M | } |
37 | 28.9M | } |
38 | 4.48k | } |
39 | 4.48k | if (j == delta) |
40 | 1.56k | j = 0; |
41 | 4.48k | MyMemCpy(state, buf + j, delta - j); |
42 | 4.48k | MyMemCpy(state + delta - j, buf, j); |
43 | 4.48k | } |
44 | | |
45 | | void Delta_Decode(Byte *state, unsigned delta, Byte *data, SizeT size) |
46 | 16.4k | { |
47 | 16.4k | Byte buf[DELTA_STATE_SIZE]; |
48 | 16.4k | unsigned j = 0; |
49 | 16.4k | MyMemCpy(buf, state, delta); |
50 | 16.4k | { |
51 | 16.4k | SizeT i; |
52 | 95.7M | for (i = 0; i < size;) |
53 | 95.6M | { |
54 | 366M | for (j = 0; j < delta && i < size; i++, j++) |
55 | 271M | { |
56 | 271M | buf[j] = data[i] = (Byte)(buf[j] + data[i]); |
57 | 271M | } |
58 | 95.6M | } |
59 | 16.4k | } |
60 | 16.4k | if (j == delta) |
61 | 5.50k | j = 0; |
62 | 16.4k | MyMemCpy(state, buf + j, delta - j); |
63 | 16.4k | MyMemCpy(state + delta - j, buf, j); |
64 | 16.4k | } |