X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fuint256.h;h=c07bce4ea04be5b47e09a8442b966b1405c20f10;hb=d11488abd05cb39a9f481e7c4c35f780197a3d28;hp=b6132822c5dfc0ffa0599d451c83b4af6a34b2c4;hpb=f8ded588a2f78ac2767a60c716a7d15c273b4fc7;p=novacoin.git diff --git a/src/uint256.h b/src/uint256.h index b613282..c07bce4 100644 --- a/src/uint256.h +++ b/src/uint256.h @@ -1,34 +1,28 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. +// file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_UINT256_H #define BITCOIN_UINT256_H #include "serialize.h" #include +#include #include #include -#if defined(_MSC_VER) || defined(__BORLANDC__) -typedef __int64 int64; -typedef unsigned __int64 uint64; -#else typedef long long int64; typedef unsigned long long uint64; -#endif -#if defined(_MSC_VER) && _MSC_VER < 1300 -#define for if (false) ; else for -#endif inline int Testuint256AdHoc(std::vector vArg); -// We have to keep a separate base class without constructors -// so the compiler will let us use it in a union +/** Base class without constructors for uint256 and uint160. + * This makes the compiler let u use it in a union. + */ template class base_uint { @@ -100,13 +94,6 @@ public: return *this; } - base_uint& operator&=(uint64 b) - { - pn[0] &= (unsigned int)b; - pn[1] &= (unsigned int)(b >> 32); - return *this; - } - base_uint& operator|=(uint64 b) { pn[0] |= (unsigned int)b; @@ -301,7 +288,7 @@ public: std::string GetHex() const { char psz[sizeof(pn)*2 + 1]; - for (int i = 0; i < sizeof(pn); i++) + for (unsigned int i = 0; i < sizeof(pn); i++) sprintf(psz + i*2, "%02x", ((unsigned char*)pn)[sizeof(pn) - i - 1]); return std::string(psz, psz + sizeof(pn)*2); } @@ -320,9 +307,9 @@ public: psz += 2; // hex string to uint - static char phexdigit[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0, 0,0xa,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0xa,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0,0,0,0,0 }; + static unsigned char phexdigit[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0, 0,0xa,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0xa,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0,0,0,0,0 }; const char* pbegin = psz; - while (phexdigit[*psz] || *psz == '0') + while (phexdigit[(unsigned char)*psz] || *psz == '0') psz++; psz--; unsigned char* p1 = (unsigned char*)pn; @@ -363,6 +350,10 @@ public: return sizeof(pn); } + uint64 Get64(int n=0) const + { + return pn[2*n] | (uint64)pn[2*n+1] << 32; + } unsigned int GetSerializeSize(int nType=0, int nVersion=PROTOCOL_VERSION) const { @@ -404,6 +395,7 @@ typedef base_uint<256> base_uint256; // uint160 // +/** 160-bit unsigned integer */ class uint160 : public base_uint160 { public: @@ -518,6 +510,7 @@ inline const uint160 operator-(const uint160& a, const uint160& b) { return // uint256 // +/** 256-bit unsigned integer */ class uint256 : public base_uint256 { public: @@ -631,7 +624,7 @@ inline const uint256 operator-(const uint256& a, const uint256& b) { return - +#ifdef TEST_UINT256 inline int Testuint256AdHoc(std::vector vArg) { @@ -764,3 +757,5 @@ inline int Testuint256AdHoc(std::vector vArg) } #endif + +#endif