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