Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5728 serge 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
}