Index: third_party/lzma_sdk/Delta.c |
diff --git a/third_party/lzma_sdk/Delta.c b/third_party/lzma_sdk/Delta.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e3edd21edbb9f6db73f1e2a5f4069ea5ad47bae2 |
--- /dev/null |
+++ b/third_party/lzma_sdk/Delta.c |
@@ -0,0 +1,64 @@ |
+/* Delta.c -- Delta converter |
+2009-05-26 : Igor Pavlov : Public domain */ |
+ |
+#include "Precomp.h" |
+ |
+#include "Delta.h" |
+ |
+void Delta_Init(Byte *state) |
+{ |
+ unsigned i; |
+ for (i = 0; i < DELTA_STATE_SIZE; i++) |
+ state[i] = 0; |
+} |
+ |
+static void MyMemCpy(Byte *dest, const Byte *src, unsigned size) |
+{ |
+ unsigned i; |
+ for (i = 0; i < size; i++) |
+ dest[i] = src[i]; |
+} |
+ |
+void Delta_Encode(Byte *state, unsigned delta, Byte *data, SizeT size) |
+{ |
+ Byte buf[DELTA_STATE_SIZE]; |
+ unsigned j = 0; |
+ MyMemCpy(buf, state, delta); |
+ { |
+ SizeT i; |
+ for (i = 0; i < size;) |
+ { |
+ for (j = 0; j < delta && i < size; i++, j++) |
+ { |
+ Byte b = data[i]; |
+ data[i] = (Byte)(b - buf[j]); |
+ buf[j] = b; |
+ } |
+ } |
+ } |
+ if (j == delta) |
+ j = 0; |
+ MyMemCpy(state, buf + j, delta - j); |
+ MyMemCpy(state + delta - j, buf, j); |
+} |
+ |
+void Delta_Decode(Byte *state, unsigned delta, Byte *data, SizeT size) |
+{ |
+ Byte buf[DELTA_STATE_SIZE]; |
+ unsigned j = 0; |
+ MyMemCpy(buf, state, delta); |
+ { |
+ SizeT i; |
+ for (i = 0; i < size;) |
+ { |
+ for (j = 0; j < delta && i < size; i++, j++) |
+ { |
+ buf[j] = data[i] = (Byte)(buf[j] + data[i]); |
+ } |
+ } |
+ } |
+ if (j == delta) |
+ j = 0; |
+ MyMemCpy(state, buf + j, delta - j); |
+ MyMemCpy(state + delta - j, buf, j); |
+} |