
S32 init_bucket(U8 *buffer, U32 size);
S32 close_bucket(U8 **buffer, U32 *size);
S32 flush_bucket(void);
U32 read_position(U8 **p);

S32 read_ushort(U16 *output);
S32 read_short(S16 *output);
S32 read_uint(U32 *output);
S32 read_int(S32 *output);
S32 read_ubyte(U8 *output);
S32 read_byte(S8 *output);
S32 read_ubits(S32 n, U32 *output);
S32 read_bits(S32 n, S32 *output);

S32 bucket_insert(S32 start, U8 *data, S32 bytes);
S32 write_ushort(U16 input);
S32 write_short(S16 input);
S32 write_uint(U32 input);
S32 write_int(S32 input);
S32 write_ubyte(U8 input);
S32 write_byte(S8 input);
S32 write_ubits(S32 n, U32 input);
S32 write_bits(S32 n, S32 input);
S32 write_position(U32 newpos, U32 *oldpos);
