Anoncoin  0.9.4
P2P Digital Currency
uint256.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2013 The Bitcoin developers
3 // Copyright (c) 2013-2014 The Anoncoin Core developers
4 // Distributed under the MIT/X11 software license, see the accompanying
5 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
6 
7 #ifndef ANONCOIN_UINT256_H
8 #define ANONCOIN_UINT256_H
9 
10 #include <stdint.h>
11 #include <stdio.h>
12 #include <string>
13 #include <string.h>
14 #include <vector>
15 
16 extern const signed char p_util_hexdigit[256]; // defined in util.cpp
17 
18 inline signed char HexDigit(char c)
19 {
20  return p_util_hexdigit[(unsigned char)c];
21 }
22 
26 template<unsigned int BITS>
27 class base_uint
28 {
29 protected:
30  enum { WIDTH=BITS/32 };
31  uint32_t pn[WIDTH];
32 public:
33 
34  bool operator!() const
35  {
36  for (int i = 0; i < WIDTH; i++)
37  if (pn[i] != 0)
38  return false;
39  return true;
40  }
41 
42  const base_uint operator~() const
43  {
44  base_uint ret;
45  for (int i = 0; i < WIDTH; i++)
46  ret.pn[i] = ~pn[i];
47  return ret;
48  }
49 
50  const base_uint operator-() const
51  {
52  base_uint ret;
53  for (int i = 0; i < WIDTH; i++)
54  ret.pn[i] = ~pn[i];
55  ret++;
56  return ret;
57  }
58 
59  double getdouble() const
60  {
61  double ret = 0.0;
62  double fact = 1.0;
63  for (int i = 0; i < WIDTH; i++) {
64  ret += fact * pn[i];
65  fact *= 4294967296.0;
66  }
67  return ret;
68  }
69 
70  base_uint& operator=(uint64_t b)
71  {
72  pn[0] = (unsigned int)b;
73  pn[1] = (unsigned int)(b >> 32);
74  for (int i = 2; i < WIDTH; i++)
75  pn[i] = 0;
76  return *this;
77  }
78 
80  {
81  for (int i = 0; i < WIDTH; i++)
82  pn[i] ^= b.pn[i];
83  return *this;
84  }
85 
87  {
88  for (int i = 0; i < WIDTH; i++)
89  pn[i] &= b.pn[i];
90  return *this;
91  }
92 
94  {
95  for (int i = 0; i < WIDTH; i++)
96  pn[i] |= b.pn[i];
97  return *this;
98  }
99 
100  base_uint& operator^=(uint64_t b)
101  {
102  pn[0] ^= (unsigned int)b;
103  pn[1] ^= (unsigned int)(b >> 32);
104  return *this;
105  }
106 
107  base_uint& operator|=(uint64_t b)
108  {
109  pn[0] |= (unsigned int)b;
110  pn[1] |= (unsigned int)(b >> 32);
111  return *this;
112  }
113 
114  base_uint& operator<<=(unsigned int shift)
115  {
116  base_uint a(*this);
117  for (int i = 0; i < WIDTH; i++)
118  pn[i] = 0;
119  int k = shift / 32;
120  shift = shift % 32;
121  for (int i = 0; i < WIDTH; i++)
122  {
123  if (i+k+1 < WIDTH && shift != 0)
124  pn[i+k+1] |= (a.pn[i] >> (32-shift));
125  if (i+k < WIDTH)
126  pn[i+k] |= (a.pn[i] << shift);
127  }
128  return *this;
129  }
130 
131  base_uint& operator>>=(unsigned int shift)
132  {
133  base_uint a(*this);
134  for (int i = 0; i < WIDTH; i++)
135  pn[i] = 0;
136  int k = shift / 32;
137  shift = shift % 32;
138  for (int i = 0; i < WIDTH; i++)
139  {
140  if (i-k-1 >= 0 && shift != 0)
141  pn[i-k-1] |= (a.pn[i] << (32-shift));
142  if (i-k >= 0)
143  pn[i-k] |= (a.pn[i] >> shift);
144  }
145  return *this;
146  }
147 
149  {
150  uint64_t carry = 0;
151  for (int i = 0; i < WIDTH; i++)
152  {
153  uint64_t n = carry + pn[i] + b.pn[i];
154  pn[i] = n & 0xffffffff;
155  carry = n >> 32;
156  }
157  return *this;
158  }
159 
161  {
162  *this += -b;
163  return *this;
164  }
165 
166  base_uint& operator+=(uint64_t b64)
167  {
168  base_uint b;
169  b = b64;
170  *this += b;
171  return *this;
172  }
173 
174  base_uint& operator-=(uint64_t b64)
175  {
176  base_uint b;
177  b = b64;
178  *this += -b;
179  return *this;
180  }
181 
182 
184  {
185  // prefix operator
186  int i = 0;
187  while (++pn[i] == 0 && i < WIDTH-1)
188  i++;
189  return *this;
190  }
191 
193  {
194  // postfix operator
195  const base_uint ret = *this;
196  ++(*this);
197  return ret;
198  }
199 
201  {
202  // prefix operator
203  int i = 0;
204  while (--pn[i] == (uint32_t)-1 && i < WIDTH-1)
205  i++;
206  return *this;
207  }
208 
210  {
211  // postfix operator
212  const base_uint ret = *this;
213  --(*this);
214  return ret;
215  }
216 
217 
218  friend inline bool operator<(const base_uint& a, const base_uint& b)
219  {
220  for (int i = base_uint::WIDTH-1; i >= 0; i--)
221  {
222  if (a.pn[i] < b.pn[i])
223  return true;
224  else if (a.pn[i] > b.pn[i])
225  return false;
226  }
227  return false;
228  }
229 
230  friend inline bool operator<=(const base_uint& a, const base_uint& b)
231  {
232  for (int i = base_uint::WIDTH-1; i >= 0; i--)
233  {
234  if (a.pn[i] < b.pn[i])
235  return true;
236  else if (a.pn[i] > b.pn[i])
237  return false;
238  }
239  return true;
240  }
241 
242  friend inline bool operator>(const base_uint& a, const base_uint& b)
243  {
244  for (int i = base_uint::WIDTH-1; i >= 0; i--)
245  {
246  if (a.pn[i] > b.pn[i])
247  return true;
248  else if (a.pn[i] < b.pn[i])
249  return false;
250  }
251  return false;
252  }
253 
254  friend inline bool operator>=(const base_uint& a, const base_uint& b)
255  {
256  for (int i = base_uint::WIDTH-1; i >= 0; i--)
257  {
258  if (a.pn[i] > b.pn[i])
259  return true;
260  else if (a.pn[i] < b.pn[i])
261  return false;
262  }
263  return true;
264  }
265 
266  friend inline bool operator==(const base_uint& a, const base_uint& b)
267  {
268  for (int i = 0; i < base_uint::WIDTH; i++)
269  if (a.pn[i] != b.pn[i])
270  return false;
271  return true;
272  }
273 
274  friend inline bool operator==(const base_uint& a, uint64_t b)
275  {
276  if (a.pn[0] != (unsigned int)b)
277  return false;
278  if (a.pn[1] != (unsigned int)(b >> 32))
279  return false;
280  for (int i = 2; i < base_uint::WIDTH; i++)
281  if (a.pn[i] != 0)
282  return false;
283  return true;
284  }
285 
286  friend inline bool operator!=(const base_uint& a, const base_uint& b)
287  {
288  return (!(a == b));
289  }
290 
291  friend inline bool operator!=(const base_uint& a, uint64_t b)
292  {
293  return (!(a == b));
294  }
295 
296 
297 
298  std::string GetHex() const
299  {
300  char psz[sizeof(pn)*2 + 1];
301  for (unsigned int i = 0; i < sizeof(pn); i++)
302  sprintf(psz + i*2, "%02x", ((unsigned char*)pn)[sizeof(pn) - i - 1]);
303  return std::string(psz, psz + sizeof(pn)*2);
304  }
305 
306  void SetHex(const char* psz)
307  {
308  memset(pn,0,sizeof(pn));
309 
310  // skip leading spaces
311  while (isspace(*psz))
312  psz++;
313 
314  // skip 0x
315  if (psz[0] == '0' && tolower(psz[1]) == 'x')
316  psz += 2;
317 
318  // hex string to uint
319  const char* pbegin = psz;
320  while (::HexDigit(*psz) != -1)
321  psz++;
322  psz--;
323  unsigned char* p1 = (unsigned char*)pn;
324  unsigned char* pend = p1 + WIDTH * 4;
325  while (psz >= pbegin && p1 < pend)
326  {
327  *p1 = ::HexDigit(*psz--);
328  if (psz >= pbegin)
329  {
330  *p1 |= ((unsigned char)::HexDigit(*psz--) << 4);
331  p1++;
332  }
333  }
334  }
335 
336  void SetHex(const std::string& str)
337  {
338  SetHex(str.c_str());
339  }
340 
341  std::string ToString() const
342  {
343  return (GetHex());
344  }
345 
346  unsigned char* begin()
347  {
348  return (unsigned char*)&pn[0];
349  }
350 
351  unsigned char* end()
352  {
353  return (unsigned char*)&pn[WIDTH];
354  }
355 
356  const unsigned char* begin() const
357  {
358  return (unsigned char*)&pn[0];
359  }
360 
361  const unsigned char* end() const
362  {
363  return (unsigned char*)&pn[WIDTH];
364  }
365 
366  unsigned int size() const
367  {
368  return sizeof(pn);
369  }
370 
371  uint64_t GetLow64() const
372  {
373  assert(WIDTH >= 2);
374  return pn[0] | (uint64_t)pn[1] << 32;
375  }
376 
377 // unsigned int GetSerializeSize(int nType=0, int nVersion=PROTOCOL_VERSION) const
378  unsigned int GetSerializeSize(int nType, int nVersion) const
379  {
380  return sizeof(pn);
381  }
382 
383  template<typename Stream>
384 // void Serialize(Stream& s, int nType=0, int nVersion=PROTOCOL_VERSION) const
385  void Serialize(Stream& s, int nType, int nVersion) const
386  {
387  s.write((char*)pn, sizeof(pn));
388  }
389 
390  template<typename Stream>
391 // void Unserialize(Stream& s, int nType=0, int nVersion=PROTOCOL_VERSION)
392  void Unserialize(Stream& s, int nType, int nVersion)
393  {
394  s.read((char*)pn, sizeof(pn));
395  }
396 
397 
398  friend class uint160;
399  friend class uint256;
400 };
401 
404 
405 
406 
407 //
408 // uint160 and uint256 could be implemented as templates, but to keep
409 // compile errors and debugging cleaner, they're copy and pasted.
410 //
411 
412 
413 
415 //
416 // uint160
417 //
418 
420 class uint160 : public base_uint160
421 {
422 public:
424 
426  {
427  for (int i = 0; i < WIDTH; i++)
428  pn[i] = 0;
429  }
430 
431  uint160(const basetype& b)
432  {
433  for (int i = 0; i < WIDTH; i++)
434  pn[i] = b.pn[i];
435  }
436 
437  uint160& operator=(const basetype& b)
438  {
439  for (int i = 0; i < WIDTH; i++)
440  pn[i] = b.pn[i];
441  return *this;
442  }
443 
444  uint160(uint64_t b)
445  {
446  pn[0] = (unsigned int)b;
447  pn[1] = (unsigned int)(b >> 32);
448  for (int i = 2; i < WIDTH; i++)
449  pn[i] = 0;
450  }
451 
452  uint160& operator=(uint64_t b)
453  {
454  pn[0] = (unsigned int)b;
455  pn[1] = (unsigned int)(b >> 32);
456  for (int i = 2; i < WIDTH; i++)
457  pn[i] = 0;
458  return *this;
459  }
460 
461  explicit uint160(const std::string& str)
462  {
463  SetHex(str);
464  }
465 
466  explicit uint160(const std::vector<unsigned char>& vch)
467  {
468  if (vch.size() == sizeof(pn))
469  memcpy(pn, &vch[0], sizeof(pn));
470  else
471  *this = 0;
472  }
473 };
474 
475 inline bool operator==(const uint160& a, uint64_t b) { return (base_uint160)a == b; }
476 inline bool operator!=(const uint160& a, uint64_t b) { return (base_uint160)a != b; }
477 inline const uint160 operator<<(const base_uint160& a, unsigned int shift) { return uint160(a) <<= shift; }
478 inline const uint160 operator>>(const base_uint160& a, unsigned int shift) { return uint160(a) >>= shift; }
479 inline const uint160 operator<<(const uint160& a, unsigned int shift) { return uint160(a) <<= shift; }
480 inline const uint160 operator>>(const uint160& a, unsigned int shift) { return uint160(a) >>= shift; }
481 
482 inline const uint160 operator^(const base_uint160& a, const base_uint160& b) { return uint160(a) ^= b; }
483 inline const uint160 operator&(const base_uint160& a, const base_uint160& b) { return uint160(a) &= b; }
484 inline const uint160 operator|(const base_uint160& a, const base_uint160& b) { return uint160(a) |= b; }
485 inline const uint160 operator+(const base_uint160& a, const base_uint160& b) { return uint160(a) += b; }
486 inline const uint160 operator-(const base_uint160& a, const base_uint160& b) { return uint160(a) -= b; }
487 
488 inline bool operator<(const base_uint160& a, const uint160& b) { return (base_uint160)a < (base_uint160)b; }
489 inline bool operator<=(const base_uint160& a, const uint160& b) { return (base_uint160)a <= (base_uint160)b; }
490 inline bool operator>(const base_uint160& a, const uint160& b) { return (base_uint160)a > (base_uint160)b; }
491 inline bool operator>=(const base_uint160& a, const uint160& b) { return (base_uint160)a >= (base_uint160)b; }
492 inline bool operator==(const base_uint160& a, const uint160& b) { return (base_uint160)a == (base_uint160)b; }
493 inline bool operator!=(const base_uint160& a, const uint160& b) { return (base_uint160)a != (base_uint160)b; }
494 inline const uint160 operator^(const base_uint160& a, const uint160& b) { return (base_uint160)a ^ (base_uint160)b; }
495 inline const uint160 operator&(const base_uint160& a, const uint160& b) { return (base_uint160)a & (base_uint160)b; }
496 inline const uint160 operator|(const base_uint160& a, const uint160& b) { return (base_uint160)a | (base_uint160)b; }
497 inline const uint160 operator+(const base_uint160& a, const uint160& b) { return (base_uint160)a + (base_uint160)b; }
498 inline const uint160 operator-(const base_uint160& a, const uint160& b) { return (base_uint160)a - (base_uint160)b; }
499 
500 inline bool operator<(const uint160& a, const base_uint160& b) { return (base_uint160)a < (base_uint160)b; }
501 inline bool operator<=(const uint160& a, const base_uint160& b) { return (base_uint160)a <= (base_uint160)b; }
502 inline bool operator>(const uint160& a, const base_uint160& b) { return (base_uint160)a > (base_uint160)b; }
503 inline bool operator>=(const uint160& a, const base_uint160& b) { return (base_uint160)a >= (base_uint160)b; }
504 inline bool operator==(const uint160& a, const base_uint160& b) { return (base_uint160)a == (base_uint160)b; }
505 inline bool operator!=(const uint160& a, const base_uint160& b) { return (base_uint160)a != (base_uint160)b; }
506 inline const uint160 operator^(const uint160& a, const base_uint160& b) { return (base_uint160)a ^ (base_uint160)b; }
507 inline const uint160 operator&(const uint160& a, const base_uint160& b) { return (base_uint160)a & (base_uint160)b; }
508 inline const uint160 operator|(const uint160& a, const base_uint160& b) { return (base_uint160)a | (base_uint160)b; }
509 inline const uint160 operator+(const uint160& a, const base_uint160& b) { return (base_uint160)a + (base_uint160)b; }
510 inline const uint160 operator-(const uint160& a, const base_uint160& b) { return (base_uint160)a - (base_uint160)b; }
511 
512 inline bool operator<(const uint160& a, const uint160& b) { return (base_uint160)a < (base_uint160)b; }
513 inline bool operator<=(const uint160& a, const uint160& b) { return (base_uint160)a <= (base_uint160)b; }
514 inline bool operator>(const uint160& a, const uint160& b) { return (base_uint160)a > (base_uint160)b; }
515 inline bool operator>=(const uint160& a, const uint160& b) { return (base_uint160)a >= (base_uint160)b; }
516 inline bool operator==(const uint160& a, const uint160& b) { return (base_uint160)a == (base_uint160)b; }
517 inline bool operator!=(const uint160& a, const uint160& b) { return (base_uint160)a != (base_uint160)b; }
518 inline const uint160 operator^(const uint160& a, const uint160& b) { return (base_uint160)a ^ (base_uint160)b; }
519 inline const uint160 operator&(const uint160& a, const uint160& b) { return (base_uint160)a & (base_uint160)b; }
520 inline const uint160 operator|(const uint160& a, const uint160& b) { return (base_uint160)a | (base_uint160)b; }
521 inline const uint160 operator+(const uint160& a, const uint160& b) { return (base_uint160)a + (base_uint160)b; }
522 inline const uint160 operator-(const uint160& a, const uint160& b) { return (base_uint160)a - (base_uint160)b; }
523 
524 
525 
527 //
528 // uint256
529 //
530 
532 class uint256 : public base_uint256
533 {
534 public:
536 
538  {
539  for (int i = 0; i < WIDTH; i++)
540  pn[i] = 0;
541  }
542 
543  uint256(const basetype& b)
544  {
545  for (int i = 0; i < WIDTH; i++)
546  pn[i] = b.pn[i];
547  }
548 
549  uint256& operator=(const basetype& b)
550  {
551  for (int i = 0; i < WIDTH; i++)
552  pn[i] = b.pn[i];
553  return *this;
554  }
555 
556  uint256(uint64_t b)
557  {
558  pn[0] = (unsigned int)b;
559  pn[1] = (unsigned int)(b >> 32);
560  for (int i = 2; i < WIDTH; i++)
561  pn[i] = 0;
562  }
563 
564  uint256& operator=(uint64_t b)
565  {
566  pn[0] = (unsigned int)b;
567  pn[1] = (unsigned int)(b >> 32);
568  for (int i = 2; i < WIDTH; i++)
569  pn[i] = 0;
570  return *this;
571  }
572 
573  explicit uint256(const std::string& str)
574  {
575  SetHex(str);
576  }
577 
578  explicit uint256(const std::vector<unsigned char>& vch)
579  {
580  if (vch.size() == sizeof(pn))
581  memcpy(pn, &vch[0], sizeof(pn));
582  else
583  *this = 0;
584  }
585 };
586 
587 inline bool operator==(const uint256& a, uint64_t b) { return (base_uint256)a == b; }
588 inline bool operator!=(const uint256& a, uint64_t b) { return (base_uint256)a != b; }
589 inline const uint256 operator<<(const base_uint256& a, unsigned int shift) { return uint256(a) <<= shift; }
590 inline const uint256 operator>>(const base_uint256& a, unsigned int shift) { return uint256(a) >>= shift; }
591 inline const uint256 operator<<(const uint256& a, unsigned int shift) { return uint256(a) <<= shift; }
592 inline const uint256 operator>>(const uint256& a, unsigned int shift) { return uint256(a) >>= shift; }
593 
594 inline const uint256 operator^(const base_uint256& a, const base_uint256& b) { return uint256(a) ^= b; }
595 inline const uint256 operator&(const base_uint256& a, const base_uint256& b) { return uint256(a) &= b; }
596 inline const uint256 operator|(const base_uint256& a, const base_uint256& b) { return uint256(a) |= b; }
597 inline const uint256 operator+(const base_uint256& a, const base_uint256& b) { return uint256(a) += b; }
598 inline const uint256 operator-(const base_uint256& a, const base_uint256& b) { return uint256(a) -= b; }
599 
600 inline bool operator<(const base_uint256& a, const uint256& b) { return (base_uint256)a < (base_uint256)b; }
601 inline bool operator<=(const base_uint256& a, const uint256& b) { return (base_uint256)a <= (base_uint256)b; }
602 inline bool operator>(const base_uint256& a, const uint256& b) { return (base_uint256)a > (base_uint256)b; }
603 inline bool operator>=(const base_uint256& a, const uint256& b) { return (base_uint256)a >= (base_uint256)b; }
604 inline bool operator==(const base_uint256& a, const uint256& b) { return (base_uint256)a == (base_uint256)b; }
605 inline bool operator!=(const base_uint256& a, const uint256& b) { return (base_uint256)a != (base_uint256)b; }
606 inline const uint256 operator^(const base_uint256& a, const uint256& b) { return (base_uint256)a ^ (base_uint256)b; }
607 inline const uint256 operator&(const base_uint256& a, const uint256& b) { return (base_uint256)a & (base_uint256)b; }
608 inline const uint256 operator|(const base_uint256& a, const uint256& b) { return (base_uint256)a | (base_uint256)b; }
609 inline const uint256 operator+(const base_uint256& a, const uint256& b) { return (base_uint256)a + (base_uint256)b; }
610 inline const uint256 operator-(const base_uint256& a, const uint256& b) { return (base_uint256)a - (base_uint256)b; }
611 
612 inline bool operator<(const uint256& a, const base_uint256& b) { return (base_uint256)a < (base_uint256)b; }
613 inline bool operator<=(const uint256& a, const base_uint256& b) { return (base_uint256)a <= (base_uint256)b; }
614 inline bool operator>(const uint256& a, const base_uint256& b) { return (base_uint256)a > (base_uint256)b; }
615 inline bool operator>=(const uint256& a, const base_uint256& b) { return (base_uint256)a >= (base_uint256)b; }
616 inline bool operator==(const uint256& a, const base_uint256& b) { return (base_uint256)a == (base_uint256)b; }
617 inline bool operator!=(const uint256& a, const base_uint256& b) { return (base_uint256)a != (base_uint256)b; }
618 inline const uint256 operator^(const uint256& a, const base_uint256& b) { return (base_uint256)a ^ (base_uint256)b; }
619 inline const uint256 operator&(const uint256& a, const base_uint256& b) { return (base_uint256)a & (base_uint256)b; }
620 inline const uint256 operator|(const uint256& a, const base_uint256& b) { return (base_uint256)a | (base_uint256)b; }
621 inline const uint256 operator+(const uint256& a, const base_uint256& b) { return (base_uint256)a + (base_uint256)b; }
622 inline const uint256 operator-(const uint256& a, const base_uint256& b) { return (base_uint256)a - (base_uint256)b; }
623 
624 inline bool operator<(const uint256& a, const uint256& b) { return (base_uint256)a < (base_uint256)b; }
625 inline bool operator<=(const uint256& a, const uint256& b) { return (base_uint256)a <= (base_uint256)b; }
626 inline bool operator>(const uint256& a, const uint256& b) { return (base_uint256)a > (base_uint256)b; }
627 inline bool operator>=(const uint256& a, const uint256& b) { return (base_uint256)a >= (base_uint256)b; }
628 inline bool operator==(const uint256& a, const uint256& b) { return (base_uint256)a == (base_uint256)b; }
629 inline bool operator!=(const uint256& a, const uint256& b) { return (base_uint256)a != (base_uint256)b; }
630 inline const uint256 operator^(const uint256& a, const uint256& b) { return (base_uint256)a ^ (base_uint256)b; }
631 inline const uint256 operator&(const uint256& a, const uint256& b) { return (base_uint256)a & (base_uint256)b; }
632 inline const uint256 operator|(const uint256& a, const uint256& b) { return (base_uint256)a | (base_uint256)b; }
633 inline const uint256 operator+(const uint256& a, const uint256& b) { return (base_uint256)a + (base_uint256)b; }
634 inline const uint256 operator-(const uint256& a, const uint256& b) { return (base_uint256)a - (base_uint256)b; }
635 
636 #endif
const uint160 operator-(const base_uint160 &a, const base_uint160 &b)
Definition: uint256.h:486
void SetHex(const char *psz)
Definition: uint256.h:306
const unsigned char * begin() const
Definition: uint256.h:356
void SetHex(const std::string &str)
Definition: uint256.h:336
const uint160 operator>>(const base_uint160 &a, unsigned int shift)
Definition: uint256.h:478
uint256(const basetype &b)
Definition: uint256.h:543
bool operator<=(const base_uint160 &a, const uint160 &b)
Definition: uint256.h:489
base_uint & operator|=(uint64_t b)
Definition: uint256.h:107
unsigned char * end()
Definition: uint256.h:351
base_uint256 basetype
Definition: uint256.h:535
unsigned char * begin()
Definition: uint256.h:346
base_uint & operator<<=(unsigned int shift)
Definition: uint256.h:114
const base_uint operator-() const
Definition: uint256.h:50
friend bool operator!=(const base_uint &a, uint64_t b)
Definition: uint256.h:291
uint256(uint64_t b)
Definition: uint256.h:556
base_uint & operator+=(const base_uint &b)
Definition: uint256.h:148
uint160(const std::string &str)
Definition: uint256.h:461
friend bool operator<=(const base_uint &a, const base_uint &b)
Definition: uint256.h:230
base_uint & operator|=(const base_uint &b)
Definition: uint256.h:93
base_uint & operator-=(uint64_t b64)
Definition: uint256.h:174
bool operator!() const
Definition: uint256.h:34
friend bool operator>(const base_uint &a, const base_uint &b)
Definition: uint256.h:242
uint160(const basetype &b)
Definition: uint256.h:431
Base class without constructors for uint256 and uint160.
Definition: uint256.h:27
base_uint & operator+=(uint64_t b64)
Definition: uint256.h:166
uint160()
Definition: uint256.h:425
void Serialize(Stream &s, int nType, int nVersion) const
Definition: uint256.h:385
uint160 & operator=(uint64_t b)
Definition: uint256.h:452
const uint160 operator<<(const base_uint160 &a, unsigned int shift)
Definition: uint256.h:477
base_uint & operator--()
Definition: uint256.h:200
base_uint & operator&=(const base_uint &b)
Definition: uint256.h:86
uint32_t pn[WIDTH]
Definition: uint256.h:31
signed char HexDigit(char c)
Definition: uint256.h:18
uint256(const std::vector< unsigned char > &vch)
Definition: uint256.h:578
base_uint & operator-=(const base_uint &b)
Definition: uint256.h:160
friend bool operator==(const base_uint &a, const base_uint &b)
Definition: uint256.h:266
double getdouble() const
Definition: uint256.h:59
const signed char p_util_hexdigit[256]
Definition: util.cpp:391
friend bool operator<(const base_uint &a, const base_uint &b)
Definition: uint256.h:218
bool operator!=(const uint160 &a, uint64_t b)
Definition: uint256.h:476
const uint160 operator^(const base_uint160 &a, const base_uint160 &b)
Definition: uint256.h:482
uint256 & operator=(const basetype &b)
Definition: uint256.h:549
uint160 & operator=(const basetype &b)
Definition: uint256.h:437
base_uint< 160 > base_uint160
Definition: uint256.h:402
bool operator<(const base_uint160 &a, const uint160 &b)
Definition: uint256.h:488
const uint160 operator|(const base_uint160 &a, const base_uint160 &b)
Definition: uint256.h:484
base_uint & operator^=(uint64_t b)
Definition: uint256.h:100
std::string GetHex() const
Definition: uint256.h:298
uint256()
Definition: uint256.h:537
uint160(uint64_t b)
Definition: uint256.h:444
uint256 & operator=(uint64_t b)
Definition: uint256.h:564
256-bit unsigned integer
Definition: uint256.h:532
const uint160 operator&(const base_uint160 &a, const base_uint160 &b)
Definition: uint256.h:483
base_uint & operator++()
Definition: uint256.h:183
friend bool operator!=(const base_uint &a, const base_uint &b)
Definition: uint256.h:286
void * memcpy(void *a, const void *b, size_t c)
unsigned int GetSerializeSize(int nType, int nVersion) const
Definition: uint256.h:378
std::string ToString() const
Definition: uint256.h:341
bool operator==(const uint160 &a, uint64_t b)
Definition: uint256.h:475
bool operator>(const base_uint160 &a, const uint160 &b)
Definition: uint256.h:490
base_uint< 256 > base_uint256
Definition: uint256.h:403
const uint160 operator+(const base_uint160 &a, const base_uint160 &b)
Definition: uint256.h:485
160-bit unsigned integer
Definition: uint256.h:420
base_uint & operator=(uint64_t b)
Definition: uint256.h:70
uint160(const std::vector< unsigned char > &vch)
Definition: uint256.h:466
const base_uint operator--(int)
Definition: uint256.h:209
const base_uint operator~() const
Definition: uint256.h:42
const base_uint operator++(int)
Definition: uint256.h:192
base_uint160 basetype
Definition: uint256.h:423
friend bool operator>=(const base_uint &a, const base_uint &b)
Definition: uint256.h:254
const unsigned char * end() const
Definition: uint256.h:361
void Unserialize(Stream &s, int nType, int nVersion)
Definition: uint256.h:392
unsigned int size() const
Definition: uint256.h:366
uint64_t GetLow64() const
Definition: uint256.h:371
friend bool operator==(const base_uint &a, uint64_t b)
Definition: uint256.h:274
bool operator>=(const base_uint160 &a, const uint160 &b)
Definition: uint256.h:491
uint256(const std::string &str)
Definition: uint256.h:573
base_uint & operator>>=(unsigned int shift)
Definition: uint256.h:131
base_uint & operator^=(const base_uint &b)
Definition: uint256.h:79