Chromium Code Reviews| Index: components/packed_ct_ev_whitelist/bit_stream_reader.cc |
| diff --git a/components/packed_ct_ev_whitelist/bit_stream_reader.cc b/components/packed_ct_ev_whitelist/bit_stream_reader.cc |
| index e4f6cc7b64a8896055bc56dd85f272d891b7f745..c0ebbbd0ec02bd222572fbb8ddbf07b1a0e3b160 100644 |
| --- a/components/packed_ct_ev_whitelist/bit_stream_reader.cc |
| +++ b/components/packed_ct_ev_whitelist/bit_stream_reader.cc |
| @@ -7,7 +7,6 @@ |
| #include "base/big_endian.h" |
| #include "base/logging.h" |
| #include "base/numerics/safe_conversions.h" |
| - |
|
Ryan Sleevi
2015/04/09 01:33:57
Don't delete this newline
ian fette
2015/04/09 16:22:13
Done.
|
| namespace packed_ct_ev_whitelist { |
| namespace internal { |
| @@ -34,8 +33,16 @@ bool BitStreamReader::ReadBits(uint8_t num_bits, uint64_t* out) { |
| return false; |
| *out = 0; |
| - for (uint8_t i = 0; i < num_bits; ++i) |
| - (*out) |= (static_cast<uint64_t>(ReadBit()) << (num_bits - (i + 1))); |
| + |
| + for (; num_bits && (current_bit_ != 7); --num_bits) |
| + (*out) |= (static_cast<uint64_t>(ReadBit() << (num_bits - 1))); |
| + for (; num_bits / 8; num_bits -= 8) { |
| + (*out) |= (static_cast<uint64_t>(source_.data()[current_byte_]) & 0xff) |
| + << (num_bits - 8); |
|
Ryan Sleevi
2015/04/09 01:33:57
I'm not terribly keen on this, which duplicates th
ian fette
2015/04/09 02:43:06
One important precondition is whether the stream i
Ryan Sleevi
2015/04/09 02:57:16
Right, I was just talking in the context of the se
ian fette
2015/04/09 16:22:13
Done.
|
| + current_byte_++; |
| + } |
| + for (; num_bits; --num_bits) |
| + (*out) |= (static_cast<uint64_t>(ReadBit() << (num_bits - 1))); |
| return true; |
| } |