[sldev] AppendedAcks
Carlo Wood
carlo at alinoe.com
Thu Apr 2 07:27:26 PDT 2009
On Wed, Apr 01, 2009 at 08:49:16PM +0100, Thomas Grimshaw wrote:
> Hey all,
>
> I was just wondering if there was any practical reason why AppendedAcks
> are not zerocoded in the packet data?
>
> Saving a few bytes means fitting more Acks into each message,
> potentially reducing the number of PacketAck messages being sent, which
> means a potentially substantial protocol overhead reduction.
>
> This could also be implemented with backward compatibility by using a
> new flag to indicate zerocoded appendedacks.
There is another way that might be even more efficient,
especially if/once most values are (much) larger than 256
but smaller than 16384; which seems to be a possibility
in the future(?).
This method works as follows: the first bit of every byte
is flag, if the flag is set - then it's the last byte.
Let p point the start of such an encoding, then you could
decode it as follows:
unsigned char* p = data;
int count = 1;
while (!(*p & 0x80)) { ++p; ++count; }
unsigned long val = *p & 0x7f;
while (--count) { val <<= 7; val |= *--p; }
This would take:
range #bytes
0-127 1
128-16383 2
16384-2097151 3
--
Carlo Wood <carlo at alinoe.com>
More information about the SLDev
mailing list