| 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 |