- memcpy (&tkey, *src, sizeof(struct it_key));
- d = tkey.sysno - p->key.sysno;
- if (d)
- {
- iscz1_encode_int (2*tkey.seqno + 1, dst);
- iscz1_encode_int (d, dst);
- p->key.sysno += d;
- p->key.seqno = tkey.seqno;
- }
- else
- {
- iscz1_encode_int (2*(tkey.seqno - p->key.seqno), dst);
- p->key.seqno = tkey.seqno;
- }
- (*src) += sizeof(struct it_key);
+ d = tkey.mem[i] - p->key.mem[i];
+ if (d || i == tkey.len-1)
+ { /* all have been equal until now, now make delta .. */
+ p->key.mem[i] = tkey.mem[i];
+ if (d > 0)
+ {
+ iscz1_encode_int (i + (tkey.len << 3) + 64, dst);
+ i++;
+ iscz1_encode_int (d, dst);
+ }
+ else
+ {
+ iscz1_encode_int (i + (tkey.len << 3), dst);
+ }
+ break;
+ }
+ }
+ /* rest uses absolute encoding ... */
+ for (; i < tkey.len; i++)
+ {
+ iscz1_encode_int (tkey.mem[i], dst);
+ p->key.mem[i] = tkey.mem[i];
+ }
+ (*src) += sizeof(struct it_key);
+#else
+ d = tkey.sysno - p->key.sysno;
+ if (d)
+ {
+ iscz1_encode_int (2*tkey.seqno + 1, dst);
+ iscz1_encode_int (d, dst);
+ p->key.sysno += d;
+ p->key.seqno = tkey.seqno;