]>
git.proxmox.com Git - ceph.git/blob - ceph/src/civetweb/src/third_party/duktape-1.8.0/src-separate/duk_util_bitencoder.c
5 #include "duk_internal.h"
7 DUK_INTERNAL
void duk_be_encode(duk_bitencoder_ctx
*ctx
, duk_uint32_t data
, duk_small_int_t bits
) {
10 DUK_ASSERT(ctx
!= NULL
);
11 DUK_ASSERT(ctx
->currbits
< 8);
13 /* This limitation would be fixable but adds unnecessary complexity. */
14 DUK_ASSERT(bits
>= 1 && bits
<= 24);
16 ctx
->currval
= (ctx
->currval
<< bits
) | data
;
17 ctx
->currbits
+= bits
;
19 while (ctx
->currbits
>= 8) {
20 if (ctx
->offset
< ctx
->length
) {
21 tmp
= (duk_uint8_t
) ((ctx
->currval
>> (ctx
->currbits
- 8)) & 0xff);
22 ctx
->data
[ctx
->offset
++] = tmp
;
24 /* If buffer has been exhausted, truncate bitstream */
32 DUK_INTERNAL
void duk_be_finish(duk_bitencoder_ctx
*ctx
) {
35 DUK_ASSERT(ctx
!= NULL
);
36 DUK_ASSERT(ctx
->currbits
< 8);
38 npad
= (duk_small_int_t
) (8 - ctx
->currbits
);
40 duk_be_encode(ctx
, 0, npad
);
42 DUK_ASSERT(ctx
->currbits
== 0);