/* This file is part of cpp-ethereum. cpp-ethereum is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. cpp-ethereum is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with cpp-ethereum. If not, see . */ /** @file Common.h * @author Gav Wood * @date 2014 * * Very common stuff (i.e. that every other header needs except vector_ref.h). */ #pragma once // define version #define ETH_VERSION 0.4.1 // way to many uint to size_t warnings in 32 bit build #ifdef _M_IX86 #pragma warning(disable:4244) #endif #ifdef _MSC_VER #define _ALLOW_KEYWORD_MACROS #define noexcept throw() #endif #include #include #include #include #include "vector_ref.h" // CryptoPP defines byte in the global namespace, so so must we. using byte = uint8_t; // Quote a given token stream to turn it into a string. #define ETH_QUOTED_HELPER(s) #s #define ETH_QUOTED(s) ETH_QUOTED_HELPER(s) namespace eth { // Binary data types. using bytes = std::vector; using bytesRef = vector_ref; using bytesConstRef = vector_ref; // Numeric types. using bigint = boost::multiprecision::number>; using u256 = boost::multiprecision::number>; using s256 = boost::multiprecision::number>; using u160 = boost::multiprecision::number>; using s160 = boost::multiprecision::number>; using uint = uint64_t; using sint = int64_t; using u256s = std::vector; using u160s = std::vector; using u256Set = std::set; using u160Set = std::set; // Map types. using StringMap = std::map; using u256Map = std::map; using HexMap = std::map; // Null/Invalid values for convenience. static const u256 Invalid256 = ~(u256)0; static const bytes NullBytes; /// Trivial UnitTest type that everyone can agree on, mainly to allow befriending for test classes & their code. template class UnitTest {}; }