PRCYCoin  2.0.0.7rc1
P2P Digital Currency
uint256.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2014 The Bitcoin developers
3 // Copyright (c) 2014-2015 The Dash developers
4 // Copyright (c) 2015-2018 The PIVX developers
5 // Copyright (c) 2018-2020 The DAPS Project developers
6 // Distributed under the MIT software license, see the accompanying
7 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
8 
9 #ifndef PRCY_UINT256_H
10 #define PRCY_UINT256_H
11 
12 #include "arith_uint256.h"
13 #include <assert.h>
14 #include <cstring>
15 #include <stdexcept>
16 #include <stdint.h>
17 #include <string>
18 #include <vector>
19 
20 //
21 // This is a migration file class, as soon as we move every
22 // uint256 field used, invalidly, as a number to the proper arith_uint256, this will be replaced
23 // with the blob_uint256 file.
24 //
25 
27 class uint160 : public base_uint<160>
28 {
29 public:
30  uint160() {}
31  uint160(const base_uint<160>& b) : base_uint<160>(b) {}
32  uint160(uint64_t b) : base_uint<160>(b) {}
33  explicit uint160(const std::string& str) : base_uint<160>(str) {}
34  explicit uint160(const std::vector<unsigned char>& vch) : base_uint<160>(vch) {}
35 };
36 
38 class uint256 : public base_uint<256>
39 {
40 public:
41  uint256() {}
42  uint256(const base_uint<256>& b) : base_uint<256>(b) {}
43  uint256(uint64_t b) : base_uint<256>(b) {}
44  explicit uint256(const std::string& str) : base_uint<256>(str) {}
45  explicit uint256(const std::vector<unsigned char>& vch) : base_uint<256>(vch) {}
46 
67  uint256& SetCompact(uint32_t nCompact, bool* pfNegative = nullptr, bool* pfOverflow = nullptr);
68  uint32_t GetCompact(bool fNegative = false) const;
69  uint64_t GetHash(const uint256& salt) const;
70 };
71 
73 class uint512 : public base_uint<512>
74 {
75 public:
76  uint512() {}
77  uint512(const base_uint<512>& b) : base_uint<512>(b) {}
78  uint512(uint64_t b) : base_uint<512>(b) {}
79  explicit uint512(const std::string& str) : base_uint<512>(str) {}
80  explicit uint512(const std::vector<unsigned char>& vch) : base_uint<512>(vch) {}
81 
82  uint256 trim256() const
83  {
84  uint256 ret;
85  for (unsigned int i = 0; i < uint256::WIDTH; i++) {
86  ret.pn[i] = pn[i];
87  }
88  return ret;
89  }
90 
91  friend arith_uint512 UintToArith512(const uint512 &a);
92  friend uint512 ArithToUint512(const arith_uint512 &a);
93 };
94 
95 /* uint256 from const char *.
96  * This is a separate function because the constructor uint256(const char*) can result
97  * in dangerously catching UINT256_ZERO.
98  */
99 inline uint256 uint256S(const char* str)
100 {
101  uint256 rv;
102  rv.SetHex(str);
103  return rv;
104 }
105 /* uint256 from std::string.
106  * This is a separate function because the constructor uint256(const std::string &str) can result
107  * in dangerously catching UINT256_ZERO via std::string(const char*).
108  */
109 inline uint256 uint256S(const std::string& str)
110 {
111  uint256 rv;
112  rv.SetHex(str);
113  return rv;
114 }
115 
116 inline uint512 uint512S(const std::string& str)
117 {
118  uint512 rv;
119  rv.SetHex(str);
120  return rv;
121 }
122 
127 
130 const uint256 UINT256_ONE = uint256("0000000000000000000000000000000000000000000000000000000000000001");
131 
132 #endif // PRCY_UINT256_H
arith_uint256.h
UINT256_ZERO
const uint256 UINT256_ZERO
constant uint256 instances
Definition: uint256.h:129
uint512::uint512
uint512(const std::string &str)
Definition: uint256.h:79
uint512::uint512
uint512(uint64_t b)
Definition: uint256.h:78
uint160::uint160
uint160(const std::vector< unsigned char > &vch)
Definition: uint256.h:34
b
void const uint64_t * b
Definition: field_5x52_asm_impl.h:10
uint256::uint256
uint256(uint64_t b)
Definition: uint256.h:43
arith_uint512
512-bit unsigned big integer.
Definition: arith_uint256.h:377
uint512::trim256
uint256 trim256() const
Definition: uint256.h:82
arith_uint256
256-bit unsigned big integer.
Definition: arith_uint256.h:340
uint256::SetCompact
uint256 & SetCompact(uint32_t nCompact, bool *pfNegative=nullptr, bool *pfOverflow=nullptr)
The "compact" format is a representation of a whole number N using an unsigned 32bit number similar t...
Definition: uint256.cpp:14
ArithToUint512
uint512 ArithToUint512(const arith_uint512 &)
Definition: uint256.cpp:134
uint160::uint160
uint160(const base_uint< 160 > &b)
Definition: uint256.h:31
uint256::GetCompact
uint32_t GetCompact(bool fNegative=false) const
Definition: uint256.cpp:34
uint512::uint512
uint512()
Definition: uint256.h:76
uint512::uint512
uint512(const std::vector< unsigned char > &vch)
Definition: uint256.h:80
uint160::uint160
uint160()
Definition: uint256.h:30
UintToArith512
arith_uint512 UintToArith512(const uint512 &)
Definition: uint256.cpp:142
ArithToUint256
uint256 ArithToUint256(const arith_uint256 &)
Definition: uint256.cpp:119
UINT256_ONE
const uint256 UINT256_ONE
Definition: uint256.h:130
uint256
256-bit unsigned big integer.
Definition: uint256.h:38
uint256S
uint256 uint256S(const char *str)
Definition: uint256.h:99
uint256::GetHash
uint64_t GetHash(const uint256 &salt) const
Definition: uint256.cpp:99
base_uint::SetHex
void SetHex(const char *psz)
Definition: arith_uint256.cpp:164
UintToArith256
arith_uint256 UintToArith256(const uint256 &)
Definition: uint256.cpp:126
uint160::uint160
uint160(uint64_t b)
Definition: uint256.h:32
base_uint
Template base class for unsigned big integers.
Definition: arith_uint256.h:30
uint256::uint256
uint256(const std::string &str)
Definition: uint256.h:44
uint256::uint256
uint256()
Definition: uint256.h:41
uint160
160-bit unsigned big integer.
Definition: uint256.h:27
uint160::uint160
uint160(const std::string &str)
Definition: uint256.h:33
base_uint< 256 >::WIDTH
@ WIDTH
Definition: arith_uint256.h:33
uint512::UintToArith512
friend arith_uint512 UintToArith512(const uint512 &a)
Definition: uint256.cpp:142
uint512::ArithToUint512
friend uint512 ArithToUint512(const arith_uint512 &a)
Definition: uint256.cpp:134
uint256::uint256
uint256(const std::vector< unsigned char > &vch)
Definition: uint256.h:45
uint512
512-bit unsigned big integer.
Definition: uint256.h:73
uint512::uint512
uint512(const base_uint< 512 > &b)
Definition: uint256.h:77
uint512S
uint512 uint512S(const std::string &str)
Definition: uint256.h:116
base_uint::pn
uint32_t pn[WIDTH]
Definition: arith_uint256.h:34
uint256::uint256
uint256(const base_uint< 256 > &b)
Definition: uint256.h:42