add CHD support.
[pcsx_rearmed.git] / deps / lzma-16.04 / C / Delta.c
CommitLineData
ce188d4d 1/* Delta.c -- Delta converter\r
22009-05-26 : Igor Pavlov : Public domain */\r
3\r
4#include "Precomp.h"\r
5\r
6#include "Delta.h"\r
7\r
8void 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
15static 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
22void 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
45void 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