Source code
Revision control
Copy as Markdown
Other Tools
/* 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);↩
}↩