Opportunistically take advantage of C++20 move-in/out-of stringstream

This commit is contained in:
Bartosz Brachaczek 2023-01-11 17:21:10 +01:00
parent 370d236b66
commit 5a44947ab8

View File

@ -599,8 +599,7 @@ bool Reader::decodeDouble(Token& token) {
bool Reader::decodeDouble(Token& token, Value& decoded) { bool Reader::decodeDouble(Token& token, Value& decoded) {
double value = 0; double value = 0;
String buffer(token.start_, token.end_); IStringStream is(String(token.start_, token.end_));
IStringStream is(buffer);
if (!(is >> value)) { if (!(is >> value)) {
if (value == std::numeric_limits<double>::max()) if (value == std::numeric_limits<double>::max())
value = std::numeric_limits<double>::infinity(); value = std::numeric_limits<double>::infinity();
@ -1651,8 +1650,7 @@ bool OurReader::decodeDouble(Token& token) {
bool OurReader::decodeDouble(Token& token, Value& decoded) { bool OurReader::decodeDouble(Token& token, Value& decoded) {
double value = 0; double value = 0;
const String buffer(token.start_, token.end_); IStringStream is(String(token.start_, token.end_));
IStringStream is(buffer);
if (!(is >> value)) { if (!(is >> value)) {
if (value == std::numeric_limits<double>::max()) if (value == std::numeric_limits<double>::max())
value = std::numeric_limits<double>::infinity(); value = std::numeric_limits<double>::infinity();
@ -1983,7 +1981,7 @@ bool parseFromStream(CharReader::Factory const& fact, IStream& sin, Value* root,
String* errs) { String* errs) {
OStringStream ssin; OStringStream ssin;
ssin << sin.rdbuf(); ssin << sin.rdbuf();
String doc = ssin.str(); String doc = std::move(ssin).str();
char const* begin = doc.data(); char const* begin = doc.data();
char const* end = begin + doc.size(); char const* end = begin + doc.size();
// Note that we do not actually need a null-terminator. // Note that we do not actually need a null-terminator.