LCOV - code coverage report
Current view: top level - src - uint256.cpp (source / functions) Coverage Total Hit
Test: fuzz_coverage.info Lines: 100.0 % 26 26
Test Date: 2024-09-01 05:20:30 Functions: 83.3 % 6 5
Branches: 57.1 % 28 16

             Branch data     Line data    Source code
       1                 :             : // Copyright (c) 2009-2010 Satoshi Nakamoto
       2                 :             : // Copyright (c) 2009-2020 The Bitcoin Core developers
       3                 :             : // Distributed under the MIT software license, see the accompanying
       4                 :             : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
       5                 :             : 
       6                 :             : #include <uint256.h>
       7                 :             : 
       8                 :             : #include <util/strencodings.h>
       9                 :             : 
      10                 :             : template <unsigned int BITS>
      11                 :     6757271 : std::string base_blob<BITS>::GetHex() const
      12                 :             : {
      13                 :     6757271 :     uint8_t m_data_rev[WIDTH];
      14   [ +  +  +  + ]:   222957611 :     for (int i = 0; i < WIDTH; ++i) {
      15                 :   216200340 :         m_data_rev[i] = m_data[WIDTH - 1 - i];
      16                 :   216200340 :     }
      17                 :     6757271 :     return HexStr(m_data_rev);
      18                 :     6757271 : }
      19                 :             : 
      20                 :             : template <unsigned int BITS>
      21                 :         996 : void base_blob<BITS>::SetHexDeprecated(const std::string_view str)
      22                 :             : {
      23                 :         996 :     std::fill(m_data.begin(), m_data.end(), 0);
      24                 :             : 
      25                 :         996 :     const auto trimmed = util::RemovePrefixView(util::TrimStringView(str), "0x");
      26                 :             : 
      27                 :             :     // Note: if we are passed a greater number of digits than would fit as bytes
      28                 :             :     // in m_data, we will be discarding the leftmost ones.
      29                 :             :     // str="12bc" in a WIDTH=1 m_data => m_data[] == "\0xbc", not "0x12".
      30                 :         996 :     size_t digits = 0;
      31   [ #  #  +  + ]:    45016509 :     for (const char c : trimmed) {
      32   [ #  #  +  + ]:    45015513 :         if (::HexDigit(c) == -1) break;
      33                 :    45015484 :         ++digits;
      34   [ #  #  +  + ]:    45015513 :     }
      35                 :         996 :     unsigned char* p1 = m_data.data();
      36                 :         996 :     unsigned char* pend = p1 + WIDTH;
      37   [ #  #  #  #  :       29722 :     while (digits > 0 && p1 < pend) {
             +  +  +  + ]
      38                 :       28726 :         *p1 = ::HexDigit(trimmed[--digits]);
      39   [ #  #  +  + ]:       28726 :         if (digits > 0) {
      40                 :       28714 :             *p1 |= ((unsigned char)::HexDigit(trimmed[--digits]) << 4);
      41                 :       28714 :             p1++;
      42                 :       28714 :         }
      43                 :             :     }
      44                 :         996 : }
      45                 :             : 
      46                 :             : template <unsigned int BITS>
      47                 :     6583355 : std::string base_blob<BITS>::ToString() const
      48                 :             : {
      49                 :     6583355 :     return (GetHex());
      50                 :             : }
      51                 :             : 
      52                 :             : // Explicit instantiations for base_blob<160>
      53                 :             : template std::string base_blob<160>::GetHex() const;
      54                 :             : template std::string base_blob<160>::ToString() const;
      55                 :             : template void base_blob<160>::SetHexDeprecated(std::string_view);
      56                 :             : 
      57                 :             : // Explicit instantiations for base_blob<256>
      58                 :             : template std::string base_blob<256>::GetHex() const;
      59                 :             : template std::string base_blob<256>::ToString() const;
      60                 :             : template void base_blob<256>::SetHexDeprecated(std::string_view);
      61                 :             : 
      62                 :             : const uint256 uint256::ZERO(0);
      63                 :             : const uint256 uint256::ONE(1);
        

Generated by: LCOV version 2.0-1