All pastes #2133138 Raw Edit

Untitled

public text v1 · immutable
#2133138 ·published 2012-03-28 11:12 UTC
rendered paste body
size_t
extractToStopPacked (void* data, size_t size, void* buf, size_t len)
{
    u_char* in = data;
    u_char* out = buf;
    size_t  i;
    u_char  ch;
    size_t  used;
    u_int   shift;

    used = 0;
    shift = 1;
    for (i = 0; i < size; i++)
    {
        ch = in[i] & ~FAST_STOP_BIT;

        out[used] = ch << shift;
        if (LIKELY (shift != 1))
            out[used - 1] |= (ch >> (8 - shift));
        used++;

        if (UNLIKELY (in[i] & FAST_STOP_BIT))
            break;
        if (UNLIKELY (used == len))
            return 0;

        if (UNLIKELY (shift == 8))
            shift = 1;
        else
            shift++;
    }

    return used;
}