X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Futil.h;h=8a69fc1a28adac344cc018329afdc13d22a35794;hb=HEAD;hp=25f6c2aca6bb3a084ef46fbf5e1d2d0b1bc359de;hpb=fe326c477b0b109819653dc2657495f867ff8616;p=novacoin.git diff --git a/src/util.h b/src/util.h index 25f6c2a..8a69fc1 100644 --- a/src/util.h +++ b/src/util.h @@ -6,35 +6,36 @@ #define BITCOIN_UTIL_H -#include "uint256.h" - #ifndef WIN32 #include #include #include #endif -#include -#include -#include +#ifdef WIN32 +#include "compat.h" +#endif #ifndef Q_MOC_RUN #include -#include #include #include #include #endif -#include - #if defined(__USE_MINGW_ANSI_STDIO) #undef __USE_MINGW_ANSI_STDIO // This constant forces MinGW to conduct stupid behavior #endif -#include -#include "netbase.h" // for AddTimeData +#include +#include +#include +#include +#include +static const int32_t nOneHour = 60 * 60; +static const int32_t nOneDay = 24 * 60 * 60; +static const int64_t nOneWeek = 7 * 24 * 60 * 60; static const int64_t COIN = 1000000; static const int64_t CENT = 10000; @@ -59,6 +60,18 @@ static const int64_t CENT = 10000; void LogStackTrace(); #endif +#if defined(_MSC_VER) || defined(__MSVCRT__) + /* Silence compiler warnings on Windows + related to MinGWs inttypes.h */ + #undef PRIu64 + #undef PRId64 + #undef PRIx64 + + #define PRIu64 "I64u" + #define PRId64 "I64d" + #define PRIx64 "I64x" + +#endif /* Format characters for (s)size_t and ptrdiff_t */ #if defined(_MSC_VER) || defined(__MSVCRT__) @@ -126,12 +139,6 @@ inline void Sleep(int64_t n) #endif - - - - - - extern std::map mapArgs; extern std::map > mapMultiArgs; extern bool fDebug; @@ -149,8 +156,6 @@ extern bool fNoListen; extern bool fLogTimestamps; extern bool fReopenDebugLog; -void RandAddSeed(); -void RandAddSeedPerfmon(); int ATTR_WARN_PRINTF(1,2) OutputDebugStringF(const char* pszFormat, ...); /* @@ -219,27 +224,14 @@ void ReadConfigFile(std::map& mapSettingsRet, std::map boost::filesystem::path GetSpecialFolderPath(int nFolder, bool fCreate = true); #endif void ShrinkDebugFile(); -int GetRandInt(int nMax); -uint64_t GetRand(uint64_t nMax); -uint256 GetRandHash(); int64_t GetTime(); -void SetMockTime(int64_t nMockTimeIn); -int64_t GetAdjustedTime(); -int64_t GetTimeOffset(); -int64_t GetNodesOffset(); +int64_t GetTimeMillis(); +int64_t GetTimeMicros(); std::string FormatFullVersion(); std::string FormatSubVersion(const std::string& name, int nClientVersion, const std::vector& comments); -void AddTimeData(const CNetAddr& ip, int64_t nTime); void runCommand(std::string strCommand); - - - - - - - inline std::string i64tostr(int64_t n) { return strprintf("%" PRId64, n); @@ -278,6 +270,16 @@ inline int32_t strtol(const std::string& str) return strtol(str.c_str(), NULL, 10); } +inline uint32_t strtoul(const char* psz) +{ + return strtoul(psz, NULL, 10); +} + +inline uint32_t strtoul(const std::string& str) +{ + return strtoul(str.c_str(), NULL, 10); +} + inline int atoi(const std::string& str) { return atoi(str.c_str()); @@ -293,11 +295,6 @@ inline int64_t roundint64(double d) return (int64_t)(d > 0 ? d + 0.5 : d - 0.5); } -inline int64_t abs64(int64_t n) -{ - return (n >= 0 ? n : -n); -} - inline std::string leftTrim(std::string src, char chr) { std::string::size_type pos = src.find_first_not_of(chr, 0); @@ -343,23 +340,16 @@ inline void PrintHex(const std::vector& vch, const char* pszForma printf(pszFormat, HexStr(vch, fSpaces).c_str()); } -inline int64_t GetPerformanceCounter() +inline int64_t GetTimeMillis() { - int64_t nCounter = 0; -#ifdef WIN32 - QueryPerformanceCounter((LARGE_INTEGER*)&nCounter); -#else - timeval t; - gettimeofday(&t, NULL); - nCounter = (int64_t) t.tv_sec * 1000000 + t.tv_usec; -#endif - return nCounter; + return (boost::posix_time::microsec_clock::universal_time() - + boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_milliseconds(); } -inline int64_t GetTimeMillis() +inline int64_t GetTimeMicros() { - return (boost::posix_time::ptime(boost::posix_time::microsec_clock::universal_time()) - - boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_milliseconds(); + return (boost::posix_time::microsec_clock::universal_time() - + boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_microseconds(); } std::string DateTimeStrFormat(const char* pszFormat, int64_t nTime); @@ -415,6 +405,15 @@ int64_t GetArg(const std::string& strArg, int64_t nDefault); int32_t GetArgInt(const std::string& strArg, int32_t nDefault); /** + * Return 32-bit unsigned integer argument or default value + * + * @param strArg Argument to get (e.g. "-foo") + * @param default (e.g. 1) + * @return command-line argument (0 if invalid number) or default value + */ +uint32_t GetArgUInt(const std::string& strArg, uint32_t nDefault); + +/** * Return boolean argument or default value * * @param strArg Argument to get (e.g. "-foo") @@ -456,62 +455,6 @@ bool TimingResistantEqual(const T& a, const T& b) return accumulator == 0; } -/** Median filter over a stream of values. - * Returns the median of the last N numbers - */ -template class CMedianFilter -{ -private: - std::vector vValues; - std::vector vSorted; - unsigned int nSize; -public: - CMedianFilter(unsigned int size, T initial_value): - nSize(size) - { - vValues.reserve(size); - vValues.push_back(initial_value); - vSorted = vValues; - } - - void input(T value) - { - if(vValues.size() == nSize) - { - vValues.erase(vValues.begin()); - } - vValues.push_back(value); - - vSorted.resize(vValues.size()); - std::copy(vValues.begin(), vValues.end(), vSorted.begin()); - std::sort(vSorted.begin(), vSorted.end()); - } - - T median() const - { - int size = vSorted.size(); - assert(size>0); - if(size & 1) // Odd number of elements - { - return vSorted[size/2]; - } - else // Even number of elements - { - return (vSorted[size/2-1] + vSorted[size/2]) / 2; - } - } - - int size() const - { - return static_cast(vValues.size()); - } - - std::vector sorted () const - { - return vSorted; - } -}; - bool NewThread(void(*pfn)(void*), void* parg); #ifdef WIN32 @@ -552,4 +495,3 @@ inline uint32_t ByteReverse(uint32_t value) } #endif -