/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  | 1.05k  | { | 
10  | 1.05k  |   unsigned i;  | 
11  | 270k  |   for (i = 0; i < DELTA_STATE_SIZE; i++)  | 
12  | 269k  |     state[i] = 0;  | 
13  | 1.05k  | }  | 
14  |  |  | 
15  |  | static void MyMemCpy(Byte *dest, const Byte *src, unsigned size)  | 
16  | 22.2k  | { | 
17  | 22.2k  |   unsigned i;  | 
18  | 398k  |   for (i = 0; i < size; i++)  | 
19  | 375k  |     dest[i] = src[i];  | 
20  | 22.2k  | }  | 
21  |  |  | 
22  |  | void Delta_Encode(Byte *state, unsigned delta, Byte *data, SizeT size)  | 
23  | 3.66k  | { | 
24  | 3.66k  |   Byte buf[DELTA_STATE_SIZE];  | 
25  | 3.66k  |   unsigned j = 0;  | 
26  | 3.66k  |   MyMemCpy(buf, state, delta);  | 
27  | 3.66k  |   { | 
28  | 3.66k  |     SizeT i;  | 
29  | 26.2M  |     for (i = 0; i < size;)  | 
30  | 26.2M  |     { | 
31  | 79.3M  |       for (j = 0; j < delta && i < size; i++, j++)  | 
32  | 53.1M  |       { | 
33  | 53.1M  |         Byte b = data[i];  | 
34  | 53.1M  |         data[i] = (Byte)(b - buf[j]);  | 
35  | 53.1M  |         buf[j] = b;  | 
36  | 53.1M  |       }  | 
37  | 26.2M  |     }  | 
38  | 3.66k  |   }  | 
39  | 3.66k  |   if (j == delta)  | 
40  | 1.37k  |     j = 0;  | 
41  | 3.66k  |   MyMemCpy(state, buf + j, delta - j);  | 
42  | 3.66k  |   MyMemCpy(state + delta - j, buf, j);  | 
43  | 3.66k  | }  | 
44  |  |  | 
45  |  | void Delta_Decode(Byte *state, unsigned delta, Byte *data, SizeT size)  | 
46  | 3.74k  | { | 
47  | 3.74k  |   Byte buf[DELTA_STATE_SIZE];  | 
48  | 3.74k  |   unsigned j = 0;  | 
49  | 3.74k  |   MyMemCpy(buf, state, delta);  | 
50  | 3.74k  |   { | 
51  | 3.74k  |     SizeT i;  | 
52  | 26.2M  |     for (i = 0; i < size;)  | 
53  | 26.2M  |     { | 
54  | 79.3M  |       for (j = 0; j < delta && i < size; i++, j++)  | 
55  | 53.1M  |       { | 
56  | 53.1M  |         buf[j] = data[i] = (Byte)(buf[j] + data[i]);  | 
57  | 53.1M  |       }  | 
58  | 26.2M  |     }  | 
59  | 3.74k  |   }  | 
60  | 3.74k  |   if (j == delta)  | 
61  | 1.40k  |     j = 0;  | 
62  | 3.74k  |   MyMemCpy(state, buf + j, delta - j);  | 
63  | 3.74k  |   MyMemCpy(state + delta - j, buf, j);  | 
64  | 3.74k  | }  |