mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #14499 from ethereum/purge-using-namespace-std-from-libsolutil
Purge using namespace std from libsolutil
This commit is contained in:
commit
d2f86ffb16
@ -29,7 +29,6 @@
|
||||
|
||||
#include <boost/algorithm/string.hpp>
|
||||
|
||||
using namespace std;
|
||||
using namespace solidity;
|
||||
using namespace solidity::util;
|
||||
|
||||
@ -41,7 +40,7 @@ static char const* lowerHexChars = "0123456789abcdef";
|
||||
|
||||
}
|
||||
|
||||
string solidity::util::toHex(uint8_t _data, HexCase _case)
|
||||
std::string solidity::util::toHex(uint8_t _data, HexCase _case)
|
||||
{
|
||||
assertThrow(_case != HexCase::Mixed, BadHexCase, "Mixed case can only be used for byte arrays.");
|
||||
|
||||
@ -53,7 +52,7 @@ string solidity::util::toHex(uint8_t _data, HexCase _case)
|
||||
};
|
||||
}
|
||||
|
||||
string solidity::util::toHex(bytes const& _data, HexPrefix _prefix, HexCase _case)
|
||||
std::string solidity::util::toHex(bytes const& _data, HexPrefix _prefix, HexCase _case)
|
||||
{
|
||||
std::string ret(_data.size() * 2 + (_prefix == HexPrefix::Add ? 2 : 0), 0);
|
||||
|
||||
@ -90,7 +89,7 @@ int solidity::util::fromHex(char _i, WhenError _throw)
|
||||
if (_i >= 'A' && _i <= 'F')
|
||||
return _i - 'A' + 10;
|
||||
if (_throw == WhenError::Throw)
|
||||
assertThrow(false, BadHexCharacter, to_string(_i));
|
||||
assertThrow(false, BadHexCharacter, std::to_string(_i));
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
@ -125,31 +124,31 @@ bytes solidity::util::fromHex(std::string const& _s, WhenError _throw)
|
||||
}
|
||||
|
||||
|
||||
bool solidity::util::passesAddressChecksum(string const& _str, bool _strict)
|
||||
bool solidity::util::passesAddressChecksum(std::string const& _str, bool _strict)
|
||||
{
|
||||
string s = _str.substr(0, 2) == "0x" ? _str : "0x" + _str;
|
||||
std::string s = _str.substr(0, 2) == "0x" ? _str : "0x" + _str;
|
||||
|
||||
if (s.length() != 42)
|
||||
return false;
|
||||
|
||||
if (!_strict && (
|
||||
s.find_first_of("abcdef") == string::npos ||
|
||||
s.find_first_of("ABCDEF") == string::npos
|
||||
s.find_first_of("abcdef") == std::string::npos ||
|
||||
s.find_first_of("ABCDEF") == std::string::npos
|
||||
))
|
||||
return true;
|
||||
|
||||
return s == solidity::util::getChecksummedAddress(s);
|
||||
}
|
||||
|
||||
string solidity::util::getChecksummedAddress(string const& _addr)
|
||||
std::string solidity::util::getChecksummedAddress(std::string const& _addr)
|
||||
{
|
||||
string s = _addr.substr(0, 2) == "0x" ? _addr.substr(2) : _addr;
|
||||
std::string s = _addr.substr(0, 2) == "0x" ? _addr.substr(2) : _addr;
|
||||
assertThrow(s.length() == 40, InvalidAddress, "");
|
||||
assertThrow(s.find_first_not_of("0123456789abcdefABCDEF") == string::npos, InvalidAddress, "");
|
||||
assertThrow(s.find_first_not_of("0123456789abcdefABCDEF") == std::string::npos, InvalidAddress, "");
|
||||
|
||||
h256 hash = keccak256(boost::algorithm::to_lower_copy(s, std::locale::classic()));
|
||||
|
||||
string ret = "0x";
|
||||
std::string ret = "0x";
|
||||
for (unsigned i = 0; i < 40; ++i)
|
||||
{
|
||||
char addressCharacter = s[i];
|
||||
@ -162,16 +161,16 @@ string solidity::util::getChecksummedAddress(string const& _addr)
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool solidity::util::isValidHex(string const& _string)
|
||||
bool solidity::util::isValidHex(std::string const& _string)
|
||||
{
|
||||
if (_string.substr(0, 2) != "0x")
|
||||
return false;
|
||||
if (_string.find_first_not_of("0123456789abcdefABCDEF", 2) != string::npos)
|
||||
if (_string.find_first_not_of("0123456789abcdefABCDEF", 2) != std::string::npos)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool solidity::util::isValidDecimal(string const& _string)
|
||||
bool solidity::util::isValidDecimal(std::string const& _string)
|
||||
{
|
||||
if (_string.empty())
|
||||
return false;
|
||||
@ -180,12 +179,12 @@ bool solidity::util::isValidDecimal(string const& _string)
|
||||
// No leading zeros
|
||||
if (_string.front() == '0')
|
||||
return false;
|
||||
if (_string.find_first_not_of("0123456789") != string::npos)
|
||||
if (_string.find_first_not_of("0123456789") != std::string::npos)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
string solidity::util::formatAsStringOrNumber(string const& _value)
|
||||
std::string solidity::util::formatAsStringOrNumber(std::string const& _value)
|
||||
{
|
||||
assertThrow(_value.length() <= 32, StringTooLong, "String to be formatted longer than 32 bytes.");
|
||||
|
||||
@ -197,9 +196,9 @@ string solidity::util::formatAsStringOrNumber(string const& _value)
|
||||
}
|
||||
|
||||
|
||||
string solidity::util::escapeAndQuoteString(string const& _input)
|
||||
std::string solidity::util::escapeAndQuoteString(std::string const& _input)
|
||||
{
|
||||
string out;
|
||||
std::string out;
|
||||
|
||||
for (char c: _input)
|
||||
if (c == '\\')
|
||||
@ -214,8 +213,8 @@ string solidity::util::escapeAndQuoteString(string const& _input)
|
||||
out += "\\t";
|
||||
else if (!isPrint(c))
|
||||
{
|
||||
ostringstream o;
|
||||
o << "\\x" << std::hex << setfill('0') << setw(2) << (unsigned)(unsigned char)(c);
|
||||
std::ostringstream o;
|
||||
o << "\\x" << std::hex << std::setfill('0') << std::setw(2) << (unsigned)(unsigned char)(c);
|
||||
out += o.str();
|
||||
}
|
||||
else
|
||||
|
@ -31,7 +31,6 @@
|
||||
#include <termios.h>
|
||||
#endif
|
||||
|
||||
using namespace std;
|
||||
using namespace solidity::util;
|
||||
|
||||
namespace
|
||||
@ -55,35 +54,35 @@ inline T readFile(boost::filesystem::path const& _file)
|
||||
|
||||
// get length of file:
|
||||
is.seekg(0, is.end);
|
||||
streamoff length = is.tellg();
|
||||
std::streamoff length = is.tellg();
|
||||
if (length == 0)
|
||||
return ret; // do not read empty file (MSVC does not like it)
|
||||
is.seekg(0, is.beg);
|
||||
|
||||
ret.resize((static_cast<size_t>(length) + c_elementSize - 1) / c_elementSize);
|
||||
is.read(const_cast<char*>(reinterpret_cast<char const*>(ret.data())), static_cast<streamsize>(length));
|
||||
is.read(const_cast<char*>(reinterpret_cast<char const*>(ret.data())), static_cast<std::streamsize>(length));
|
||||
return ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
string solidity::util::readFileAsString(boost::filesystem::path const& _file)
|
||||
std::string solidity::util::readFileAsString(boost::filesystem::path const& _file)
|
||||
{
|
||||
return readFile<string>(_file);
|
||||
return readFile<std::string>(_file);
|
||||
}
|
||||
|
||||
string solidity::util::readUntilEnd(istream& _stdin)
|
||||
std::string solidity::util::readUntilEnd(std::istream& _stdin)
|
||||
{
|
||||
ostringstream ss;
|
||||
std::ostringstream ss;
|
||||
ss << _stdin.rdbuf();
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
string solidity::util::readBytes(istream& _input, size_t _length)
|
||||
std::string solidity::util::readBytes(std::istream& _input, size_t _length)
|
||||
{
|
||||
string output;
|
||||
std::string output;
|
||||
output.resize(_length);
|
||||
_input.read(output.data(), static_cast<streamsize>(_length));
|
||||
_input.read(output.data(), static_cast<std::streamsize>(_length));
|
||||
// If read() reads fewer bytes it sets failbit in addition to eofbit.
|
||||
if (_input.fail())
|
||||
output.resize(static_cast<size_t>(_input.gcount()));
|
||||
@ -135,10 +134,10 @@ private:
|
||||
int solidity::util::readStandardInputChar()
|
||||
{
|
||||
DisableConsoleBuffering disableConsoleBuffering;
|
||||
return cin.get();
|
||||
return std::cin.get();
|
||||
}
|
||||
|
||||
string solidity::util::absolutePath(string const& _path, string const& _reference)
|
||||
std::string solidity::util::absolutePath(std::string const& _path, std::string const& _reference)
|
||||
{
|
||||
boost::filesystem::path p(_path);
|
||||
// Anything that does not start with `.` is an absolute path.
|
||||
@ -158,6 +157,6 @@ string solidity::util::absolutePath(string const& _path, string const& _referenc
|
||||
return result.generic_string();
|
||||
}
|
||||
|
||||
string solidity::util::sanitizePath(string const& _path) {
|
||||
std::string solidity::util::sanitizePath(std::string const& _path) {
|
||||
return boost::filesystem::path(_path).generic_string();
|
||||
}
|
||||
|
@ -18,13 +18,12 @@
|
||||
|
||||
#include <libsolutil/Exceptions.h>
|
||||
|
||||
using namespace std;
|
||||
using namespace solidity::util;
|
||||
|
||||
char const* Exception::what() const noexcept
|
||||
{
|
||||
// Return the comment if available.
|
||||
if (string const* cmt = comment())
|
||||
if (std::string const* cmt = comment())
|
||||
return cmt->data();
|
||||
|
||||
// Fallback to base what().
|
||||
@ -33,20 +32,20 @@ char const* Exception::what() const noexcept
|
||||
return std::exception::what();
|
||||
}
|
||||
|
||||
string Exception::lineInfo() const
|
||||
std::string Exception::lineInfo() const
|
||||
{
|
||||
char const* const* file = boost::get_error_info<boost::throw_file>(*this);
|
||||
int const* line = boost::get_error_info<boost::throw_line>(*this);
|
||||
string ret;
|
||||
std::string ret;
|
||||
if (file)
|
||||
ret += *file;
|
||||
ret += ':';
|
||||
if (line)
|
||||
ret += to_string(*line);
|
||||
ret += std::to_string(*line);
|
||||
return ret;
|
||||
}
|
||||
|
||||
string const* Exception::comment() const noexcept
|
||||
std::string const* Exception::comment() const noexcept
|
||||
{
|
||||
return boost::get_error_info<errinfo_comment>(*this);
|
||||
}
|
||||
|
@ -23,21 +23,20 @@
|
||||
#include <libsolutil/IndentedWriter.h>
|
||||
#include <libsolutil/Assertions.h>
|
||||
|
||||
using namespace std;
|
||||
using namespace solidity::util;
|
||||
|
||||
string IndentedWriter::format() const
|
||||
std::string IndentedWriter::format() const
|
||||
{
|
||||
string result;
|
||||
std::string result;
|
||||
for (auto const& line: m_lines)
|
||||
result += string(line.indentation * 4, ' ') + line.contents + "\n";
|
||||
result += std::string(line.indentation * 4, ' ') + line.contents + "\n";
|
||||
return result;
|
||||
}
|
||||
|
||||
void IndentedWriter::newLine()
|
||||
{
|
||||
if (!m_lines.back().contents.empty())
|
||||
m_lines.emplace_back(Line{string(), m_lines.back().indentation});
|
||||
m_lines.emplace_back(Line{std::string(), m_lines.back().indentation});
|
||||
}
|
||||
|
||||
void IndentedWriter::indent()
|
||||
@ -53,12 +52,12 @@ void IndentedWriter::unindent()
|
||||
m_lines.back().indentation--;
|
||||
}
|
||||
|
||||
void IndentedWriter::add(string const& _str)
|
||||
void IndentedWriter::add(std::string const& _str)
|
||||
{
|
||||
m_lines.back().contents += _str;
|
||||
}
|
||||
|
||||
void IndentedWriter::addLine(string const& _line)
|
||||
void IndentedWriter::addLine(std::string const& _line)
|
||||
{
|
||||
newLine();
|
||||
add(_line);
|
||||
|
@ -23,7 +23,6 @@
|
||||
#include <libsolutil/CommonData.h>
|
||||
#include <libsolutil/Numeric.h>
|
||||
|
||||
using namespace std;
|
||||
using namespace solidity;
|
||||
using namespace solidity::util;
|
||||
|
||||
@ -56,11 +55,11 @@ bytes encodeLinkData(bytes const& _data)
|
||||
return bytes{0x12} + varintEncoding(_data.size()) + _data;
|
||||
}
|
||||
|
||||
string base58Encode(bytes const& _data)
|
||||
std::string base58Encode(bytes const& _data)
|
||||
{
|
||||
static string const alphabet{"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"};
|
||||
static std::string const alphabet{"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"};
|
||||
bigint data(util::toHex(_data, HexPrefix::Add));
|
||||
string output;
|
||||
std::string output;
|
||||
while (data)
|
||||
{
|
||||
output += alphabet[static_cast<size_t>(data % alphabet.size())];
|
||||
@ -84,7 +83,7 @@ struct Chunk
|
||||
size_t blockSize = 0;
|
||||
};
|
||||
|
||||
using Chunks = vector<Chunk>;
|
||||
using Chunks = std::vector<Chunk>;
|
||||
|
||||
Chunk combineLinks(Chunks& _links)
|
||||
{
|
||||
@ -153,7 +152,7 @@ bytes groupChunksBottomUp(Chunks _currentLevel)
|
||||
}
|
||||
}
|
||||
|
||||
bytes solidity::util::ipfsHash(string _data)
|
||||
bytes solidity::util::ipfsHash(std::string _data)
|
||||
{
|
||||
size_t const maxChunkSize = 1024 * 256;
|
||||
size_t chunkCount = _data.length() / maxChunkSize + (_data.length() % maxChunkSize > 0 ? 1 : 0);
|
||||
@ -164,7 +163,7 @@ bytes solidity::util::ipfsHash(string _data)
|
||||
for (size_t chunkIndex = 0; chunkIndex < chunkCount; chunkIndex++)
|
||||
{
|
||||
bytes chunkBytes = asBytes(
|
||||
_data.substr(chunkIndex * maxChunkSize, min(maxChunkSize, _data.length() - chunkIndex * maxChunkSize))
|
||||
_data.substr(chunkIndex * maxChunkSize, std::min(maxChunkSize, _data.length() - chunkIndex * maxChunkSize))
|
||||
);
|
||||
|
||||
bytes lengthAsVarint = varintEncoding(chunkBytes.size());
|
||||
@ -197,7 +196,7 @@ bytes solidity::util::ipfsHash(string _data)
|
||||
return groupChunksBottomUp(std::move(allChunks));
|
||||
}
|
||||
|
||||
string solidity::util::ipfsHashBase58(string _data)
|
||||
std::string solidity::util::ipfsHashBase58(std::string _data)
|
||||
{
|
||||
return base58Encode(ipfsHash(std::move(_data)));
|
||||
}
|
||||
|
@ -30,8 +30,6 @@
|
||||
#include <map>
|
||||
#include <memory>
|
||||
|
||||
using namespace std;
|
||||
|
||||
static_assert(
|
||||
(JSONCPP_VERSION_MAJOR == 1) && (JSONCPP_VERSION_MINOR == 9) && (JSONCPP_VERSION_PATCH == 3),
|
||||
"Unexpected jsoncpp version: " JSONCPP_VERSION_STRING ". Expecting 1.9.3."
|
||||
@ -47,7 +45,7 @@ namespace
|
||||
class StreamWriterBuilder: public Json::StreamWriterBuilder
|
||||
{
|
||||
public:
|
||||
explicit StreamWriterBuilder(map<string, Json::Value> const& _settings)
|
||||
explicit StreamWriterBuilder(std::map<std::string, Json::Value> const& _settings)
|
||||
{
|
||||
for (auto const& iter: _settings)
|
||||
this->settings_[iter.first] = iter.second;
|
||||
@ -68,10 +66,10 @@ public:
|
||||
/// \param _input JSON input string
|
||||
/// \param _builder StreamWriterBuilder that is used to create new Json::StreamWriter
|
||||
/// \return serialized json object
|
||||
string print(Json::Value const& _input, Json::StreamWriterBuilder const& _builder)
|
||||
std::string print(Json::Value const& _input, Json::StreamWriterBuilder const& _builder)
|
||||
{
|
||||
stringstream stream;
|
||||
unique_ptr<Json::StreamWriter> writer(_builder.newStreamWriter());
|
||||
std::stringstream stream;
|
||||
std::unique_ptr<Json::StreamWriter> writer(_builder.newStreamWriter());
|
||||
writer->write(_input, &stream);
|
||||
return stream.str();
|
||||
}
|
||||
@ -82,9 +80,9 @@ string print(Json::Value const& _input, Json::StreamWriterBuilder const& _builde
|
||||
/// \param _json [out] resulting JSON object
|
||||
/// \param _errs [out] Formatted error messages
|
||||
/// \return \c true if the document was successfully parsed, \c false if an error occurred.
|
||||
bool parse(Json::CharReaderBuilder& _builder, string const& _input, Json::Value& _json, string* _errs)
|
||||
bool parse(Json::CharReaderBuilder& _builder, std::string const& _input, Json::Value& _json, std::string* _errs)
|
||||
{
|
||||
unique_ptr<Json::CharReader> reader(_builder.newCharReader());
|
||||
std::unique_ptr<Json::CharReader> reader(_builder.newCharReader());
|
||||
return reader->parse(_input.c_str(), _input.c_str() + _input.length(), &_json, _errs);
|
||||
}
|
||||
|
||||
@ -113,34 +111,34 @@ Json::Value removeNullMembers(Json::Value _json)
|
||||
return _json;
|
||||
}
|
||||
|
||||
string jsonPrettyPrint(Json::Value const& _input)
|
||||
std::string jsonPrettyPrint(Json::Value const& _input)
|
||||
{
|
||||
return jsonPrint(_input, JsonFormat{ JsonFormat::Pretty });
|
||||
}
|
||||
|
||||
string jsonCompactPrint(Json::Value const& _input)
|
||||
std::string jsonCompactPrint(Json::Value const& _input)
|
||||
{
|
||||
return jsonPrint(_input, JsonFormat{ JsonFormat::Compact });
|
||||
}
|
||||
|
||||
string jsonPrint(Json::Value const& _input, JsonFormat const& _format)
|
||||
std::string jsonPrint(Json::Value const& _input, JsonFormat const& _format)
|
||||
{
|
||||
map<string, Json::Value> settings;
|
||||
std::map<std::string, Json::Value> settings;
|
||||
if (_format.format == JsonFormat::Pretty)
|
||||
{
|
||||
settings["indentation"] = string(_format.indent, ' ');
|
||||
settings["indentation"] = std::string(_format.indent, ' ');
|
||||
settings["enableYAMLCompatibility"] = true;
|
||||
}
|
||||
else
|
||||
settings["indentation"] = "";
|
||||
StreamWriterBuilder writerBuilder(settings);
|
||||
string result = print(_input, writerBuilder);
|
||||
std::string result = print(_input, writerBuilder);
|
||||
if (_format.format == JsonFormat::Pretty)
|
||||
boost::replace_all(result, " \n", "\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
bool jsonParseStrict(string const& _input, Json::Value& _json, string* _errs /* = nullptr */)
|
||||
bool jsonParseStrict(std::string const& _input, Json::Value& _json, std::string* _errs /* = nullptr */)
|
||||
{
|
||||
static StrictModeCharReaderBuilder readerBuilder;
|
||||
return parse(readerBuilder, _input, _json, _errs);
|
||||
|
@ -25,8 +25,6 @@
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace solidity::util
|
||||
{
|
||||
|
||||
|
@ -26,11 +26,10 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
using namespace solidity;
|
||||
using namespace solidity::util;
|
||||
|
||||
bool solidity::util::stringWithinDistance(string const& _str1, string const& _str2, size_t _maxDistance, size_t _lenThreshold)
|
||||
bool solidity::util::stringWithinDistance(std::string const& _str1, std::string const& _str2, size_t _maxDistance, size_t _lenThreshold)
|
||||
{
|
||||
if (_str1 == _str2)
|
||||
return true;
|
||||
@ -47,13 +46,13 @@ bool solidity::util::stringWithinDistance(string const& _str1, string const& _st
|
||||
return distance <= _maxDistance && distance < n1 && distance < n2;
|
||||
}
|
||||
|
||||
size_t solidity::util::stringDistance(string const& _str1, string const& _str2)
|
||||
size_t solidity::util::stringDistance(std::string const& _str1, std::string const& _str2)
|
||||
{
|
||||
size_t n1 = _str1.size();
|
||||
size_t n2 = _str2.size();
|
||||
// Optimize by storing only last 2 rows and current row. So first index is considered modulo 3
|
||||
// This is a two-dimensional array of size 3 x (n2 + 1).
|
||||
vector<size_t> dp(3 * (n2 + 1));
|
||||
std::vector<size_t> dp(3 * (n2 + 1));
|
||||
|
||||
// In this dp formulation of Damerau–Levenshtein distance we are assuming that the strings are 1-based to make base case storage easier.
|
||||
// So index accesser to _name1 and _name2 have to be adjusted accordingly
|
||||
@ -61,25 +60,25 @@ size_t solidity::util::stringDistance(string const& _str1, string const& _str2)
|
||||
for (size_t i2 = 0; i2 <= n2; ++i2)
|
||||
{
|
||||
size_t x = 0;
|
||||
if (min(i1, i2) == 0) // base case
|
||||
x = max(i1, i2);
|
||||
if (std::min(i1, i2) == 0) // base case
|
||||
x = std::max(i1, i2);
|
||||
else
|
||||
{
|
||||
size_t left = dp[(i1 - 1) % 3 + i2 * 3];
|
||||
size_t up = dp[(i1 % 3) + (i2 - 1) * 3];
|
||||
size_t upleft = dp[((i1 - 1) % 3) + (i2 - 1) * 3];
|
||||
// deletion and insertion
|
||||
x = min(left + 1, up + 1);
|
||||
x = std::min(left + 1, up + 1);
|
||||
if (_str1[i1-1] == _str2[i2-1])
|
||||
// same chars, can skip
|
||||
x = min(x, upleft);
|
||||
x = std::min(x, upleft);
|
||||
else
|
||||
// different chars so try substitution
|
||||
x = min(x, upleft + 1);
|
||||
x = std::min(x, upleft + 1);
|
||||
|
||||
// transposing
|
||||
if (i1 > 1 && i2 > 1 && _str1[i1 - 1] == _str2[i2 - 2] && _str1[i1 - 2] == _str2[i2 - 1])
|
||||
x = min(x, dp[((i1 - 2) % 3) + (i2 - 2) * 3] + 1);
|
||||
x = std::min(x, dp[((i1 - 2) % 3) + (i2 - 2) * 3] + 1);
|
||||
}
|
||||
dp[(i1 % 3) + i2 * 3] = x;
|
||||
}
|
||||
@ -87,9 +86,9 @@ size_t solidity::util::stringDistance(string const& _str1, string const& _str2)
|
||||
return dp[(n1 % 3) + n2 * 3];
|
||||
}
|
||||
|
||||
string solidity::util::quotedAlternativesList(vector<string> const& suggestions)
|
||||
std::string solidity::util::quotedAlternativesList(std::vector<std::string> const& suggestions)
|
||||
{
|
||||
vector<string> quotedSuggestions;
|
||||
std::vector<std::string> quotedSuggestions;
|
||||
|
||||
for (auto& suggestion: suggestions)
|
||||
quotedSuggestions.emplace_back("\"" + suggestion + "\"");
|
||||
@ -97,20 +96,20 @@ string solidity::util::quotedAlternativesList(vector<string> const& suggestions)
|
||||
return joinHumanReadable(quotedSuggestions, ", ", " or ");
|
||||
}
|
||||
|
||||
string solidity::util::suffixedVariableNameList(string const& _baseName, size_t _startSuffix, size_t _endSuffix)
|
||||
std::string solidity::util::suffixedVariableNameList(std::string const& _baseName, size_t _startSuffix, size_t _endSuffix)
|
||||
{
|
||||
string result;
|
||||
std::string result;
|
||||
if (_startSuffix < _endSuffix)
|
||||
{
|
||||
result = _baseName + to_string(_startSuffix++);
|
||||
result = _baseName + std::to_string(_startSuffix++);
|
||||
while (_startSuffix < _endSuffix)
|
||||
result += ", " + _baseName + to_string(_startSuffix++);
|
||||
result += ", " + _baseName + std::to_string(_startSuffix++);
|
||||
}
|
||||
else if (_endSuffix < _startSuffix)
|
||||
{
|
||||
result = _baseName + to_string(_endSuffix++);
|
||||
result = _baseName + std::to_string(_endSuffix++);
|
||||
while (_endSuffix < _startSuffix)
|
||||
result = _baseName + to_string(_endSuffix++) + ", " + result;
|
||||
result = _baseName + std::to_string(_endSuffix++) + ", " + result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -119,7 +118,7 @@ namespace
|
||||
{
|
||||
|
||||
/// Try to format as N * 2**x
|
||||
optional<string> tryFormatPowerOfTwo(bigint const& _value)
|
||||
std::optional<std::string> tryFormatPowerOfTwo(bigint const& _value)
|
||||
{
|
||||
bigint prefix = _value;
|
||||
|
||||
@ -128,7 +127,7 @@ optional<string> tryFormatPowerOfTwo(bigint const& _value)
|
||||
for (; (prefix & 0xff) == 0; prefix >>= 8)
|
||||
++i;
|
||||
if (i <= 2)
|
||||
return nullopt;
|
||||
return std::nullopt;
|
||||
|
||||
// 0x100 yields 2**8 (N is 1 and redundant)
|
||||
if (prefix == 1)
|
||||
@ -150,11 +149,11 @@ optional<string> tryFormatPowerOfTwo(bigint const& _value)
|
||||
|
||||
}
|
||||
|
||||
string solidity::util::formatNumberReadable(bigint const& _value, bool _useTruncation)
|
||||
std::string solidity::util::formatNumberReadable(bigint const& _value, bool _useTruncation)
|
||||
{
|
||||
bool const isNegative = _value < 0;
|
||||
bigint const absValue = isNegative ? (bigint(-1) * _value) : bigint(_value);
|
||||
string const sign = isNegative ? "-" : "";
|
||||
std::string const sign = isNegative ? "-" : "";
|
||||
|
||||
// smaller numbers return as decimal
|
||||
if (absValue <= 0x1000000)
|
||||
@ -165,7 +164,7 @@ string solidity::util::formatNumberReadable(bigint const& _value, bool _useTrunc
|
||||
else if (auto result = tryFormatPowerOfTwo(absValue + 1))
|
||||
return {sign + *result + (isNegative ? " + 1" : " - 1")};
|
||||
|
||||
string str = toHex(toCompactBigEndian(absValue), HexPrefix::Add, HexCase::Mixed);
|
||||
std::string str = toHex(toCompactBigEndian(absValue), HexPrefix::Add, HexCase::Mixed);
|
||||
|
||||
if (_useTruncation)
|
||||
{
|
||||
|
@ -22,7 +22,6 @@
|
||||
|
||||
#include <libsolutil/Keccak256.h>
|
||||
|
||||
using namespace std;
|
||||
using namespace solidity;
|
||||
using namespace solidity::util;
|
||||
|
||||
@ -42,7 +41,7 @@ h256 swarmHashSimple(bytesConstRef _data, size_t _size)
|
||||
return keccak256(toLittleEndian(_size) + _data.toBytes());
|
||||
}
|
||||
|
||||
h256 swarmHashIntermediate(string const& _input, size_t _offset, size_t _length)
|
||||
h256 swarmHashIntermediate(std::string const& _input, size_t _offset, size_t _length)
|
||||
{
|
||||
bytesConstRef ref;
|
||||
bytes innerNodes;
|
||||
@ -104,7 +103,7 @@ h256 chunkHash(bytesConstRef const _data, bool _forceHigherLevel = false)
|
||||
|
||||
}
|
||||
|
||||
h256 solidity::util::bzzr0Hash(string const& _input)
|
||||
h256 solidity::util::bzzr0Hash(std::string const& _input)
|
||||
{
|
||||
return swarmHashIntermediate(_input, 0, _input.size());
|
||||
}
|
||||
|
@ -26,7 +26,6 @@
|
||||
#include <regex>
|
||||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
using namespace solidity;
|
||||
using namespace solidity::util;
|
||||
|
||||
@ -42,8 +41,8 @@ TemporaryDirectory::TemporaryDirectory(std::string const& _prefix):
|
||||
}
|
||||
|
||||
TemporaryDirectory::TemporaryDirectory(
|
||||
vector<boost::filesystem::path> const& _subdirectories,
|
||||
string const& _prefix
|
||||
std::vector<boost::filesystem::path> const& _subdirectories,
|
||||
std::string const& _prefix
|
||||
):
|
||||
TemporaryDirectory(_prefix)
|
||||
{
|
||||
@ -71,9 +70,9 @@ TemporaryDirectory::~TemporaryDirectory()
|
||||
uintmax_t numRemoved = fs::remove_all(m_path, errorCode);
|
||||
if (errorCode.value() != boost::system::errc::success)
|
||||
{
|
||||
cerr << "Failed to completely remove temporary directory '" << m_path << "'. ";
|
||||
cerr << "Only " << numRemoved << " files were actually removed." << endl;
|
||||
cerr << "Reason: " << errorCode.message() << endl;
|
||||
std::cerr << "Failed to completely remove temporary directory '" << m_path << "'. ";
|
||||
std::cerr << "Only " << numRemoved << " files were actually removed." << std::endl;
|
||||
std::cerr << "Reason: " << errorCode.message() << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -28,16 +28,15 @@
|
||||
|
||||
#include <regex>
|
||||
|
||||
using namespace std;
|
||||
using namespace solidity::util;
|
||||
|
||||
Whiskers::Whiskers(string _template):
|
||||
Whiskers::Whiskers(std::string _template):
|
||||
m_template(std::move(_template))
|
||||
{
|
||||
checkTemplateValid();
|
||||
}
|
||||
|
||||
Whiskers& Whiskers::operator()(string _parameter, string _value)
|
||||
Whiskers& Whiskers::operator()(std::string _parameter, std::string _value)
|
||||
{
|
||||
checkParameterValid(_parameter);
|
||||
checkParameterUnknown(_parameter);
|
||||
@ -46,7 +45,7 @@ Whiskers& Whiskers::operator()(string _parameter, string _value)
|
||||
return *this;
|
||||
}
|
||||
|
||||
Whiskers& Whiskers::operator()(string _parameter, bool _value)
|
||||
Whiskers& Whiskers::operator()(std::string _parameter, bool _value)
|
||||
{
|
||||
checkParameterValid(_parameter);
|
||||
checkParameterUnknown(_parameter);
|
||||
@ -56,8 +55,8 @@ Whiskers& Whiskers::operator()(string _parameter, bool _value)
|
||||
}
|
||||
|
||||
Whiskers& Whiskers::operator()(
|
||||
string _listParameter,
|
||||
vector<map<string, string>> _values
|
||||
std::string _listParameter,
|
||||
std::vector<std::map<std::string, std::string>> _values
|
||||
)
|
||||
{
|
||||
checkParameterValid(_listParameter);
|
||||
@ -70,15 +69,15 @@ Whiskers& Whiskers::operator()(
|
||||
return *this;
|
||||
}
|
||||
|
||||
string Whiskers::render() const
|
||||
std::string Whiskers::render() const
|
||||
{
|
||||
return replace(m_template, m_parameters, m_conditions, m_listParameters);
|
||||
}
|
||||
|
||||
void Whiskers::checkTemplateValid() const
|
||||
{
|
||||
regex validTemplate("<[#?!\\/]\\+{0,1}[a-zA-Z0-9_$-]+(?:[^a-zA-Z0-9_$>-]|$)");
|
||||
smatch match;
|
||||
std::regex validTemplate("<[#?!\\/]\\+{0,1}[a-zA-Z0-9_$-]+(?:[^a-zA-Z0-9_$>-]|$)");
|
||||
std::smatch match;
|
||||
assertThrow(
|
||||
!regex_search(m_template, match, validTemplate),
|
||||
WhiskersError,
|
||||
@ -86,9 +85,9 @@ void Whiskers::checkTemplateValid() const
|
||||
);
|
||||
}
|
||||
|
||||
void Whiskers::checkParameterValid(string const& _parameter) const
|
||||
void Whiskers::checkParameterValid(std::string const& _parameter) const
|
||||
{
|
||||
static regex validParam("^" + paramRegex() + "$");
|
||||
static std::regex validParam("^" + paramRegex() + "$");
|
||||
assertThrow(
|
||||
regex_match(_parameter, validParam),
|
||||
WhiskersError,
|
||||
@ -96,7 +95,7 @@ void Whiskers::checkParameterValid(string const& _parameter) const
|
||||
);
|
||||
}
|
||||
|
||||
void Whiskers::checkParameterUnknown(string const& _parameter) const
|
||||
void Whiskers::checkParameterUnknown(std::string const& _parameter) const
|
||||
{
|
||||
assertThrow(
|
||||
!m_parameters.count(_parameter),
|
||||
@ -115,13 +114,13 @@ void Whiskers::checkParameterUnknown(string const& _parameter) const
|
||||
);
|
||||
}
|
||||
|
||||
void Whiskers::checkTemplateContainsTags(string const& _parameter, vector<string> const& _prefixes) const
|
||||
void Whiskers::checkTemplateContainsTags(std::string const& _parameter, std::vector<std::string> const& _prefixes) const
|
||||
{
|
||||
for (auto const& prefix: _prefixes)
|
||||
{
|
||||
string tag{"<" + prefix + _parameter + ">"};
|
||||
std::string tag{"<" + prefix + _parameter + ">"};
|
||||
assertThrow(
|
||||
m_template.find(tag) != string::npos,
|
||||
m_template.find(tag) != std::string::npos,
|
||||
WhiskersError,
|
||||
"Tag '" + tag + "' not found in template:\n" + m_template
|
||||
);
|
||||
@ -131,17 +130,17 @@ void Whiskers::checkTemplateContainsTags(string const& _parameter, vector<string
|
||||
namespace
|
||||
{
|
||||
template<class ReplaceCallback>
|
||||
string regex_replace(
|
||||
string const& _source,
|
||||
regex const& _pattern,
|
||||
std::string regex_replace(
|
||||
std::string const& _source,
|
||||
std::regex const& _pattern,
|
||||
ReplaceCallback _replace,
|
||||
regex_constants::match_flag_type _flags = regex_constants::match_default
|
||||
std::regex_constants::match_flag_type _flags = std::regex_constants::match_default
|
||||
)
|
||||
{
|
||||
sregex_iterator curMatch(_source.begin(), _source.end(), _pattern, _flags);
|
||||
sregex_iterator matchEnd;
|
||||
string::const_iterator lastMatchedPos(_source.cbegin());
|
||||
string result;
|
||||
std::sregex_iterator curMatch(_source.begin(), _source.end(), _pattern, _flags);
|
||||
std::sregex_iterator matchEnd;
|
||||
std::string::const_iterator lastMatchedPos(_source.cbegin());
|
||||
std::string result;
|
||||
while (curMatch != matchEnd)
|
||||
{
|
||||
result.append(curMatch->prefix().first, curMatch->prefix().second);
|
||||
@ -154,23 +153,23 @@ string regex_replace(
|
||||
}
|
||||
}
|
||||
|
||||
string Whiskers::replace(
|
||||
string const& _template,
|
||||
std::string Whiskers::replace(
|
||||
std::string const& _template,
|
||||
StringMap const& _parameters,
|
||||
map<string, bool> const& _conditions,
|
||||
map<string, vector<StringMap>> const& _listParameters
|
||||
std::map<std::string, bool> const& _conditions,
|
||||
std::map<std::string, std::vector<StringMap>> const& _listParameters
|
||||
)
|
||||
{
|
||||
static regex listOrTag(
|
||||
static std::regex listOrTag(
|
||||
"<(" + paramRegex() + ")>|"
|
||||
"<#(" + paramRegex() + ")>((?:.|\\r|\\n)*?)</\\2>|"
|
||||
"<\\?(\\+?" + paramRegex() + ")>((?:.|\\r|\\n)*?)(<!\\4>((?:.|\\r|\\n)*?))?</\\4>"
|
||||
);
|
||||
return regex_replace(_template, listOrTag, [&](match_results<string::const_iterator> _match) -> string
|
||||
return regex_replace(_template, listOrTag, [&](std::match_results<std::string::const_iterator> _match) -> std::string
|
||||
{
|
||||
string tagName(_match[1]);
|
||||
string listName(_match[2]);
|
||||
string conditionName(_match[4]);
|
||||
std::string tagName(_match[1]);
|
||||
std::string listName(_match[2]);
|
||||
std::string conditionName(_match[4]);
|
||||
if (!tagName.empty())
|
||||
{
|
||||
assertThrow(
|
||||
@ -184,12 +183,12 @@ string Whiskers::replace(
|
||||
}
|
||||
else if (!listName.empty())
|
||||
{
|
||||
string templ(_match[3]);
|
||||
std::string templ(_match[3]);
|
||||
assertThrow(
|
||||
_listParameters.count(listName),
|
||||
WhiskersError, "List parameter " + listName + " not set."
|
||||
);
|
||||
string replacement;
|
||||
std::string replacement;
|
||||
for (auto const& parameters: _listParameters.at(listName))
|
||||
replacement += replace(templ, joinMaps(_parameters, parameters), _conditions);
|
||||
return replacement;
|
||||
@ -200,7 +199,7 @@ string Whiskers::replace(
|
||||
bool conditionValue = false;
|
||||
if (conditionName[0] == '+')
|
||||
{
|
||||
string tag = conditionName.substr(1);
|
||||
std::string tag = conditionName.substr(1);
|
||||
|
||||
if (_parameters.count(tag))
|
||||
conditionValue = !_parameters.at(tag).empty();
|
||||
|
@ -33,6 +33,7 @@ NAMESPACE_STD_FREE_FILES=(
|
||||
libsolidity/interface/*
|
||||
libsolidity/lsp/*
|
||||
libsolidity/parsing/*
|
||||
libsolutil/*
|
||||
)
|
||||
|
||||
(
|
||||
|
Loading…
Reference in New Issue
Block a user