add CHD support.
[pcsx_rearmed.git] / deps / lzma-16.04 / C / Delta.c
1 /* Delta.c -- Delta converter\r
2 2009-05-26 : Igor Pavlov : Public domain */\r
3 \r
4 #include "Precomp.h"\r
5 \r
6 #include "Delta.h"\r
7 \r
8 void Delta_Init(Byte *state)\r
9 {\r
10   unsigned i;\r
11   for (i = 0; i < DELTA_STATE_SIZE; i++)\r
12     state[i] = 0;\r
13 }\r
14 \r
15 static void MyMemCpy(Byte *dest, const Byte *src, unsigned size)\r
16 {\r
17   unsigned i;\r
18   for (i = 0; i < size; i++)\r
19     dest[i] = src[i];\r
20 }\r
21 \r
22 void Delta_Encode(Byte *state, unsigned delta, Byte *data, SizeT size)\r
23 {\r
24   Byte buf[DELTA_STATE_SIZE];\r
25   unsigned j = 0;\r
26   MyMemCpy(buf, state, delta);\r
27   {\r
28     SizeT i;\r
29     for (i = 0; i < size;)\r
30     {\r
31       for (j = 0; j < delta && i < size; i++, j++)\r
32       {\r
33         Byte b = data[i];\r
34         data[i] = (Byte)(b - buf[j]);\r
35         buf[j] = b;\r
36       }\r
37     }\r
38   }\r
39   if (j == delta)\r
40     j = 0;\r
41   MyMemCpy(state, buf + j, delta - j);\r
42   MyMemCpy(state + delta - j, buf, j);\r
43 }\r
44 \r
45 void Delta_Decode(Byte *state, unsigned delta, Byte *data, SizeT size)\r
46 {\r
47   Byte buf[DELTA_STATE_SIZE];\r
48   unsigned j = 0;\r
49   MyMemCpy(buf, state, delta);\r
50   {\r
51     SizeT i;\r
52     for (i = 0; i < size;)\r
53     {\r
54       for (j = 0; j < delta && i < size; i++, j++)\r
55       {\r
56         buf[j] = data[i] = (Byte)(buf[j] + data[i]);\r
57       }\r
58     }\r
59   }\r
60   if (j == delta)\r
61     j = 0;\r
62   MyMemCpy(state, buf + j, delta - j);\r
63   MyMemCpy(state + delta - j, buf, j);\r
64 }\r