LCOV - code coverage report
Current view: top level - src - uint256.cpp (source / functions) Coverage Total Hit
Test: test_bitcoin_coverage.info Lines: 100.0 % 19 19
Test Date: 2024-11-04 04:45:35 Functions: 100.0 % 6 6
Branches: 80.0 % 10 8

             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                 :      194304 : std::string base_blob<BITS>::GetHex() const
      12                 :             : {
      13                 :             :     uint8_t m_data_rev[WIDTH];
      14         [ +  + ]:     6411696 :     for (int i = 0; i < WIDTH; ++i) {
      15                 :     6217392 :         m_data_rev[i] = m_data[WIDTH - 1 - i];
      16                 :             :     }
      17                 :      194304 :     return HexStr(m_data_rev);
      18                 :             : }
      19                 :             : 
      20                 :             : template <unsigned int BITS>
      21                 :        4947 : void base_blob<BITS>::SetHexDeprecated(const std::string_view str)
      22                 :             : {
      23                 :        9894 :     std::fill(m_data.begin(), m_data.end(), 0);
      24                 :             : 
      25                 :        4947 :     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                 :        4947 :     size_t digits = 0;
      31         [ +  + ]:      321229 :     for (const char c : trimmed) {
      32         [ +  - ]:      316282 :         if (::HexDigit(c) == -1) break;
      33                 :      316282 :         ++digits;
      34                 :             :     }
      35                 :             :     unsigned char* p1 = m_data.data();
      36                 :             :     unsigned char* pend = p1 + WIDTH;
      37         [ +  + ]:      163088 :     while (digits > 0 && p1 < pend) {
      38                 :      158141 :         *p1 = ::HexDigit(trimmed[--digits]);
      39         [ -  + ]:      158141 :         if (digits > 0) {
      40                 :      158141 :             *p1 |= ((unsigned char)::HexDigit(trimmed[--digits]) << 4);
      41                 :      158141 :             p1++;
      42                 :             :         }
      43                 :             :     }
      44                 :        4947 : }
      45                 :             : 
      46                 :             : template <unsigned int BITS>
      47                 :      188039 : std::string base_blob<BITS>::ToString() const
      48                 :             : {
      49                 :      188039 :     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