Coverage Report

Created: 2026-07-30 07:14

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libtorrent/fuzzers/src/read_bits.hpp
Line
Count
Source
1
/*
2
3
Copyright (c) 2020, Arvid Norberg
4
All rights reserved.
5
6
You may use, distribute and modify this code under the terms of the BSD license,
7
see LICENSE file.
8
*/
9
10
struct read_bits
11
{
12
  read_bits(std::uint8_t const* d, std::size_t s)
13
2.19k
    : m_data(d), m_size(s)
14
2.19k
  {}
15
16
  int read(int bits)
17
2.23M
  {
18
2.23M
    if (m_size == 0) return 0;
19
656k
    int ret = 0;
20
1.35M
    while (bits > 0 && m_size > 0)
21
700k
    {
22
700k
      int const bits_to_copy = std::min(8 - m_bit, bits);
23
700k
      ret <<= bits_to_copy;
24
700k
      ret |= ((*m_data) >> m_bit) & ((1 << bits_to_copy) - 1);
25
700k
      m_bit += bits_to_copy;
26
700k
      bits -= bits_to_copy;
27
700k
      if (m_bit == 8)
28
125k
      {
29
125k
        --m_size;
30
125k
        ++m_data;
31
125k
        m_bit = 0;
32
125k
      }
33
700k
    }
34
656k
    return ret;
35
2.23M
  }
36
private:
37
  std::uint8_t const* m_data;
38
  std::size_t m_size;
39
  int m_bit = 0;
40
};
41
42