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; }