From e16cf6d28bd1318c4a7d0363a84f138df908580f Mon Sep 17 00:00:00 2001 From: Pierre Chambart Date: Wed, 9 May 2018 17:34:16 +0200 Subject: [PATCH] Simplify, bit extraction from Z values --- src/lib_data_encoding/binary.ml | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/lib_data_encoding/binary.ml b/src/lib_data_encoding/binary.ml index 0dec80172..ff6bf47db 100644 --- a/src/lib_data_encoding/binary.ml +++ b/src/lib_data_encoding/binary.ml @@ -196,17 +196,8 @@ module Writer = struct MBytes.set_int8 res ofs 0x00 ; ofs + 1 end else - let raw = Z.to_bits v in - let get_chunk pos len (* < 8 *) = - let byte = pos / 8 in - let bit = pos mod 8 in - if bit + len <= 8 then - let mask = 0xFF lsr (8 - len) in - (Char.code (String.get raw byte) lsr bit) land mask - else - let mask = 0xFF lsr (16 - len - bit) in - (Char.code (String.get raw byte) lsr bit) - lor ((Char.code (String.get raw (byte + 1))) land mask) lsl (8 - bit) in + let v = Z.abs v in + let get_chunk pos len = Z.to_int (Z.extract v pos len) in let length = (bits + 1 + 6) / 7 in MBytes.set_int8 res ofs ((if sign then 0x40 else 0x00)