X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fserialize.h;h=61120fd496982d8e2362e254659e0abe647863e7;hb=09f2a990950512cbe418526d91838887a0dded2a;hp=cb3a3ea03c410afbbaf77bb20954f042aa3fffa8;hpb=24a0def8cda671e9faedb84e6590eb761ba7487e;p=novacoin.git diff --git a/src/serialize.h b/src/serialize.h index cb3a3ea..61120fd 100644 --- a/src/serialize.h +++ b/src/serialize.h @@ -1,4 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto +// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2012 The PPCoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_SERIALIZE_H @@ -29,11 +31,13 @@ typedef unsigned long long uint64; #define for if (false) ; else for #endif -#ifdef __WXMSW__ +#ifdef WIN32 +#include // This is used to attempt to keep keying material out of swap // Note that VirtualLock does not provide this as a guarantee on Windows, // but, in practice, memory that has been VirtualLock'd almost never gets written to // the pagefile except in rare circumstances where memory is extremely low. +#include #define mlock(p, n) VirtualLock((p), (n)); #define munlock(p, n) VirtualUnlock((p), (n)); #else @@ -57,14 +61,19 @@ class CDataStream; class CAutoFile; static const unsigned int MAX_SIZE = 0x02000000; -static const int VERSION = 32500; +static const int VERSION = 50100; static const char* pszSubVer = ""; static const bool VERSION_IS_BETA = true; +static const int PPCOIN_VERSION = 100; - - - +// Used to bypass the rule against non-const reference to temporary +// where it makes sense with wrappers such as CFlatData or CTxDB +template +inline T& REF(const T& val) +{ + return const_cast(val); +} ///////////////////////////////////////////////////////////////// // @@ -180,8 +189,14 @@ template inline void Unserialize(Stream& s, bool& a, int, int=0 - - +#ifndef THROW_WITH_STACKTRACE +#define THROW_WITH_STACKTRACE(exception) \ +{ \ + LogStackTrace(); \ + throw (exception); \ +} +void LogStackTrace(); +#endif // // Compact size @@ -259,7 +274,7 @@ uint64 ReadCompactSize(Stream& is) nSizeRet = xSize; } if (nSizeRet > (uint64)MAX_SIZE) - throw std::ios_base::failure("ReadCompactSize() : size too large"); + THROW_WITH_STACKTRACE(std::ios_base::failure("ReadCompactSize() : size too large")); return nSizeRet; } @@ -332,7 +347,7 @@ public: void Unserialize(Stream& s, int, int=0) { if (pstr == NULL) - throw std::ios_base::failure("CFixedFieldString::Unserialize : trying to unserialize to const string"); + THROW_WITH_STACKTRACE(std::ios_base::failure("CFixedFieldString::Unserialize : trying to unserialize to const string")); char pszBuf[LEN+1]; s.read(pszBuf, LEN); pszBuf[LEN] = '\0'; @@ -1026,7 +1041,7 @@ public: { state |= bits; if (state & exceptmask) - throw std::ios_base::failure(psz); + THROW_WITH_STACKTRACE(std::ios_base::failure(psz)); } bool eof() const { return size() == 0; } @@ -1243,7 +1258,7 @@ public: { state |= bits; if (state & exceptmask) - throw std::ios_base::failure(psz); + THROW_WITH_STACKTRACE(std::ios_base::failure(psz)); } bool fail() const { return state & (std::ios::badbit | std::ios::failbit); }