Replace OP_EVAL (BIP 12) with Pay-to-script-hash (BIP 16).
[novacoin.git] / src / util.h
index 8dd08d8..87725b7 100644 (file)
@@ -5,8 +5,6 @@
 #ifndef BITCOIN_UTIL_H
 #define BITCOIN_UTIL_H
 
-#include <stdint.h>
-
 #include "uint256.h"
 
 #ifndef WIN32
 #include <openssl/sha.h>
 #include <openssl/ripemd.h>
 
+#include "netbase.h"
+
+typedef long long  int64;
+typedef unsigned long long  uint64;
 
 #define loop                for (;;)
 #define BEGIN(a)            ((char*)&(a))
@@ -78,44 +80,18 @@ T* alignup(T* p)
 #define S_IWUSR             0200
 #endif
 #define unlink              _unlink
-typedef int socklen_t;
 #else
-#define WSAGetLastError()   errno
-#define WSAEINVAL           EINVAL
-#define WSAEALREADY         EALREADY
-#define WSAEWOULDBLOCK      EWOULDBLOCK
-#define WSAEMSGSIZE         EMSGSIZE
-#define WSAEINTR            EINTR
-#define WSAEINPROGRESS      EINPROGRESS
-#define WSAEADDRINUSE       EADDRINUSE
-#define WSAENOTSOCK         EBADF
-#define INVALID_SOCKET      (SOCKET)(~0)
-#define SOCKET_ERROR        -1
-typedef u_int SOCKET;
 #define _vsnprintf(a,b,c,d) vsnprintf(a,b,c,d)
 #define strlwr(psz)         to_lower(psz)
 #define _strlwr(psz)        to_lower(psz)
 #define MAX_PATH            1024
 #define Beep(n1,n2)         (0)
-inline void Sleep(int64_t n)
+inline void Sleep(int64 n)
 {
     boost::thread::sleep(boost::get_system_time() + boost::posix_time::milliseconds(n));
 }
 #endif
 
-inline int myclosesocket(SOCKET& hSocket)
-{
-    if (hSocket == INVALID_SOCKET)
-        return WSAENOTSOCK;
-#ifdef WIN32
-    int ret = closesocket(hSocket);
-#else
-    int ret = close(hSocket);
-#endif
-    hSocket = INVALID_SOCKET;
-    return ret;
-}
-#define closesocket(s)      myclosesocket(s)
 #if !defined(QT_GUI)
 inline const char* _(const char* psz)
 {
@@ -157,11 +133,12 @@ void LogException(std::exception* pex, const char* pszThread);
 void PrintException(std::exception* pex, const char* pszThread);
 void PrintExceptionContinue(std::exception* pex, const char* pszThread);
 void ParseString(const std::string& str, char c, std::vector<std::string>& v);
-std::string FormatMoney(int64_t n, bool fPlus=false);
-bool ParseMoney(const std::string& str, int64_t& nRet);
-bool ParseMoney(const char* pszIn, int64_t& nRet);
+std::string FormatMoney(int64 n, bool fPlus=false);
+bool ParseMoney(const std::string& str, int64& nRet);
+bool ParseMoney(const char* pszIn, int64& nRet);
 std::vector<unsigned char> ParseHex(const char* psz);
 std::vector<unsigned char> ParseHex(const std::string& str);
+bool IsHex(const std::string& str);
 std::vector<unsigned char> DecodeBase64(const char* p, bool* pfInvalid = NULL);
 std::string DecodeBase64(const std::string& str);
 std::string EncodeBase64(const unsigned char* pch, size_t len);
@@ -182,13 +159,13 @@ std::string GetDefaultDataDir();
 std::string GetDataDir();
 void ShrinkDebugFile();
 int GetRandInt(int nMax);
-uint64_t GetRand(uint64_t nMax);
-int64_t GetTime();
-void SetMockTime(int64_t nMockTimeIn);
-int64_t GetAdjustedTime();
-void AddTimeData(unsigned int ip, int64_t nTime);
+uint64 GetRand(uint64 nMax);
+int64 GetTime();
+void SetMockTime(int64 nMockTimeIn);
+int64 GetAdjustedTime();
 std::string FormatFullVersion();
 std::string FormatSubVersion(const std::string& name, int nClientVersion, const std::vector<std::string>& comments);
+void AddTimeData(const CNetAddr& ip, int64 nTime);
 
 
 
@@ -283,7 +260,7 @@ typedef std::basic_string<char, std::char_traits<char>, secure_allocator<char> >
 
 
 
-inline std::string i64tostr(int64_t n)
+inline std::string i64tostr(int64 n)
 {
     return strprintf("%"PRI64d, n);
 }
@@ -293,7 +270,7 @@ inline std::string itostr(int n)
     return strprintf("%d", n);
 }
 
-inline int64_t atoi64(const char* psz)
+inline int64 atoi64(const char* psz)
 {
 #ifdef _MSC_VER
     return _atoi64(psz);
@@ -302,7 +279,7 @@ inline int64_t atoi64(const char* psz)
 #endif
 }
 
-inline int64_t atoi64(const std::string& str)
+inline int64 atoi64(const std::string& str)
 {
 #ifdef _MSC_VER
     return _atoi64(str.c_str());
@@ -321,12 +298,12 @@ inline int roundint(double d)
     return (int)(d > 0 ? d + 0.5 : d - 0.5);
 }
 
-inline int64_t roundint64(double d)
+inline int64 roundint64(double d)
 {
-    return (int64_t)(d > 0 ? d + 0.5 : d - 0.5);
+    return (int64)(d > 0 ? d + 0.5 : d - 0.5);
 }
 
-inline int64_t abs64(int64_t n)
+inline int64 abs64(int64 n)
 {
     return (n >= 0 ? n : -n);
 }
@@ -380,9 +357,9 @@ inline void PrintHex(const std::vector<unsigned char>& vch, const char* pszForma
     printf(pszFormat, HexStr(vch, fSpaces).c_str());
 }
 
-inline int64_t GetPerformanceCounter()
+inline int64 GetPerformanceCounter()
 {
-    int64_t nCounter = 0;
+    int64 nCounter = 0;
 #ifdef WIN32
     QueryPerformanceCounter((LARGE_INTEGER*)&nCounter);
 #else
@@ -393,13 +370,13 @@ inline int64_t GetPerformanceCounter()
     return nCounter;
 }
 
-inline int64_t GetTimeMillis()
+inline int64 GetTimeMillis()
 {
     return (boost::posix_time::ptime(boost::posix_time::microsec_clock::universal_time()) -
             boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_milliseconds();
 }
 
-inline std::string DateTimeStrFormat(const char* pszFormat, int64_t nTime)
+inline std::string DateTimeStrFormat(const char* pszFormat, int64 nTime)
 {
     time_t n = nTime;
     struct tm* ptmTime = gmtime(&n);
@@ -431,14 +408,14 @@ inline std::string GetArg(const std::string& strArg, const std::string& strDefau
     return strDefault;
 }
 
-inline int64_t GetArg(const std::string& strArg, int64_t nDefault)
+inline int64 GetArg(const std::string& strArg, int64 nDefault)
 {
     if (mapArgs.count(strArg))
         return atoi64(mapArgs[strArg]);
     return nDefault;
 }
 
-inline bool GetBoolArg(const std::string& strArg)
+inline bool GetBoolArg(const std::string& strArg, bool fDefault=false)
 {
     if (mapArgs.count(strArg))
     {
@@ -446,9 +423,26 @@ inline bool GetBoolArg(const std::string& strArg)
             return true;
         return (atoi(mapArgs[strArg]) != 0);
     }
-    return false;
+    return fDefault;
 }
 
+/**
+ * Set an argument if it doesn't already have a value
+ *
+ * @param strArg Argument to set (e.g. "-foo")
+ * @param strValue Value (e.g. "1")
+ * @return true if argument gets set, false if it already had a value
+ */
+bool SoftSetArg(const std::string& strArg, const std::string& strValue);
+
+/**
+ * Set a boolean argument if it doesn't already have a value
+ *
+ * @param strArg Argument to set (e.g. "-foo")
+ * @param fValue Value (e.g. false)
+ * @return true if argument gets set, false if it already had a value
+ */
+bool SoftSetArg(const std::string& strArg, bool fValue);
 
 
 
@@ -727,3 +721,4 @@ inline uint32_t ByteReverse(uint32_t value)
 }
 
 #endif
+